Home Backend Development PHP Tutorial PHP member password retrieval function implementation example introduction_PHP tutorial

PHP member password retrieval function implementation example introduction_PHP tutorial

Jul 13, 2016 am 10:44 AM
php introduce member Function Example accomplish password retrieve have of system website automatic

If your website has a membership system, you must have an automatic password retrieval function, which is the forgotten password function. If the user forgets the password, he can directly retrieve the password through his email or mobile phone number. Let me introduce the email retrieval function. Password method.

Setting ideas

1. Users need to provide an E-MAIL when registering. The purpose is to use this email to retrieve the password.

2. When the user forgets their password or user name, click the "Retrieve Password" hyperlink on the login page, open the form, enter the email address used for registration, and submit.

3. The system finds the user information from the database through the mailbox, and updates the user's password to a temporary password (for example: 12345678).

4. The system uses the Jmail function to send the user's information to the user's mailbox (the content includes: user name, temporary password, and prompts to remind the user to change the temporary password in time).

5. Users can log in with a temporary password.


HTML

We place a page on the password retrieval page that requires the user to enter the email address used for registration, and then submit the front-end js to handle the interaction.

The code is as follows Copy code
 代码如下 复制代码

输入您注册的电子邮箱,找回密码:



Enter your registered email address to retrieve your password:

jQuery
 代码如下 复制代码

