繁体   English   中英

PHP的忘记密码页面

[英]php forgot password page

我从网站上获得了此代码,并且一直在对其进行更改以适合我的需求。 我面临的问题是密码重置页面没有通过php邮件触发新密码,而是刷新页面并且用户停留在php包含文件而不是站点上。

我知道一些PHP,但这似乎超出了我。 经过12个多小时的尝试不同的事情,我正在寻求帮助:)

我希望它可以轻松解决。 在此先感谢您的帮助和代码段。

<?php 
include 'dbc.php';
/******************* ACTIVATION BY FORM**************************/
if ($_POST['doReset']=='Reset')
{
$err = array();
$msg = array();

foreach($_POST as $key => $value) {
    $data[$key] = filter($value);
}
if(!isEmail($data['user_email'])) {
$err[] = "ERROR - Please enter a valid email"; 
    header("Location: index.html?p=unknownuser");
}

$user_email = $data['user_email'];

//check if activ code and user is valid as precaution
$rs_check = mysql_query("select id from users where user_email='$user_email'") or die (mysql_error()); 
$num = mysql_num_rows($rs_check);
  // Match row found with more than 1 results  - the user is authenticated. 
    if ( $num <= 0 ) { 
    $err[] = "Error - Sorry no such account exists or registered.";
    header("Location: index.html?p=unknownuser");
    //exit();
    }


if(empty($err)) {

$new_pwd = GenPwd();
$pwd_reset = PwdHash($new_pwd);
//$sha1_new = sha1($new);   
//set update sha1 of new password + salt
$rs_activ = mysql_query("update users set pwd='$pwd_reset' WHERE 
                         user_email='$user_email'") or die(mysql_error());

$host  = $_SERVER['HTTP_HOST'];
$host_upper = strtoupper($host);                         

//send email

$message = 
"Here are your new password details ...\n
User Email: $user_email \n
Passwd: $new_pwd \n

Thank You

Administrator
$host_upper
______________________________________________________
THIS IS AN AUTOMATED RESPONSE. 
***DO NOT RESPOND TO THIS EMAIL****
";

    mail($user_email, "Reset Password", $message,
    "From: \"Client Password Reset\" <clientservices@example.com>\r\n" .
     "X-Mailer: PHP/" . phpversion());

  header("Location: index.html?p=newpassword");  
  exit();

     } 
 }  


/*
    mail($user_email, "Reset Password", $message,
    "From: \"Client Registration\" <clientservices@example.com>\r\n" .
     "X-Mailer: PHP/" . phpversion());                       

$msg[] = "Your account password has been reset and a new password has been sent to your email address.";                        
//header("Location: index.html?p=newpassword");                      
//$msg = urlencode();
//header("Location: forgot.php?msg=$msg");                       
//exit();
 }
}
 */
?>
<script language="JavaScript" type="text/javascript" src="jquery/jquery-1.6.4.min.js"></script>
<script language="JavaScript" type="text/javascript" src="jquery/jquery.validate.js"></script>
  <script>
  $(document).ready(function(){
    $("#actForm").validate();
  });
  </script>
        <?php
      /******************** ERROR MESSAGES*************************************************
      This code is to show error messages 
      **************************************************************************/
    if(!empty($err))  {
       echo "<div class=\"msg\">";
      foreach ($err as $e) {
        echo "* $e <br>";
        }
      echo "</div>";    
       }
       if(!empty($msg))  {
        echo "<div class=\"msg\">" . $msg[0] . "</div>";

       }
      /******************************* END ********************************/      
      ?><div id="clientLogin">You are about to request a reset of your client account password | <a href="?p=login" class="clientLogin">Login</a><br>
      <form action="forgot.php" method="post" name="actForm" id="actForm" style="margin-top:5px;">
       Your Email <input name="user_email" type="text" class="required email" id="txtboxn" size="25"><input name="doReset" type="submit" id="doLogin3" value="Submit" class="button"></form></div>

你有:

mail($usr_email, "Reset Password", $message...);

看起来应该有

mail($user_email, "Reset Password", $message...);

注意,您使用$usr_email而不是$user_email

这就是为什么没有发送电子邮件的原因。 然后,似乎用户已重定向到index.html?p=newpassword因此,取决于该页面是什么,它似乎只是在重新加载同一页面。

更新:

此外,你必须元素doReset ,值为Submit ,并在你的PHP代码,你正在检查看到, $_POST['doReset'] == Reset ,而不是Submit

<input name="doReset" type="submit" id="doLogin3" value="Submit" class="button">

if ($_POST['doReset']=='Reset')更改为if ($_POST['doReset']=='Submit')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM