PHP Simple implementation of the member Recover password function method

Source: Internet
Author: User
Tags ereg explode md5 encryption php class preg utf 8 jquery library
This article mainly introduces the PHP simple implementation of the member Recover password function method, interested in the friend's reference, I hope to help you.

Setup Ideas

1, user registration needs to provide an e-mail mailbox, the purpose is to use the mailbox to retrieve the password.

2, when the user forgot the password or user name, click on the login page "Retrieve password" hyperlink, open the form, and enter the registration of e-mail address, submit.

3, the system through the mailbox, from the database to find the user information, and update the user's password for a temporary password (such as: 12345678).

4, the system with the use of JMail function to send the user's information to the user's mailbox (the content includes: User name, temporary password, remind users to modify the temporary password prompt).

5, the user can log in with temporary password.

Html

We place a password on the page to ask the user to enter the registration of the mailbox, and then submit the foreground JS to handle the interaction.

The code is as follows

<p><strong> Enter your registered email address, retrieve your password:</strong></p> <p><input type= "text" class= "input" name = "Email" id= "email" ><span id= "chkmsg" ></span></p> <p><input type= "button" class= "BTN" Id= "SUB_BTN" value= "Submit" ></p>

Jquery

When the user finishes entering the mailbox and clicks Submit, jquery verifies that the mailbox is formatted correctly. If correct, by sending an AJAX request to the background sendmail.php, sendmail.php is responsible for verifying that the mailbox exists and sending the message, and returning the corresponding processing results to the foreground page, see the jquery code:

The code is as follows

$ (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 mailbox!") "); } else{$ ("#sub_btn"). attr ("Disabled", "disabled"). Val (' Submit: '). CSS ("cursor", "Default"); $.post ("sendmail.php", {mail:email},function (msg) {if (msg== "Noreg") {$ ("#chkmsg"). HTML ("The mailbox is not registered! "); $ ("#sub_btn"). Removeattr ("Disabled"). Val (' Submit '). CSS ("cursor", "pointer"); }else{$ (". Demo"). HTML ("

The jquery code used above is convenient and concise to complete the front-end interaction, if you have a certain jquery basis, the above code at a glance, not much explanation.

Of course, do not forget to load the jquery library files in the page, some students often ask me to download from the Internet demo How to use, that 80% is jquery or other file loading path is wrong cause the necessary files are not loaded.

Php

sendmail.php need to verify that the e-mail exists in the System User table, if there is, read the user information, the user ID, user name and password awakened MD5 encryption to generate a special string as the code to retrieve the password, and then construct the URL. At the same time, in order to control the timeliness of the URL link, will record the user to submit the operation time to retrieve the password action, the last call to Send mail class mail to the user mailbox, send the message Class smtp.class.php has been packaged, please download.

The code is as follows

Include_once ("connect.php");//Connect 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) {//The mailbox has not been registered! Echo ' Noreg '; Exit }else{$row = mysql_fetch_array ($query), $getpasstime = Time (), $uid = $row [' id ']; $token = MD5 ($uid. $row [' username ']. $row [' Password ']); /combination 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) {//message sent successfully $msg = ' system has sent an email to your email <br/> please login to your email address to reset your password in time! '; Update data send time mysql_query ("Update ' T_user ' set ' getpasstime ' = ' $getpasstime ' where id= ' $uid '");} else{$msg = $result;} echo $msg; }//Send mail 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 mailbox of the SMTP server $smtpuser = ""; The user account for the SMTP server $smtppass = ""; SMTP serverUser Password $smtp = new SMTP ($smtpserver, $smtpserverport, True, $smtpuser, $smtppass); A true in this case is that authentication is used, otherwise it is not used. $emailtype = "HTML"; Letter type, text: text; Web page: HTML $smtpemailto = $email; $smtpemailfrom = $smtpusermail; $emailsubject = "www.jb51.net-Recover password"; $emailbody = "Dear". $email. " :<br/> you in the ". $time." A request to retrieve the password was submitted. Please click on the link below to reset your password (the button is valid within 24 hours). <br/><a href= ' ". $url." target= ' _blank ' > ". $url." </a> "; $rs = $smtp->sendmail ($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype); return $rs; }

OK, this time your mailbox will receive a password to retrieve email from Helloweba, the message content has a URL link, click on the link to reset.php to verify the mailbox.

The code is as follows

Include_once ("connect.php");//Connect 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 = ' the link has expired! '; }else{//Reset Password ... $msg = ' reset password, show resetting password form,<br/> Here is just a demo, skip. '; }}else{$msg = ' invalid link ';}} else{$msg = ' wrong link! '; } Echo $msg;

reset.php first accept the parameter email and token, and then according to the email Query data table T_user whether there is an email, if there is to obtain the user's information, The token value is built just like the token combination in sendmail.php, and then compared to the token passed by the URL, if the current time differs from sending the message for more than 24 hours, the link is expired! ", instead, the link is valid, and turned to the Reset Password page, and finally the user set a new password.

Summary: through the registration of email verification and this article to retrieve the password, we know the application of e-mail in the development of the website and its importance, of course, now also popular SMS verification application, the need for the relevant SMS interface docking on it.

Finally, attach the data sheet T_user structure:

The code is as follows

CREATE TABLE ' T_user ' (' id ' int (one) not NULL auto_increment, ' username ' varchar (in) NOT NULL, ' password ' varchar (+) ' not ' NULL, ' email ' varchar (+) NOT null, ' getpasstime ' int (ten) not NULL, PRIMARY KEY (' id ')) engine=myisam DEFAULT Charset=utf 8;

smtp.class.php class file

The code is as follows

<?phpclass 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 = "", $SMT  P_port = $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 _he Aders = "") {$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 (www.jb51.net): $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->s Trip_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); $this->smtp_sockopen ($rcpt _ To) {$this->log_write ("Error:cannot send e-mail 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", $hel O) {return $this->smtp_error ("Sending HELO command");} Authif ($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 <CR><LF>.<CR><LF> [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-&GT;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); $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-&GT;SMTP_OK ();} function Smtp_ok () {$response = Str_replace ("rn", "" ", Fgets ($this->sock)), $this->smtp_debug ($response." N "), if (!ereg (" ^[23] ", $response)) {fputs ($this->sock," quitrn "), Fgets ($this->sock,); $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-&GT;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. ";";}}}? >

Finally, there is a database connection class, here does not introduce you can find the relevant database of hundreds of databases connected MySQL class OH

Summary: The above is the entire content of this article, I hope to be able to help you learn.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.