Heim > Backend-Entwicklung > PHP-Tutorial > Einfache PHP-Methode zur Implementierung der Funktion zum Abrufen von Mitgliederkennwörtern

Einfache PHP-Methode zur Implementierung der Funktion zum Abrufen von Mitgliederkennwörtern

墨辰丷
Freigeben: 2023-03-29 07:06:02
Original
3702 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich die einfache Implementierung der Funktion zum Abrufen von Passwörtern in PHP vorgestellt. Ich hoffe, dass er für alle hilfreich ist.

Einstellungsideen

1. Der Zweck besteht darin, diese E-Mail-Adresse zum Abrufen des Passworts zu verwenden .

2. Wenn der Benutzer sein Passwort oder seinen Benutzernamen vergisst, klicken Sie auf der Anmeldeseite auf den Hyperlink „Passwort abrufen“, öffnen Sie das Formular, geben Sie die für die Registrierung verwendete E-Mail-Adresse ein und senden Sie es ab.

3. Das System findet die Benutzerinformationen aus der Datenbank über das Postfach und aktualisiert das Passwort des Benutzers in ein temporäres Passwort (zum Beispiel: 12345678).

4. Das System verwendet die Jmail-Funktion, um die Informationen des Benutzers an die Mailbox des Benutzers zu senden (der Inhalt umfasst: Benutzername, temporäres Passwort und eine Aufforderung, den Benutzer daran zu erinnern, das temporäre Passwort rechtzeitig zu ändern).

5. Benutzer können sich mit einem temporären Passwort anmelden.

HTML

Wir platzieren eine Seite auf der Seite zum Abrufen des Passworts, auf der der Benutzer die für die Registrierung verwendete E-Mail-Adresse eingeben und dann absenden muss die Front-End-JS für die Verarbeitung von Interaktionen.

Der Code lautet wie folgt

<p><strong>输入您注册的电子邮箱,找回密码:</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="提 交"></p>
Nach dem Login kopieren

jQuery

Nachdem der Benutzer die E-Mail-Adresse eingegeben und auf „Senden“ geklickt hat, überprüft jQuery zunächst, ob das E-Mail-Format korrekt ist, und sendet eine Ajax-Anfrage an den Hintergrund. sendmail.php ist für die Überprüfung verantwortlich Überprüfen Sie, ob die E-Mail-Adresse vorhanden ist, senden Sie die E-Mail und geben Sie die entsprechenden Informationen zurück. Um die Ergebnisse auf der Startseite zu verarbeiten, sehen Sie sich bitte den jQuery-Code an:

Der Code lautet wie folgt

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

Der oben verwendete jQuery-Code ist sehr praktisch. Wenn Sie über eine bestimmte jQuery-Grundlage verfügen, ist der obige Code klar Blick und bedarf keiner Erklärung.

Vergessen Sie natürlich nicht, die jQuery-Bibliotheksdatei auf die Seite zu laden. Einige Studenten fragen mich oft, warum sie die aus dem Internet heruntergeladene Demo nicht verwenden können, weil sie geladen wird Der Pfad von jquery oder anderen Dateien ist falsch, daher ist es nicht erforderlich, die Datei zu laden.

PHP

sendmail.php muss überprüfen, ob die E-Mail in der Systembenutzertabelle vorhanden ist. Wenn ja, lesen Sie die Benutzerinformationen und fügen Sie sie hinzu Die Benutzer-ID, der Benutzername und das Passwort werden durch die MD5-Verschlüsselung aktiviert, um eine spezielle Zeichenfolge als Bestätigungscode zum Abrufen des Passworts zu generieren und dann die URL zu erstellen. Um die Aktualität des URL-Links zu kontrollieren, zeichnen wir gleichzeitig die Vorgangszeit auf, wenn der Benutzer die Aktion zum Abrufen des Passworts sendet, und rufen schließlich die E-Mail-Sendeklasse auf, um die E-Mail an das Postfach des Benutzers zu senden Die Klasse smtp.class.php wurde gepackt, bitte laden Sie sie herunter.

Der Code lautet wie folgt

include_once("connect.php");//连接数据库 

