How To Reset Password by Email Using PHP7 and MySQLi

You will learn How to recover/reset a forgotten password using PHP and MySQLi in this post. We’ll show you how to use a Forgot Password form to recover your password if you’ve forgotten your username or email. We’ll send a password recovery email to the user after the form is submitted.

There are several accounts on various websites and platforms. The majority of individuals forget their passwords and attempt to reset their passwords on the website.

In this post, You’ll learn how to use PHP and MySQLi to retrieve a forgotten password.

Recover Forgot Password By Email Using PHP7 and MySQLi

We will create a forgot password HTML form using bootstrap 4. There are three fields in this file: username, new password, and confirm the new password, as well as a Submit button. This form is forwarded to the forgot.php page after the user submits the form.

Assume the database contains a 'users' TABLE with one user entry, as shown below. If you have a database, you can use it.

CREATE TABLE IF NOT EXISTS `users` (
  `userid` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `username` varchar(100) NOT NULL,
  `email` varchar(255) NOT NULL,
  `password` varchar(100) NOT NULL,
  PRIMARY KEY (`userid`)
)
INSERT INTO `users` (`userid`, `name`, `username`, `password`) VALUES
(1, 'test', 'test abc', 'guy76tvt577vvtyyunmkl990mnn76668');

Connect MySQL Database with PHP Using mysqli_connect() :

Let’s create a connect.php file to connect MySQL database with PHP. The below code is to connecting database and selecting the database.

<?php
$connection = mysqli_connect('localhost', 'root', 'paasword');
if (!$connection){
    die("Database Connection Failed" . mysqli_error($connection));
}
$select_db = mysqli_select_db($connection, 'test');
if (!$select_db){
    die("Database Selection Failed" . mysqli_error($connection));
}

Create a Form for Forgot Password

Created a forgot.php file into the PHP project. We have started the session at the top of the file. Let’s add the HTML code that shows the forgot password form –

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">

<form id="register-form" role="form" autocomplete="off" class="form" method="post">    
  <div class="form-group">
	<div class="input-group">
	  <span class="input-group-addon"><i class="glyphicon glyphicon-envelope color-blue"></i></span>
	  <input id="email" name="email" placeholder="email address" class="form-control"  type="email">
	</div>
  </div>
  <div class="form-group">
	<input name="recover-submit" class="btn btn-lg btn-primary btn-block" value="Reset Password" type="submit">
  </div>
  
  <input type="hidden" class="hide" name="token" id="token" value=""> 
</form>

In the code above, we have created one email field into the form. The user will enter the registered email id and ll receive an email once the emailid is correct.

PHP Code to Send Forgotten Password by E-Mail

Once this forgot password form is submitted, the entered data is sent in the post to the 'handler.php' file.Let’s create a handler.php php script that will get form data is POST method.

if(isset($_POST) & !empty($_POST)){
	$email = mysqli_real_escape_string($connection, $_POST['email']);
	$sql = "SELECT * FROM `login` WHERE email = '$email'";
	$res = mysqli_query($connection, $sql);
	$count = mysqli_num_rows($res);
	if($count == 1){
		echo "Send email to user with password";
	}else{
		echo "User name does not exist in database";
	}
}

in the above code, The First check the POST superglobal is set & not empty and assign the submitted emailid to a variable. Check that username exists in the database using the select query.

If the mysqli_num_rows() PHP function returns one row, then we will send an email with a plain text password that is fetched from the database using the select query. Assign values of email, password to variables fetched from the select query.

Send Email Using PHP

Let’s create a PHP logic that will send mail using PHPMailer class.

$r = mysqli_fetch_assoc($res);
   $password = $r['password'];
   $to = $r['email'];
   $subject = "Your Recovered Password";
 
   $message = "Please use this password to login " . $password;
   $headers = "From : [email protected]";
   if(mail($to, $subject, $message, $headers)){
      echo "Your Password has been sent to your email id";
   }else{
     echo "Failed to Recover your password, try again";
}
		}

Full PHP Source

The full source code for recover password by email.

<?php
require_once('connect.php');
require('config.php');
require('PHPMailer/PHPMailerAutoload.php');
if(isset($_POST) & !empty($_POST)){
	$email = mysqli_real_escape_string($connection, $_POST['email']);
	$sql = "SELECT * FROM `login` WHERE email = '$email'";
	$res = mysqli_query($connection, $sql);
	$count = mysqli_num_rows($res);
	if($count == 1){
		$r = mysqli_fetch_assoc($res);
		$password = $r['password'];
		$to = $r['email'];
		$subject = "Your Recovered Password";

		$message = "Please use this password to login " . $password;
		$headers = "From : [email protected]";
		if(mail($to, $subject, $message, $headers)){
			echo "Your Password has been sent to your email id";
		}else{
			echo "Failed to Recover your password, try again";
		}

	}else{
		echo "Email does not exist in database";
	}
}


?>
<!DOCTYPE html>
<html>
<head>
	<title>Forgot Password in PHP & MySQL</title>
	<!-- Latest compiled and minified CSS -->
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
</head>
<body>
<div class="container">
      <?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?>
      <?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?>
        <form id="register-form" role="form" autocomplete="off" class="form" method="post">    
		  <div class="form-group">
			<div class="input-group">
			  <span class="input-group-addon"><i class="glyphicon glyphicon-envelope color-blue"></i></span>
			  <input id="email" name="email" placeholder="email address" class="form-control"  type="email">
			</div>
		  </div>
		  <div class="form-group">
			<input name="recover-submit" class="btn btn-lg btn-primary btn-block" value="Reset Password" type="submit">
		  </div>
		  
		  <input type="hidden" class="hide" name="token" id="token" value=""> 
		</form>
</div>
</body>
</html>

Conclusion:

We have connected the MySQLi database with PHP using mysqli_connect() method. We have also created forgot password form using bootstrap 4.Also send forgot email using PHP mailer.

5 thoughts on “How To Reset Password by Email Using PHP7 and MySQLi

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.