Php 帐户恢复页面没有响应

Php 帐户恢复页面没有响应,php,html,mysql,forms,function,Php,Html,Mysql,Forms,Function,在此页面上,用户将输入他们的电子邮件,然后代码将首先检查数据库中是否存在该电子邮件。如果电子邮件存在,代码应生成新密码并将其发送到用户的电子邮件。此外,数据库表:passwordreset应插入用户密码重置操作的记录,并更新用户的帐户信息,以便他们可以使用新密码登录。当我输入有效的电子邮件帐户进行检查时,表单会提交,但用户的信息表或密码重置表不会更新。我不确定问题出在哪里。稍有洞察就会有所帮助 HTML: 答复: 我不知道问题出在哪里,但我决定尝试另一种方式,使用ajax代码进行提交,并更改了几

在此页面上,用户将输入他们的电子邮件,然后代码将首先检查数据库中是否存在该电子邮件。如果电子邮件存在,代码应生成新密码并将其发送到用户的电子邮件。此外,数据库表:passwordreset应插入用户密码重置操作的记录,并更新用户的帐户信息,以便他们可以使用新密码登录。当我输入有效的电子邮件帐户进行检查时,表单会提交,但用户的信息表或密码重置表不会更新。我不确定问题出在哪里。稍有洞察就会有所帮助

HTML:

答复: 我不知道问题出在哪里,但我决定尝试另一种方式,使用ajax代码进行提交,并更改了几行。现在,我的代码可以工作,用户可以在经过必要的验证后收到电子邮件,即电子邮件是否有效?。以下是最终代码:

forgotpassword.php:

<?php 
use PHPMailer\PHPMailer\PHPMailer;
include('functions.php');

if(isset($_POST['email'])){

  $con = new mysqli('localhost','root','','pd.com');

  $email = $con->real_escape_string($_POST['email']);

  //check if email entered is in DB
  $sql = $con->query("SELECT email FROM usr_t WHERE email='$email'"); 

  if ($sql->num_rows > 0) {

    $newPassword = generateRandomString();
    $newPasswordHash = password_hash($newPassword, PASSWORD_BCRYPT);

    require_once "PHPMailer/PHPMailer.php";
    require_once "PHPMailer/Exception.php";

    $mail = new PHPMailer();
    $mail->addAddress($email);
    $mail->setFrom("support@pd.com", "PD");
    $mail->Subject = "Account Password Recovery";
    $mail->isHTML(true);
    $mail->Body = "
        Greetings,<br><br>

        We are pleased to inform you that your password recovery is successful.<br><br>

        Your new password is: ".$newPassword."<br><br>If you didnt not request a recovery of your account password, please go to your account and change your password immediately. Thank you!<br><br>

        Kind Regards,<br><br>
        Support.";

    if ($mail->send()) {

      //insert record into account password reset table
       $sql = "INSERT INTO `passwordreset` (`id`, `user`, `time_reset`) VALUES (NULL, '$email', current_timestamp())";
       $con->query($sql);     

      //update user table with new hashed password
      $con->query("UPDATE usr_t SET password = '$newPasswordHash' WHERE email = '$email'");

      exit(json_encode(array("status" => 1, "msg" => 'Please check your email inbox!')));

    } else {
      exit(json_encode(array("status" => 0, "msg" => 'Something went wrong!')));
    }

  } else {
    exit(json_encode(array("status" => 0, "msg" => 'Sorry! Email not found!')));
  }
}
?> 
HTML页面:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>User Account Password Reset</title>
      <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
</head>
<body>

<!-- Reset Password Form -->
<div class="container" style="margin-top: 100px;">
  <div class="row justify-content-center">
    <div class="col-md-6 col-md-offset-3" align="center">

      <div class="border border-primary" style="padding: 80px;">
        <h2>Reset Password</h2><br>
          <label>Enter your email address: </label>
          <input class="form-control" id="email" placeholder="Your Email Address..."><br>
          <input type="button" class="btn btn-primary form-control"  value="Reset Password">
          <br><br>
          <p id="response"></p>
        </div> 

    </div>    
  </div>  
