How to send verify mail to gmail account and activate account using php oop concept and pdo for database
Today I will explain how to , in this tutorial send verify mail to gmail account and activate account using php oop concept and pdo for database ,I will implement.
This tutorial demonstrate to build an email verification script .Email verify is a PHP script that allows you to verify email address without storing anything in any databases.it will send users an email requiring them to click a link to verify their email before and then your account will be activated...
And then first, we need to establish a database connection and create a table to insert the account data. So let's go to PHPMyAdmin and create a new database with the name "dbtest" create a user account that has access to that database in order to insert and update data.
download phpmailer form an this link PHPMailer ..
next,create a table and named as users....
Related Next tutorial: Forgot Password and Reset Password Using PHP OOP Concept and PDO for Database
users:
create table users(userID int primay key auto_increment not null,userName varchar(30) not null, userEmail varchar(30) not null unique,userPass varchar(30) not null,mdcode varchar(100));
and next ,we have to create empty .php file and named as
1.db.php
2.signup.php
3.user.php
4.verify.php
5.index.php
6.home.php
7.logout.php
1.db.php
Database is the most important thing to connect and fetch the data and store information and then manipulate the data as you want .and now we want to connect first and am using local server xampp and database name 'dbtest'.
<?php
class db
{
private $host='localhost';
private $uname='root';
private $password='';
private $dbname='dbtest';
public $conn;
public function dbconnection()
{
$this->conn=null;
try
{
$this->conn=new PDO('mysql:host='.$this->host.';dbname='.$this->dbname,
$this->uname,$this->password);
$this->conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e){echo "connection error".$e->getMessage();}
return $this->conn;
}
}
?>
2.signup.php
<?php
session_start();
require_once 'user.php';
$user=new USER();
if($user->is_logged_in()!="")
{
$user->redirect('home.php');
}
if(isset($_POST['submit']))
{
$uname=trim($_POST['username']);
$email=trim($_POST['email']);
$pass=trim($_POST['password']);
$code=md5(uniqid(rand()));
$stmt=$user->query("select * from users where userEmail=:emailid");
$stmt->execute(array("emailid"=>$email));
$row=$stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() > 0)
{
$msg="<strong>sorry! </strong> email is already taken try another..";
}
else
{
if($user->register($uname,$email,$pass,$code))
{
$id=$user->lastid();
$key=base64_encode($id);
$id=$key;
$message="
hello $email.<br/><br/>
welcome to blogger<br/>
<a href='http://localhost/testsignup1/verify.php?userID=$id&mdcode=$code'>click here to acitvate</a>";
$subject="confirm registration";
$user->sendmail($email,$message,$subject);
$msg = "
<strong>Success!</strong> We've sent an email to $email.
Please click on the confirmation link in the email to create your account.
";
}
else
{
echo "sorry...error may occured";
}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php if(isset($msg)) echo $msg; ?>
<form method="post">
<input type="text" name="username" placeholder="username" /><br />
<input type="email" name="email" placeholder="Email" /><br />
<input type="password" name="password" placeholder="password" /><br />
<input type="submit" name="submit" value="submit" /><br />
</form>
</body>
</html>
$id=$user->lastid()-this condition check the lastid in user.php and there is an condition lastInsertId() get the userid assign to $id
so we create a variable named as $key and assinged ($id) is encode with base64 it was unique to find and covert very easy in email verify ..so base 64 the value is like MTU or uTT and then $key is assigned to $id....its $id and then $code is sended to sendmail() function to mail id and when you click to verify by mail the account will be activated....
3.user.php
<?php
require_once 'db.php';
class USER
{
private $conn;
public function __construct()
{
$database=new db();
$db=$database->dbconnection();
$this->conn=$db;
}
public function query($sql)
{
$stmt=$this->conn->prepare($sql);
return $stmt;
}
public function lastid(){
$stmt=$this->conn->lastInsertId();
return $stmt;
}
public function login($email,$password)
{
try
{
$stmt = $this->conn->prepare("SELECT * FROM users WHERE userEmail=:email_id");
$stmt->execute(array(":email_id"=>$email));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() == 1)
{
if($userRow['userStatus']=="Y")
{
if($userRow['userPass']==md5($password))
{
$_SESSION['userSession'] = $userRow['userID'];
return true;
}
else
{
header("Location: index.php?error");
exit;
}
}
else
{
header("Location: index.php?inactive");
exit;
}
}
else
{
header("Location: index.php?error");
exit;
}
}
catch(PDOException $ex)
{
echo $ex->getMessage();
}
}
public function redirect($url)
{
header("location:$url");
}
public function is_logged_in()
{
if(isset($_SESSION['userSession']))
{
return true;
}
}
public function register($uname,$email,$pass,$code)
{
try{
$password=md5($pass);
$stmt=$this->conn->prepare("insert into users (userName,userEmail,userPass,mdcode) values(:uname,:email,:pass,:code)");
$stmt->bindparam(':uname',$uname);
$stmt->bindparam(':email',$email);
$stmt->bindparam(':pass',$password);
$stmt->bindparam(':code',$code);
$stmt->execute();
return $stmt;
}
catch(PDOException $e){echo "error:".$e->getMessage();}
}
public function logout()
{
session_destroy();
$_SESSION['username'] = false;
}
function sendmail($email,$message,$subject)
{
require_once('mailer/class.phpmailer.php');
require_once('mailer/class.smtp.php');
$mail = new PHPMailer;
$mail->IsSMTP();
$mail->SMTPDebug = 2;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->Host = "smtp.gmail.com";
$mail->Port = 587;
$mail->isHTML(true);
$mail->AddAddress($email);
$mail->Username="chandra2555@gmail.com";
$mail->Password="chandra2555";
$mail->SetFrom('chandra2555@gmail.com','chandra Blogspot');
$mail->Subject = $subject;
$mail->MsgHTML($message);
if(!$mail->Send())
{
echo "message is not sent";
}
else{echo "message is sent to your email id";}
}
}
?>
sendmail()-send mail is so complicated think ....lot of people having SMTP() failed and show blank and ssl is not working and tls is not working and port assigned is showing an error lot of problem facing but you are using a membership website it will works very easy but you have to free webhost it not work because hosting is not provide the permission to uses your gmail mail id ....what to do ....follow my instruction ...
once again......am using xampp for local sever and download phpmailer from above link i mention on top ...and then get sample code form same website ...
and then error SMTP() can occur only adding class.phpmailer.php so add another file class.smtp.php in phpmailer it can solve the error and you got msg mail send successfully and then all before you have to do some changes on your emailid see on below image
login gmail ->myaccount->connected apps and sites ->less secure app->on that's it .....
4.verify.php
<?php
require_once 'user.php';
$user = new USER();
if(empty($_GET['userID']) && empty($_GET['mdcode']))
{
$user->redirect('index.php');
}
if(isset($_GET['userID']) && isset($_GET['mdcode']))
{
$id = base64_decode($_GET['userID']);
$code = $_GET['mdcode'];
$statusY = "Y";
$statusN = "N";
$stmt = $user->query("SELECT userID,userStatus FROM users WHERE userID=:uID AND mdcode=:code LIMIT 1");
$stmt->execute(array(":uID"=>$id,":code"=>$code));
$row=$stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() > 0)
{
if($row['userStatus']==$statusN)
{
$stmt = $user->query("UPDATE users1 SET userStatus=:status WHERE userID=:uID");
$stmt->bindparam(":status",$statusY);
$stmt->bindparam(":uID",$id);
$stmt->execute();
$msg = "
<strong>Awesome !</strong> Your Account is Now Activated :
<a href='index.php'>Login here</a>
";
}
else
{
$msg = "
<strong>sorry !</strong> Your Account is already Activated :
<a href='index.php'>Login here</a>
";
}
}
else
{
$msg = "
<strong>sorry !</strong> No Account Found : <a href='signup.php'>Signup here</a>
";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Confirm Registration</title>
</head>
<body id="login">
<div class="container">
<?php if(isset($msg)) { echo $msg; } ?>
</div>
</body>
</html>
5.index.php
<?php
session_start();
require 'user.php';
$login=new USER();
if($login->is_logged_in()!="")
{
$login->redirect('home.php');
}
if(isset($_POST['submit']))
{
$email=trim($_POST['email']);
$password=trim($_POST['password']);
if($login->login($email,$password))
{
$login->redirect('home.php');
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
if(isset($_GET['inactive']))
{
?>
<strong>Sorry!</strong> This Account is not Activated Go to your Inbox and Activate it.
<?php
}
?>
<form method="post">
<?php
if(isset($_GET['error']))
{
?>
<strong>Wrong Details!</strong>
</div>
<?php
}
?>
<input type="text" name="email" placeholder="email" />
<input type="password" name="password" placeholder="password" />
<input type="submit" name="submit" value="submit"/>
<a href="signup.php" >signup</a>
</form>
</body>
</html>
6.home.php
<?php
session_start();
require_once 'user.php';
$user=new USER();
if(!$user->is_logged_in()){
$user->redirect('index.php');
}
$stmt=$user->query("select * from users where userID=:emailid");
$stmt->execute(array(":emailid"=>$_SESSION['userSession']));
$row=$stmt->fetch(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
hi <?php echo $_SESSION['userSession'];?> <?php echo $row['userEmail'];?> <a href="logout.php">logout</a>
</body>
</html>
7.logout.php
<?php
session_start();
require_once 'user.php';
$user = new USER();
if(!$user->is_logged_in())
{
$user->redirect('index.php');
}
if($user->is_logged_in()!="")
{
$user->logout();
$user->redirect('index.php');
}