Home » Tutorials

Using PHP with Email Activation

Let’s say you have a website with registration. However, you want to have all registered users verify their email address to their account before being able to use all the functions of your site. To do this we can use PHP and simply create an activation code for each user when they register.

Let’s make a simple HTML form that submits a username, password, and email address.

<form action="register.php" method="post">
Username: <input type="text" name="username" size="20" maxlength="25" /><br/>
Password: <input type="password" name="password" size="20" maxlength="30" /><br/>
Email: <input type="text" name="email" size="30" maxlength="50" /><br/>
<input type="submit" value="Submit" name="submit" />
</form>

You would probably want to add a password confirm input or whatever else inputs you want in your registration. This is just for the purpose of submitting the value of the username, password, and email address to our function which will email the user based on the submitted email and include the username and password.

In your registration code you can make an activation code by the following:

<?php

function generateCode(){
$codelength = 20; // How long you want the activation code to be.
$characters = "abcdefghijklmnopqrstuvwxyz1234567890"; // All accepted characters.
$activatecode = "";
for($i=0;$i<=$codelength;$i++){
$activatecode .= substr(str_shuffle($characters),0,1);
}
return $activatecode;
}

$userActivationCode = generateCode();

?>

Along with your registration code when you submit the user’s data to your mysql database you would include this in there. We must be connected to a mysql database in order to alter a table (in this case “users”). You can see how to connect to a Mysql database here! You will need to create a column in your users table for both the activation code and their activated status. Like so:

$createcolumn = mysql_query("ALTER TABLE `users` ADD COLUMN activatecode VARCHAR(20)");
$createcolumn = mysql_query("ALTER TABLE `users` ADD COLUMN activatestatus INT(5) DEFAULT 0");

The activatestatus column is used to check if their account is activated or not. Now, let’s make it so they have to click this link in their email after they have registered.

Upon registration we will send an email to them with this code in it.

<?php

function sendActivationEmail($email,$username,$password,$actcode){
// Let’s make sure the email address is valid.
if(preg_match("/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/", $email)){
// Clean up the username and password.
$username = trim(addslashes($username));
$password = trim(addslashes($password));

if($username && $password){

// Now let’s send the email to them!
mail($email,"
Thank you for registering! Below are your account details as well as your activation link needed to complete registration.\n\n
Username: $username\n
Password: $password\n\n
Your activation link:\n

http://mysite.com/?actcode=$actcode\n\n

Thank you and welcome to the site!");

// You can edit the details of the email however you wish of course.

return "Your activation email has been sent to the email specified.";

} else {
return "Please enter a username and password.";
}

} else {
return "Invalid email address entered.";
}
}

// To send the email we define it as $sendEmail with the parameters of our submitted email, username, and password.

$sendEmail = sendActivationEmail($_POST["email"],$_POST["username"],$_POST["password"], $userActivationCode);

?>

Now, this function uses four variables that are pre-defined. The $actcode comes from the function we created called “generateCode”. The username, password, and email variables are coming from a form the user submits to register.

Okay, now we have sent them their email with the link. So when they click the link, what happens? Well we need to make this code. What we will do is execute a sql query to update their row in the table and set activatestatus = 1.

<?php
if(isset($_GET["actcode"])){
// Clean the activate code.
$activatecode = trim(addslashes($_GET["actcode"]));

// Check for their row with that specified activate code.
$sql = mysql_query("SELECT id FROM users WHERE activatecode = ".$activatecode." AND activatestatus = ‘0’ LIMIT 1");
if(mysql_num_rows($sql) > 0){
// Code exists and they aren’t active, let’s make them active.
$update = mysql_query("UPDATE users SET activatestatus = ‘1’ WHERE activatecode = ".$activatecode."");
echo "Your account has been activated!";
} else {
// Code not found.
echo "Invalid activation code.";
}
}
?>

And there you have it. Email activation is quite useful. Enjoy.

0

Popularity: 13% [?]

Share/Bookmark this!

28 Comments

Leave a reply

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

This is a Gravatar-enabled weblog. To get your own globally recognized avatar, please register at Gravatar.

Side Notes

This entry was posted by on February 15, 2009 at 11:23 AM and filed under Tutorials category.

You can add your comments or trackback from your own site. To keep you updated to the latest discussion, you can subscribe to these comments via RSS.

Recent Entries

Pages

Recent Comments

Resources

Questions & Answers

Just started! Have not answered any questions.

Tag Cloud

background body CSS database date dropdown email error_reporting favicon file filesize form format function global hosting HTML image Javascript limit link linkbar mysql numbers online option ordinalize pagination pattern photoshop PHP resize rows script search snowing stylesheet switch table thumbnail time timestamp upload validate variables

Sponsors