我正在尝试使用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');
});
});
答案 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网络标签,您应该能够查看子选项卡&#39; xhr&#39;并查看所有传出的请求。您可以看到出站数据和服务器的响应。
使用调试器,您可以单步执行JavaScript并检查逻辑是否正常。
使用xdebug for php,您可以在请求到达服务器时逐步执行您的php代码,并确保逻辑良好。
请使用您的开发人员工具!