尝试使用php和javascript重置密码

时间:2018-02-25 11:10:41

标签: javascript php jquery

我正在尝试使用PHP和JS创建忘记密码网页。虽然当我尝试添加电子邮件地址,并单击“重置密码”时没有任何反应,并且控制台中没有错误。我想要的是显示文本,以便用户知道他们的密码是否已被重置。但没有任何反应,我不确定问题是什么。如果有人有任何想法,请告诉我。谢谢

<?php
use PHPMailer\PHPMailer\PHPMailer;
require_once "functions.php";

if (isset($_POST['email'])) {
  require_once('config1.php');

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


    $sql = "SELECT user_id FROM zz_login WHERE email='$email'";
    $result = mysqli_query($conn, $sql, MYSQLI_USE_RESULT);
    if (mysqli_num_rows($result) > 0) {
        $token = generateNewString();

        $sql = "UPDATE zz_login SET token='$token',
                            tokenExpire=DATE_ADD(NOW(), INTERVAL 5 MINUTE)
                            WHERE email='$email' ";
        $result = mysqli_query($conn, $sql, MYSQLI_USE_RESULT);

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

        $mail = new PHPMailer();
        $mail->addAddress($email);
        $mail->setFrom("", "");
        $mail->Subject = "Reset Password";
        $mail->isHTML(true);
        $mail->Body = "
            Hi,<br><br>

            In order to reset your password, please click on the link below:<br>
            <a href='
            URL/resetPassword.php?email=$email&token=$token
            '>URL/resetPassword.php?email=$email&token=$token</a><br><br>

            Kind Regards,<br>
            Trip Guider
        ";

        if ($mail->send())
            exit(json_encode(array("status" => 1, "msg" => 'Please Check Your Email Inbox!')));
        else
            exit(json_encode(array("status" => 0, "msg" => 'Something Wrong Just Happened! Please try again!')));
    } else
        exit(json_encode(array("status" => 0, "msg" => 'Please Check Your Inputs!')));
}
?>

Javascript

alert(response);
response= $.parseJSON(response);
if (!response.status)

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', "red");
                        else
                            $("#response").html(response.msg).css('color', "green");
                    }
                });
            } else
                email.css('border', '1px solid red');
        });
    });

2 个答案:

答案 0 :(得分:0)

您必须使用以下行解析jQuery中的json输出:

response= $.parseJSON(response);
  if (!response.status)

然后,您可以根据PHP中的status d变量检查json_encode变量值,即它是1还是0。还要确保$mail->send()实际成功发送电子邮件。根据服务器(本地主机或在线)设置,它可能并不总是有效。

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) {
                       response= $.parseJSON(response);
                        if (!response.status)
                          $("#response").html(response.msg).css('color', "red");
                        else
                            $("#response").html(response.msg).css('color', "green");
                    }
                });
            } else
                email.css('border', '1px solid red');
        });
    });

修改 尝试使用SMTP发送电子邮件。 粘贴here

$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
$mail->Host = "smtp.gmail.com";
$mail->Port = 465; // or 587
$mail->IsHTML(true);
$mail->Username = "email@gmail.com";
$mail->Password = "password";
$mail->SetFrom("example@gmail.com");
$mail->Subject = "Test";
$mail->Body = "hello";
$mail->AddAddress("email@gmail.com");

 if(!$mail->Send()) {

  // do your stuff
 } else {
    // do your stuff
 }

上面的例子使用了gmail的smtp。如果您使用任何其他邮寄服务发送电子邮件,请相应更改$mail->Host$mail->Port的值

答案 1 :(得分:0)

使用以下工具调试正在发生的事情应该非常容易:

  • 开发人员工具中的Firefox调试器选项卡
  • 开发人员工具中的Firefox网络标签,
  • xdebug for php

使用开发人员工具Firefox网络标签,您应该能够查看子选项卡&#39; xhr&#39;并查看所有传出的请求。您可以看到出站数据和服务器的响应。

使用调试器,您可以单步执行JavaScript并检查逻辑是否正常。

使用xdebug for php,您可以在请求到达服务器时逐步执行您的php代码,并确保逻辑良好。

请使用您的开发人员工具!