</div>
<script
        src="http://code.jquery.com/jquery-3.3.1.min.js"
        integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
        crossorigin="anonymous"></script>
        <script type="text/javascript">
          var email = $("#email");

          $(document).ready(function () {
            $('.btn-primary').on('click', function () {
              if (email.val() != "") {
                email.css('border', '1px solid green');

                $.ajax({
                  url: 'forgotpassword.php',
                  method: 'POST',
                  dataType: 'json',
                  data: {
                    email: email.val()
                  }, success: function (response) {
                    if (!response.success)
                      $("#response").html(response.msg).css('color', "green");
                    else
                      $("#response").html(response.msg).css('color', "red");

                  }
                });

              } else {
                email.css('border', '1px solid red');
              }

            });

          });
        </script>
</body>
</html>

insert语句中的字段ID不能为空。我首先要验证passwordreset中的id字段是否设置为autoincrement。如果是,则应将id字段保留在查询之外,使其变为以下内容:

  $sql = "INSERT INTO passwordreset(user, time_reset) VALUES ('$email', '$time')";

该死我可能忽略了这一点。谢谢代码现在是正确的但是仍然没有发生任何事情
<?php 
use PHPMailer\PHPMailer\PHPMailer;
include('functions.php');

if(isset($_POST['email'])){

  $con = new mysqli('localhost','root','','pd.com');

  $email = $con->real_escape_string($_POST['email']);

  //check if email entered is in DB
  $sql = $con->query("SELECT email FROM usr_t WHERE email='$email'"); 

  if ($sql->num_rows > 0) {

    $newPassword = generateRandomString();
    $newPasswordHash = password_hash($newPassword, PASSWORD_BCRYPT);

    require_once "PHPMailer/PHPMailer.php";
    require_once "PHPMailer/Exception.php";

    $mail = new PHPMailer();
    $mail->addAddress($email);
    $mail->setFrom("support@pd.com", "PD");
    $mail->Subject = "Account Password Recovery";
    $mail->isHTML(true);
    $mail->Body = "
        Greetings,<br><br>

        We are pleased to inform you that your password recovery is successful.<br><br>

        Your new password is: ".$newPassword."<br><br>If you didnt not request a recovery of your account password, please go to your account and change your password immediately. Thank you!<br><br>

        Kind Regards,<br><br>
        Support.";

    if ($mail->send()) {

      //insert record into account password reset table
       $sql = "INSERT INTO `passwordreset` (`id`, `user`, `time_reset`) VALUES (NULL, '$email', current_timestamp())";
       $con->query($sql);     

      //update user table with new hashed password
      $con->query("UPDATE usr_t SET password = '$newPasswordHash' WHERE email = '$email'");

      exit(json_encode(array("status" => 1, "msg" => 'Please check your email inbox!')));

    } else {
      exit(json_encode(array("status" => 0, "msg" => 'Something went wrong!')));
    }

  } else {
    exit(json_encode(array("status" => 0, "msg" => 'Sorry! Email not found!')));
  }
}
?> 
<!DOCTYPE html>
<html lang="en">
<head>
  <title>User Account Password Reset</title>
      <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
</head>
<body>

<!-- Reset Password Form -->
<div class="container" style="margin-top: 100px;">
  <div class="row justify-content-center">
    <div class="col-md-6 col-md-offset-3" align="center">

      <div class="border border-primary" style="padding: 80px;">
        <h2>Reset Password</h2><br>
          <label>Enter your email address: </label>
          <input class="form-control" id="email" placeholder="Your Email Address..."><br>
          <input type="button" class="btn btn-primary form-control"  value="Reset Password">
          <br><br>
          <p id="response"></p>
        </div> 

    </div>    
  </div>  
</div>
<script
        src="http://code.jquery.com/jquery-3.3.1.min.js"
        integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
        crossorigin="anonymous"></script>
        <script type="text/javascript">
          var email = $("#email");

          $(document).ready(function () {
            $('.btn-primary').on('click', function () {
              if (email.val() != "") {
                email.css('border', '1px solid green');

                $.ajax({
                  url: 'forgotpassword.php',
                  method: 'POST',
                  dataType: 'json',
                  data: {
                    email: email.val()
                  }, success: function (response) {
                    if (!response.success)
                      $("#response").html(response.msg).css('color', "green");
                    else
                      $("#response").html(response.msg).css('color', "red");

                  }
                });

              } else {
                email.css('border', '1px solid red');
              }

            });

          });
        </script>
</body>
</html>
  $sql = "INSERT INTO passwordreset(user, time_reset) VALUES ('$email', '$time')";