php забыл пароль страницы - PullRequest
0 голосов
/ 02 октября 2011

Я получил этот код с веб-сайта и изменял его в соответствии со своими потребностями.Проблема, с которой я сталкиваюсь, состоит в том, что страница сброса пароля не запускает новый пароль по почте 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>

1 Ответ

3 голосов
/ 02 октября 2011

У вас есть:

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

Когда это выглядит так, как будто у вас должно быть

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

Обратите внимание, что вы использовали $usr_email вместо $user_email.

Именно поэтому электронное письмо не отправляется. Затем создается впечатление, что пользователь перенаправлен на index.html?p=newpassword, поэтому в зависимости от того, что это за страница, может показаться, что она просто перезагружает ту же страницу.

UPDATE:

Кроме того, у вас есть элемент 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')

...