$email = stripslashes(trim($_POST[&#39;mail&#39;])); 

$sql = "select id,username,password from `t_user` where `email`=&#39;$email&#39;"; 
$query = mysql_query($sql); 
$num = mysql_num_rows($query); 
if($num==0){//该邮箱尚未注册! 
echo &#39;noreg&#39;; 
exit; 
}else{ 
$row = mysql_fetch_array($query); 
$getpasstime = time(); 
$uid = $row[&#39;id&#39;]; 
$token = md5($uid.$row[&#39;username&#39;].$row[&#39;password&#39;]);//组合验证码 
$url = "/demo/resetpass/reset.php?email=".$email." 
&token=".$token;//构造URL 
$time = date(&#39;Y-m-d H:i&#39;); 
$result = sendmail($time,$email,$url); 
if($result==1){//邮件发送成功 
$msg = &#39;系统已向您的邮箱发送了一封邮件<br/>请登录到您的邮箱及时重置您的密码!&#39;; 
//更新数据发送时间 
mysql_query("update `t_user` set `getpasstime`=&#39;$getpasstime&#39; where id=&#39;$uid &#39;"); 
}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.jb51.net - 找回密码"; 
$emailbody = "亲爱的".$email.":<br/>您在".$time."提交了找回密码请求。请点击下面的链接重置密码 
(按钮24小时内有效)。<br/><a href=&#39;".$url."&#39;target=&#39;_blank&#39;>".$url."</a>"; 
$rs = $smtp->sendmail($smtpemailto, $smtpemailfrom, $emailsubject, $emailbody, $emailtype); 

return $rs; 
}
Nach dem Login kopieren

Okay, zu diesem Zeitpunkt erhalten Sie eine E-Mail von helloweba Da ist einen URL-Link in der E-Mail zum Abrufen des Passworts. Klicken Sie auf den Link zu „reset.php“, um die E-Mail zu bestätigen.

Der Code lautet wie folgt

include_once("connect.php");//连接数据库 

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

$query = mysql_query($sql); 
$row = mysql_fetch_array($query); 
if($row){ 
$mt = md5($row[&#39;id&#39;].$row[&#39;username&#39;].$row[&#39;password&#39;]); 
if($mt==$token){ 
if(time()-$row[&#39;getpasstime&#39;]>24*60*60){ 
$msg = &#39;该链接已过期!&#39;; 
}else{ 
//重置密码... 
$msg = &#39;请重新设置密码,显示重置密码表单,<br/>这里只是演示,略过。&#39;; 
} 
}else{ 
$msg = &#39;无效的链接&#39;; 
} 
}else{ 
$msg = &#39;错误的链接!&#39;; 
} 
echo $msg;
Nach dem Login kopieren

reset.php akzeptiert zunächst die Parameter E-Mail und Token und fragt dann ab Die Datentabelle t_user basiert auf der E-Mail. Ob die E-Mail in der E-Mail vorhanden ist, falls vorhanden, die Informationen des Benutzers abrufen, den Token-Wert auf die gleiche Weise wie die Token-Kombination in sendmail.php erstellen und ihn dann mit dem Token vergleichen von der URL übergeben, wenn die aktuelle Zeit von der Zeit abweicht, zu der die E-Mail gesendet wurde. Wenn sie 24 Stunden überschreitet, wird die Meldung „Der Link ist abgelaufen!“ angezeigt. Andernfalls bedeutet dies, dass der Link gültig ist und zu weitergeleitet wird Auf der Seite zum Zurücksetzen des Passworts legt der Benutzer schließlich ein neues Passwort fest.

Zusammenfassung: Passwort über registrierte E-Mail-Verifizierung und E-Mail abrufen in diesem Artikel Wir kennen die Anwendung des E-Mail-Versands bei der Website-Entwicklung und wissen natürlich, wie wichtig es ist Beliebt sind auch SMS-Verifizierungsanwendungen, die lediglich an die entsprechende SMS-Schnittstelle angeschlossen werden müssen.

Zuletzt fügen Sie die Datentabelle t_user-Struktur hinzu:

Der Code lautet wie folgt

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;
Nach dem Login kopieren

smtp.class.php-Klassendatei

Der Code lautet wie folgt

<?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(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->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 <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->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 . "
;";
}
}
}
?>
Nach dem Login kopieren

Es gibt eine Datenbankverbindungsklasse Am Ende, das hier nicht vorgestellt wird, finden Sie verwandte Datenbankverbindungs-MySQL-Kurse auf dieser Website

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.

Verwandte Empfehlungen:

phpEinfache Implementierung der Socket-Kommunikation

phpAusführliche Erläuterung von zwei Methoden zum nativen Exportieren von Excel-Dateien

phpImplementierung der zeitlichen Sortierung zweidimensionaler Arrays

Das obige ist der detaillierte Inhalt vonEinfache PHP-Methode zur Implementierung der Funktion zum Abrufen von Mitgliederkennwörtern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage