{"id":512,"date":"2013-11-13T03:21:11","date_gmt":"2013-11-13T03:21:11","guid":{"rendered":"http:\/\/a1webdesignteam.com\/blog\/?p=512"},"modified":"2013-11-13T03:23:36","modified_gmt":"2013-11-13T03:23:36","slug":"php-email-verification","status":"publish","type":"post","link":"https:\/\/a1webdesignteam.com\/blog\/php-email-verification\/","title":{"rendered":"PHP Email Verification"},"content":{"rendered":"<p>How to implement email verification system using PHP. This is very basic tutorial explained how to create database and proper activation code. Implemented with mysqli_() fuctions, because mysql_() functions are depreciated.<\/p>\n<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\">\n<div id=\"main_left\">\n<div id=\"main_s\">\n<div id=\"Blog1\">\n<div><b>Database<\/b><br \/>\nSample database\u00a0users\u00a0table contains four columns uid, email, password, activation and status.<\/p>\n<div>CREATE TABLE IF NOT EXISTS `<b>users<\/b>` (<br \/>\n`uid`\u00a0int(11) NOT NULL\u00a0AUTO_INCREMENT,<br \/>\n`email`\u00a0varchar(300) NOT NULL UNIQUE,<br \/>\n`password`\u00a0varchar(300) NOT NULL,<br \/>\n`activation`\u00a0varchar(300) NOT NULL UNIQUE,<br \/>\n`status`\u00a0enum(&#8216;0&#8242;,&#8217;1&#8217;) NOT NULL DEFAULT &#8216;0&#8217;,<br \/>\nPRIMARY KEY\u00a0(`uid`)<br \/>\n)<\/div>\n<p><b>HTML Code<\/b><br \/>\nContains simple HTMl code.<\/p>\n<div>&lt;form action=&#8221;&#8221; method=&#8221;post&#8221;&gt;<br \/>\n&lt;label&gt;Email&lt;\/label&gt;<br \/>\n&lt;input type=&#8221;text&#8221; name=&#8221;email&#8221;font-family: inherit; font-style: inherit; border: 0px none; outline: 0px; padding: 0px; margin: 0px; color: blue;&#8221;&gt;input&#8221; autocomplete=&#8221;off&#8221;\/&gt;<br \/>\n&lt;label&gt;Password\u00a0&lt;\/label&gt;<br \/>\n&lt;input type=&#8221;password&#8221; name=&#8221;password&#8221;font-family: inherit; font-style: inherit; border: 0px none; outline: 0px; padding: 0px; margin: 0px; color: blue;&#8221;&gt;input&#8221; autocomplete=&#8221;off&#8221;\/&gt;&lt;br\/&gt;<br \/>\n&lt;input type=&#8221;submit&#8221;font-family: inherit; font-style: inherit; border: 0px none; outline: 0px; padding: 0px; margin: 0px; color: blue;&#8221;&gt;button&#8221; value=&#8221;Registration&#8221; \/&gt;<br \/>\n&lt;span class=&#8217;msg&#8217;&gt;<b>&lt;?php<\/b>\u00a0echo\u00a0$msg;\u00a0<b>?&gt;<\/b>&lt;\/span&gt;<br \/>\n&lt;\/form&gt;<\/div>\n<p><b>db.php<\/b><br \/>\nDatabase configuration file, modify username, password, database and base url values.<\/p>\n<div><b>&lt;?php<\/b><br \/>\ndefine(&#8216;DB_SERVER&#8217;, &#8216;localhost&#8217;);<br \/>\ndefine(&#8216;DB_USERNAME&#8217;, &#8216;username&#8217;);<br \/>\ndefine(&#8216;DB_PASSWORD&#8217;, &#8216;password&#8217;);<br \/>\ndefine(&#8216;DB_DATABASE&#8217;, &#8216;database&#8217;);<br \/>\n$connection =@mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);<br \/>\n$base_url=&#8217;http:\/\/www.youwebsite.com\/email_activation\/&#8217;;<br \/>\n<b>?&gt;<\/b><\/div>\n<p><b>index.php<\/b><br \/>\nContains PHP code, storing user registration values into\u00a0users\u00a0table. Here activation code generation using\u00a0MD5\u00a0encryption.<\/p>\n<div><b>&lt;?php<\/b><br \/>\ninclude\u00a0&#8216;db.php&#8217;;<br \/>\n$msg=&#8221;;<br \/>\nif(!empty($_POST[&#8217;email&#8217;])\u00a0&amp;&amp;\u00a0isset($_POST[&#8217;email&#8217;])\u00a0&amp;&amp;\u00a0!empty($_POST[&#8216;password&#8217;])\u00a0&amp;&amp;\u00a0\u00a0isset($_POST[&#8216;password&#8217;]) )<br \/>\n{<br \/>\n\/\/ username and password sent from form<br \/>\n$email=mysql_real_escape_string($_POST[&#8217;email&#8217;]);<br \/>\n$password=mysql_real_escape_string($_POST[&#8216;password&#8217;]);<br \/>\n\/\/ regular expression for email check<br \/>\n$regex = &#8216;\/^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,4})$\/&#8217;;if(preg_match($regex, $email))<br \/>\n{<br \/>\n$password=md5($password);\u00a0\/\/ encrypted password<br \/>\n$activation=md5($email.time());\u00a0\/\/ encrypted email+timestamp<br \/>\n$count=mysqli_query($connection,&#8221;SELECT uid FROM users WHERE email=&#8217;$email'&#8221;);<br \/>\n\/\/ email check<br \/>\nif(mysqli_num_rows($count) &lt; 1)<br \/>\n{<br \/>\nmysqli_query($connection,&#8221;INSERT INTO users(email,password,activation) VALUES(&#8216;$email&#8217;,&#8217;$password&#8217;,&#8217;$activation&#8217;)&#8221;);<br \/>\n\/\/ sending email<br \/>\ninclude\u00a0&#8216;smtp\/Send_Mail.php&#8217;;<br \/>\n$to=$email;<br \/>\n$subject=&#8221;Email verification&#8221;;<br \/>\n$body=&#8217;Hi, &lt;br\/&gt; &lt;br\/&gt; We need to make sure you are human. Please verify your email and get started using your Website account. &lt;br\/&gt; &lt;br\/&gt; &lt;a href=&#8221;&#8216;.$base_url.&#8217;activation\/&#8217;.$activation.'&#8221;&gt;&#8217;.$base_url.&#8217;activation\/&#8217;.$activation.'&lt;\/a&gt;&#8217;;<\/p>\n<p>Send_Mail($to,$subject,$body);<br \/>\n$msg= &#8220;Registration successful, please activate email.&#8221;;<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\n$msg= &#8216;The email is already taken, please try new.&#8217;;<br \/>\n}<\/p>\n<p>}<br \/>\nelse<br \/>\n{<br \/>\n$msg = &#8216;The email you have entered is invalid, please try again.&#8217;;<br \/>\n}<\/p>\n<p>}<br \/>\n\/\/ HTML Part<br \/>\n<b>?&gt;<\/b><\/p>\n<\/div>\n<p><b>Send_Mail.php<\/b><br \/>\nSending email function, just modify SMTP host, username and password.<\/p>\n<div><b>&lt;?php<\/b><br \/>\n<b>function<\/b>\u00a0Send_Mail($to,$subject,$body)<br \/>\n{<br \/>\nrequire\u00a0&#8216;class.phpmailer.php&#8217;;<br \/>\n$from \u00a0 \u00a0 \u00a0 = &#8220;from@yourwebsite.com&#8221;;<br \/>\n$mail \u00a0 \u00a0 \u00a0 = new PHPMailer();<br \/>\n$mail-&gt;IsSMTP(true); \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ use SMTP<br \/>\n$mail-&gt;IsHTML(true);<br \/>\n$mail-&gt;SMTPAuth \u00a0 = true; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ enable SMTP authentication<br \/>\n$mail-&gt;Host \u00a0 \u00a0 \u00a0 = &#8220;tls:\/\/smtp.yourwebsite.com&#8221;; \/\/ SMTP host<br \/>\n$mail-&gt;Port \u00a0 \u00a0 \u00a0 = \u00a0465; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ set the SMTP port<br \/>\n$mail-&gt;Username \u00a0 = &#8220;SMTP_Username&#8221;; \u00a0\/\/ SMTP \u00a0username<br \/>\n$mail-&gt;Password \u00a0 = &#8220;SMTP_Password&#8221;; \u00a0\/\/ SMTP password<br \/>\n$mail-&gt;SetFrom($from, &#8216;From Name&#8217;);<br \/>\n$mail-&gt;AddReplyTo($from,&#8217;From Name&#8217;);<br \/>\n$mail-&gt;Subject \u00a0 \u00a0= $subject;<br \/>\n$mail-&gt;MsgHTML($body);<br \/>\n$address = $to;<br \/>\n$mail-&gt;AddAddress($address, $to);<br \/>\n$mail-&gt;Send();<br \/>\n}<br \/>\n?&gt;<\/div>\n<p><b>activation.php<\/b><br \/>\nContains PHP code, here based on activations code\u00a0user\u00a0status updating from\u00a00to\u00a01.<\/p>\n<div><b>&lt;?php<\/b><br \/>\ninclude\u00a0&#8216;db.php&#8217;;<br \/>\n$msg=&#8221;;<br \/>\nif(!empty($_GET[&#8216;code&#8217;]) &amp;&amp;\u00a0isset($_GET[&#8216;code&#8217;]))<br \/>\n{<br \/>\n$code=mysql_real_escape_string($_GET[&#8216;code&#8217;]);<br \/>\n$c=mysqli_query($connection,&#8221;SELECT uid FROM users WHERE activation=&#8217;$code'&#8221;);if(mysqli_num_rows($c) &gt; 0)<br \/>\n{<br \/>\n$count=mysqli_query($connection,&#8221;SELECT uid FROM users WHERE activation=&#8217;$code&#8217; and status=&#8217;<b>0<\/b>&#8216;&#8221;);<\/p>\n<p>if(mysqli_num_rows($count) == 1)<br \/>\n{<br \/>\nmysqli_query($connection,&#8221;UPDATE users SET status=&#8217;1&#8217; WHERE activation=&#8217;$code'&#8221;);<br \/>\n$msg=&#8221;Your account is activated&#8221;;<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\n$msg =&#8221;Your account is already active, no need to activate again&#8221;;<br \/>\n}<\/p>\n<p>}<br \/>\nelse<br \/>\n{<br \/>\n$msg =&#8221;Wrong activation code.&#8221;;<br \/>\n}<\/p>\n<p>}<br \/>\n?&gt;<br \/>\n\/\/HTML Part<br \/>\n<b>&lt;?php<\/b>\u00a0echo\u00a0$msg;\u00a0<b>?&gt;<\/b><\/p>\n<\/div>\n<p><b>Email Verification<br \/>\n<\/b><br \/>\n<b>.htaccess<\/b><br \/>\nURL redirection script it turns<br \/>\nhttp:\/\/website.com\/activation.php?code=ACTIVATION_CODE<br \/>\nto<br \/>\nhttp:\/\/website.com\/activation\/ACTIVATION_CODE<\/p>\n<div>RewriteEngine\u00a0OnRewriteRule\u00a0^activation\/([a-zA-Z0-9_-]+)$\u00a0activation.php?code=$1<br \/>\nRewriteRule\u00a0^activation\/([a-zA-Z0-9_-]+)\/$\u00a0activation.php?code=$1<\/p>\n<\/div>\n<p><b>CSS code<\/b><\/p>\n<div>body<br \/>\n{<br \/>\nfont-family: &#8220;Helvetica&#8221;,Arial,sans-serif;<br \/>\nfont-weight: 500;<br \/>\ncolor:#333;<br \/>\n}<br \/>\nlabel<br \/>\n{<br \/>\nwidth:100px;<br \/>\ndisplay:block;<br \/>\nfont-weight:bold;<br \/>\ncolor:#666666;<br \/>\n}<br \/>\n#main<br \/>\n{<br \/>\nmargin:0 auto;<br \/>\nwidth:800px;<br \/>\n}<br \/>\n.input<br \/>\n{<br \/>\npadding:10px;<br \/>\nfont-size:14px;<br \/>\nborder:1px solid #999999;<br \/>\nwidth:200px;<br \/>\nmargin-bottom:10px;<br \/>\n}<br \/>\n.button\u00a0{<br \/>\npadding:10px;<br \/>\nbackground-color: #5fcf80 !important;<br \/>\nborder-color: #3ac162 !important;<br \/>\n}<br \/>\n.msg<br \/>\n{<br \/>\nfont-size:11px;<br \/>\ncolor:#666;<br \/>\npadding:10px;<br \/>\n}<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>How to implement email verification system using PHP. This is very basic tutorial explained how to create database and proper activation code. Implemented with mysqli_() fuctions, because mysql_() functions are depreciated. Database Sample database\u00a0users\u00a0table contains four columns uid, email, password, activation and status. CREATE TABLE IF NOT EXISTS `users` ( `uid`\u00a0int(11) NOT NULL\u00a0AUTO_INCREMENT, `email`\u00a0varchar(300) NOT [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0},"categories":[30,7],"tags":[],"_links":{"self":[{"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/posts\/512"}],"collection":[{"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/comments?post=512"}],"version-history":[{"count":0,"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/posts\/512\/revisions"}],"wp:attachment":[{"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/media?parent=512"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/categories?post=512"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/a1webdesignteam.com\/blog\/wp-json\/wp\/v2\/tags?post=512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}