密码恢复不发送电子邮件。但它总是说发送了电子邮件。请帮帮我。
<?php
session_start();
include_once 'dbconnect.php';
if (isset($_POST['submit'])) {
$email = $_POST['email'];
$query = mysql_query("SELECT * FROM users WHERE email='" . $email . "' ") or die(mysql_error());
$run = mysql_affected_rows();
$password = substr(hash('sha512', uniqid(rand(), 1)), 3, 10);
$pass = hash('sha512', $password);
if ($run != 0) {
$res = mysql_fetch_array($query);
$to = "$email";
$subject = "Obnovení hesla";
$body = "Dobrý den $res->username, vaše nové heslo je $password";
$additionalheader = "From: <admin@chat-web.com>";
mail($to, $subject, $body, $additionalheader);
if ($email) {
echo"<script>alert('Email byl úspěšně odeslán.')</script>";
} else {
echo"<script>alert('Emailová adresa $email neexistuje.')</script>";
}
}
$sql = mysql_query("UPDATE users SET password='$pass' WHERE email = '$email'")or die(mysql_error());
}
?>
答案 0 :(得分:0)
邮件功能是否在您的服务器上运行?
同时检查您的垃圾邮件文件夹。
正如Jon Stirling所说,替换
$ run = mysql_affected_rows();
wtih
$ run = mysql_num_rows($ query);
答案 1 :(得分:0)
您使用了错误的函数来检查是否有任何返回的行。
mysql_affected_rows()返回受INSERT / UPDATE / DELETE
影响的行数。
mysql_num_rows()将返回查询返回的行数,这是您实际想要检查的内容。
答案 2 :(得分:0)
要正确检查回复,请尝试以下代码:
if(mail($to, $subject, $body, $additionalheader)) {
echo "mail sent";
}
else {
echo "mail not sent";
}
您还可以打印$ res的响应以了解确切的错误。 另外,请阅读以下帖子。 How to test if PHP mail() has successfully delivered mail