$(function(){
    $("#sub_btn").click(function(){
        var email = $("#email").val();
        var preg = /^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/; //匹配Email
        if(email=='' || !preg.test(email)){
            $("#chkmsg").html("请填写正确的邮箱!");
        }else{
            $("#sub_btn").attr("disabled","disabled").val('提交中..').css("cursor","default");
            $.post("sendmail.php",{mail:email},function(msg){
                if(msg=="noreg"){
                    $("#chkmsg").html("该邮箱尚未注册!");
                    $("#sub_btn").removeAttr("disabled").val('提 交').css("cursor","pointer");
                }else{
                    $(".demo").html("

"+msg+"

");
                }
            });
        }
    });
})

After the user enters the email address and clicks submit, jQuery first verifies whether the email format is correct. If it is correct, it sends an Ajax request to the background sendmail.php. sendmail.php is responsible for verifying whether the email address exists and sending the email, and will return the corresponding response. The processing results are sent to the front page, please see the jQuery code:
The code is as follows Copy code
$(function(){ $("#sub_btn").click(function(){       var email = $("#email").val();           var preg = /^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/; //Match Email If(email=='' || !preg.test(email)){                 $("#chkmsg").html("Please fill in the correct email address!");          }else{                  $("#sub_btn").attr("disabled","disabled").val('Submitting..').css("cursor","default");                  $.post("sendmail.php",{mail:email},function(msg){ If(msg=="noreg"){ ​​​​​​​​​​ $("#sub_btn").removeAttr("disabled").val('submit').css("cursor","pointer");                       }else{                                  $(".demo").html("

"+msg+"

");                                                                                                                     });           } }); })

The jQuery code used above is very convenient and concise to complete the front-end interactive operation. If you have a certain jQuery foundation, the above code is clear at a glance and does not require much explanation.

Of course, don’t forget to load the jQuery library file in the page. Some students often ask me why the demo downloaded from www.bKjia.c0m cannot be used. 80% of the time it is because the loading path of jquery or other files is wrong and it is not loaded. Necessary documents.
PHP

sendmail.php needs to verify whether the email exists in the system user table. If so, read the user information, encrypt the user ID, user name and password using md5 to generate a special string as a verification code to retrieve the password, and then Construct URL. At the same time, in order to control the timeliness of the URL link, we will record the operation time when the user submits the password retrieval action, and finally call the email sending class to send the email to the user's mailbox. The sending email class smtp.class.php has been packaged, please download it.

The code is as follows Copy code
 代码如下 复制代码

include_once("connect.php");//连接数据库
 
$email = stripslashes(trim($_POST['mail']));
    
$sql = "select id,username,password from `t_user` where `email`='$email'";
$query = mysql_query($sql);
$num = mysql_num_rows($query);
if($num==0){//该邮箱尚未注册!
    echo 'noreg';
    exit;    
}else{
    $row = mysql_fetch_array($query);
    $getpasstime = time();
    $uid = $row['id'];
    $token = md5($uid.$row['username'].$row['password']);//组合验证码
    $url = "/demo/resetpass/reset.php?email=".$email."
&token=".$token;//构造URL
    $time = date('Y-m-d H:i');
    $result = sendmail($time,$email,$url);
    if($result==1){//邮件发送成功
        $msg = '系统已向您的邮箱发送了一封邮件
请登录到您的邮箱及时重置您的密码!';
        //更新数据发送时间
        mysql_query("update `t_user` set `getpasstime`='$getpasstime' where id='$uid '");
    }else{
        $msg = $result;
    }
    echo $msg;
}
 
//发送邮件
function sendmail($time,$email,$url){
    include_once("smtp.class.php");
    $smtpserver = ""; //SMTP服务器,如smtp.163.com
    $smtpserverport = 25; //SMTP服务器端口
    $smtpusermail = ""; //SMTP服务器的用户邮箱
    $smtpuser = ""; //SMTP服务器的用户帐号
    $smtppass = ""; //SMTP服务器的用户密码
    $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); 
    //这里面的一个true是表示使用身份验证,否则不使用身份验证.
    $emailtype = "HTML"; //信件类型,文本:text;网页:HTML
    $smtpemailto = $email;
    $smtpemailfrom = $smtpusermail;
    $emailsubject = "www.bKjia.c0m - 找回密码";
    $emailbody = "亲爱的".$email.":
您在".$time."提交了找回密码请求。请点击下面的链接重置密码
(按钮24小时内有效)。
".$url."";
    $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype);
 
    return $rs;
}

include_once("connect.php");//Connect to the database $email = stripslashes(trim($_POST['mail'])); ​   $sql = "select id,username,password from `t_user` where `email`='$email'"; $query = mysql_query($sql); $num = mysql_num_rows($query); if($num==0){//This email address has not been registered yet! echo 'noreg'; exit; }else{ $row = mysql_fetch_array($query); $getpasstime = time(); $uid = $row['id']; $token = md5($uid.$row['username'].$row['password']);//Combined verification code $url = "/demo/resetpass/reset.php?email=".$email." &token=".$token;//Construct URL $time = date('Y-m-d H:i'); $result = sendmail($time,$email,$url); If($result==1){//Email sent successfully ​​​​$msg = 'The system has sent an email to your mailbox
Please log in to your mailbox to reset your password in time! '; //Update data sending time mysql_query("update `t_user` set `getpasstime`='$getpasstime' where id='$uid '"); }else{           $msg = $result; } echo $msg; } //Send email function sendmail($time,$email,$url){ Include_once("smtp.class.php"); $smtpserver = ""; //SMTP server, such as smtp.163.com $smtpserverport = 25; //SMTP server port $smtpusermail = ""; //The user's email address of the SMTP server $smtpuser = ""; //SMTP server user account $smtppass = ""; //User password of SMTP server $smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); //A true here means that authentication is used, otherwise authentication is not used. $emailtype = "HTML"; //Email type, text: text; web page: HTML $smtpemailto = $email; $smtpemailfrom = $smtpusermail; $emailsubject = "www.bKjia.c0m - Retrieve password"; $emailbody = "Dear ".$email.":
You submitted a password retrieval request at ".$time.". Please click the link below to reset your password (The button is valid for 24 hours).
".$url.""; $rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype); Return $rs; }

Okay, at this time, you will receive a password retrieval email from helloweba in your email. There is a URL link in the email content. Click the link to reset.php of www.bKjia.c0m to verify your email.

The code is as follows Copy code
 代码如下 复制代码

include_once("connect.php");//连接数据库
 
$token = stripslashes(trim($_GET['token']));
$email = stripslashes(trim($_GET['email']));
$sql = "select * from `t_user` where email='$email'";
 
$query = mysql_query($sql);
$row = mysql_fetch_array($query);
if($row){
    $mt = md5($row['id'].$row['username'].$row['password']);
    if($mt==$token){
        if(time()-$row['getpasstime']>24*60*60){
            $msg = '该链接已过期!';
        }else{
            //重置密码...
            $msg = '请重新设置密码,显示重置密码表单,
这里只是演示,略过。';
        }
    }else{
        $msg =  '无效的链接';
    }
}else{
    $msg =  '错误的链接!';    
}
echo $msg;

include_once("connect.php");//Connect to the database

$token = stripslashes(trim($_GET['token']));
$email = stripslashes(trim($_GET['email']));
$sql = "select * from `t_user` where email='$email'";

$query = mysql_query($sql);
$row = mysql_fetch_array($query);
if($row){
$mt = md5($row['id'].$row['username'].$row['password']);
If($mt==$token){
If(time()-$row['getpasstime']>24*60*60){
                $msg = 'This link has expired! ';
          }else{
//Reset password...
                                                                                                                                                                                                                                                                                Please reset the password, displays the reset password form, is displayed. This is just a demonstration, skip it. ';
                                            }else{
          $msg = 'Invalid link';
}  
}else{
$msg = 'Wrong link! '; 
}
echo $msg;

reset.php first accepts the parameters email and token, and then queries whether the email exists in the data table t_user based on the email. If it exists, obtain the user's information, and construct the token value in the same way as the token combination in sendmail.php. Then compare it with the token passed by the URL. If the difference between the current time and the time when the email was sent is more than 24 hours, it will prompt "The link has expired!". Otherwise, it means that the link is valid and you will be redirected to the password reset page. Finally, it is up to the user to set a new password.

Summary: Through registered email verification and password retrieval via email in this article, we know the application of sending emails in website development and its importance. Of course, SMS verification applications are also popular now. This requires related SMS interface docking. .

Finally, attach the data table t_user structure:
 代码如下 复制代码

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(30) NOT NULL,
  `password` varchar(32) NOT NULL,
  `email` varchar(50) NOT NULL,
  `getpasstime` int(10) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

The code is as follows Copy code
CREATE TABLE `t_user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(30) NOT NULL,
`password` varchar(32) NOT NULL,
`email` varchar(50) NOT NULL,
`getpasstime` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

smtp.class.php类文件

 代码如下 复制代码

class Smtp{

    /* Public Variables */

 var $smtp_port;

 var $time_out;

 var $host_name;

 var $log_file;

 var $relay_host;

 var $debug;

 var $auth;

 var $user;

 var $pass;

 /* Private Variables */
 var $sock;

 /* Constractor */

 function smtp($relay_host = "", $smtp_port = 25, $auth = false, $user, $pass) {
  $this->debug = false;

  $this->smtp_port = $smtp_port;

  $this->relay_host = $relay_host;

  $this->time_out = 30; //is used in fsockopen()

  $this->auth = $auth; //auth

  $this->user = $user;

  $this->pass = $pass;

  $this->host_name = "localhost"; //is used in HELO command
  $this->log_file = "";

  $this->sock = false;
 }

 /* Main Function */

 function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "") {
  $mail_from = $this->get_address($this->strip_comment($from));

  $body = ereg_replace("(^|(rn))(.)", "1.3", $body);

  $header .= "MIME-Version:1.0rn";

  if ($mailtype == "HTML") {
   $header .= "Content-Type:text/htmlrn";
  }

  $header .= "To: " . $to . "rn";

  if ($cc != "") {
   $header .= "Cc: " . $cc . "rn";
  }

  $header .= "From: $from<" . $from . ">rn";

  $header .= "Subject: " . $subject . "rn";

  $header .= $additional_headers;

  $header .= "Date: " . date("r") . "rn";

  $header .= "X-Mailer:By Redhat (PHP/" . phpversion() . ")rn";

  list ($msec, $sec) = explode(" ", microtime());

  $header .= "Message-ID: <" . date("YmdHis", $sec) . "." . ($msec * 1000000) . "." . $mail_from . ">rn";

  $TO = explode(",", $this->strip_comment($to));

  if ($cc != "") {
   $TO = array_merge($TO, explode(",", $this->strip_comment($cc)));
  }

  if ($bcc != "") {
   $TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));
  }

  $sent = true;

  foreach ($TO as $rcpt_to) {
   $rcpt_to = $this->get_address($rcpt_to);

   if (!$this->smtp_sockopen($rcpt_to)) {
    $this->log_write("Error: Cannot send email to " . $rcpt_to . "n");

    $sent = false;

    continue;
   }

   if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {
    $this->log_write("E-mail has been sent to <" . $rcpt_to . ">n");
   } else {
    $this->log_write("Error: Cannot send email to <" . $rcpt_to . ">n");

    $sent = false;
   }

   fclose($this->sock);

   $this->log_write("Disconnected from remote hostn");
  }

  return $sent;
 }

 /* Private Functions */

 function smtp_send($helo, $from, $to, $header, $body = "") {
  if (!$this->smtp_putcmd("HELO", $helo)) {
   return $this->smtp_error("sending HELO command");
  }
  // auth
  if ($this->auth) {
   if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))) {
    return $this->smtp_error("sending HELO command");
   }

   if (!$this->smtp_putcmd("", base64_encode($this->pass))) {
    return $this->smtp_error("sending HELO command");
   }
  }

  if (!$this->smtp_putcmd("MAIL", "FROM:<" . $from . ">")) {
   return $this->smtp_error("sending MAIL FROM command");
  }

  if (!$this->smtp_putcmd("RCPT", "TO:<" . $to . ">")) {
   return $this->smtp_error("sending RCPT TO command");
  }

  if (!$this->smtp_putcmd("DATA")) {
   return $this->smtp_error("sending DATA command");
  }

  if (!$this->smtp_message($header, $body)) {
   return $this->smtp_error("sending message");
  }

  if (!$this->smtp_eom()) {
   return $this->smtp_error("sending . [EOM]");
  }

  if (!$this->smtp_putcmd("QUIT")) {
   return $this->smtp_error("sending QUIT command");
  }

  return true;
 }

 function smtp_sockopen($address) {
  if ($this->relay_host == "") {
   return $this->smtp_sockopen_mx($address);
  } else {
   return $this->smtp_sockopen_relay();
  }
 }

 function smtp_sockopen_relay() {
  $this->log_write("Trying to " . $this->relay_host . ":" . $this->smtp_port . "n");

  $this->sock = @ fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);

  if (!($this->sock && $this->smtp_ok())) {
   $this->log_write("Error: Cannot connenct to relay host " . $this->relay_host . "n");

   $this->log_write("Error: " . $errstr . " (" . $errno . ")n");

   return false;
  }

  $this->log_write("Connected to relay host " . $this->relay_host . "n");

  return true;
  ;
 }

 function smtp_sockopen_mx($address) {
  $domain = ereg_replace("^.+@([^@]+)$", "1", $address);

  if (!@ getmxrr($domain, $MXHOSTS)) {
   $this->log_write("Error: Cannot resolve MX "" . $domain . ""n");

   return false;
  }

  foreach ($MXHOSTS as $host) {
   $this->log_write("Trying to " . $host . ":" . $this->smtp_port . "n");

   $this->sock = @ fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);

   if (!($this->sock && $this->smtp_ok())) {
    $this->log_write("Warning: Cannot connect to mx host " . $host . "n");

    $this->log_write("Error: " . $errstr . " (" . $errno . ")n");

    continue;
   }

   $this->log_write("Connected to mx host " . $host . "n");

   return true;
  }

  $this->log_write("Error: Cannot connect to any mx hosts (" . implode(", ", $MXHOSTS) . ")n");

  return false;
 }

 function smtp_message($header, $body) {
  fputs($this->sock, $header . "rn" . $body);

  $this->smtp_debug("> " . str_replace("rn", "n" . "> ", $header . "n> " . $body . "n> "));

  return true;
 }

 function smtp_eom() {
  fputs($this->sock, "rn.rn");

  $this->smtp_debug(". [EOM]n");

  return $this->smtp_ok();
 }

 function smtp_ok() {
  $response = str_replace("rn", "", fgets($this->sock, 512));

  $this->smtp_debug($response . "n");

  if (!ereg("^[23]", $response)) {
   fputs($this->sock, "QUITrn");

   fgets($this->sock, 512);

   $this->log_write("Error: Remote host returned "" . $response . ""n");

   return false;
  }

  return true;
 }

 function smtp_putcmd($cmd, $arg = "") {
  if ($arg != "") {
   if ($cmd == "")
    $cmd = $arg;

   else
    $cmd = $cmd . " " . $arg;
  }

  fputs($this->sock, $cmd . "rn");

  $this->smtp_debug("> " . $cmd . "n");

  return $this->smtp_ok();
 }

 function smtp_error($string) {
  $this->log_write("Error: Error occurred while " . $string . ".n");

  return false;
 }

 function log_write($message) {
  $this->smtp_debug($message);

  if ($this->log_file == "") {
   return true;
  }

  $message = date("M d H:i:s ") . get_current_user() . "[" . getmypid() . "]: " . $message;

  if (!@ file_exists($this->log_file) || !($fp = @ fopen($this->log_file, "a"))) {
   $this->smtp_debug("Warning: Cannot open log file "" . $this->log_file . ""n");

   return false;
   ;
  }

  flock($fp, LOCK_EX);

  fputs($fp, $message);

  fclose($fp);

  return true;
 }

 function strip_comment($address) {
  $comment = "([^()]*)";

  while (ereg($comment, $address)) {
   $address = ereg_replace($comment, "", $address);
  }

  return $address;
 }

 function get_address($address) {
  $address = ereg_replace("([ trn])+", "", $address);

  $address = ereg_replace("^.*<(.+)>.*$", "1", $address);

  return $address;
 }

 function smtp_debug($message) {
  if ($this->debug) {
   echo $message . "
   ;";
  }
 }
}
?>

最后面有个数据库连接类,这里就不介绍了大大家可以百本站找相关的数据库连接mysql类哦。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/633135.htmlTechArticle如果你做的网站有会员系统那必须就自动找回密码功能了,也就是忘记密码功能,如果用户忘记了密码可以通过邮箱或手机号直接找回密码...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1663
14
PHP Tutorial
1263
29
C# Tutorial
1237
24
Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

PHP and Python: Comparing Two Popular Programming Languages PHP and Python: Comparing Two Popular Programming Languages Apr 14, 2025 am 12:13 AM

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

PHP in Action: Real-World Examples and Applications PHP in Action: Real-World Examples and Applications Apr 14, 2025 am 12:19 AM

PHP is widely used in e-commerce, content management systems and API development. 1) E-commerce: used for shopping cart function and payment processing. 2) Content management system: used for dynamic content generation and user management. 3) API development: used for RESTful API development and API security. Through performance optimization and best practices, the efficiency and maintainability of PHP applications are improved.

PHP: A Key Language for Web Development PHP: A Key Language for Web Development Apr 13, 2025 am 12:08 AM

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP vs. Python: Understanding the Differences PHP vs. Python: Understanding the Differences Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

Explain the match expression (PHP 8 ) and how it differs from switch. Explain the match expression (PHP 8 ) and how it differs from switch. Apr 06, 2025 am 12:03 AM

In PHP8, match expressions are a new control structure that returns different results based on the value of the expression. 1) It is similar to a switch statement, but returns a value instead of an execution statement block. 2) The match expression is strictly compared (===), which improves security. 3) It avoids possible break omissions in switch statements and enhances the simplicity and readability of the code.

The Enduring Relevance of PHP: Is It Still Alive? The Enduring Relevance of PHP: Is It Still Alive? Apr 14, 2025 am 12:12 AM

PHP is still dynamic and still occupies an important position in the field of modern programming. 1) PHP's simplicity and powerful community support make it widely used in web development; 2) Its flexibility and stability make it outstanding in handling web forms, database operations and file processing; 3) PHP is constantly evolving and optimizing, suitable for beginners and experienced developers.

PHP vs. Other Languages: A Comparison PHP vs. Other Languages: A Comparison Apr 13, 2025 am 12:19 AM

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.

See all articles