【发布时间】:2014-04-20 10:18:04
【问题描述】:
好的,我猜这很简单,或者我正在使用我不知道的已弃用的东西。
我将从我的代码中删除多余的部分,但删除的所有内容都已经过测试。
原始代码基于我在各处看到的非常常见的教程脚本。它正在排队:
while ($row = $res->fetch_array()) {
并且 php 因一个共同点而失败:在非对象上调用成员函数 fetch_array()。
通常这会向我表明我的 SQL 失败或返回了不需要的东西,我会进行一个小修复,然后继续我的生活。然而,情况似乎并非如此。我一遍又一遍地重复那个 SQL,它正在返回我想要的。
我认为这可能与在 else 中调用 while 循环有关(但这应该不是问题)或者邮件调用在 while 循环中。
原代码:
$email = $link->real_escape_string($_POST["web_forgot_email"]);
$sendemail = 0;
$sql = "SQL to return Name and Email (Tested extensively and works)";
$res = $link->query($sql);
if ($res->num_rows == 0) {
$arr = array("web_forgot_success" => "web no account");
echo json_encode($arr);
} else {
while ($row = $res->fetch_array()) {
$sendemail = $row['CLIENT_EMAIL'];
$name = $row['NAME'];
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "localhost";
$mail->SMTPAuth = true;
$mail->Username = "quizzically@quizzically.co.uk";
$mail->Password = "quizzically01";
$mail->From = "quizzically@quizzically.co.uk";
$mail->FromName = "quizzically";
$mail->AddAddress($sendemail);
$mail->WordWrap = 50;
$mail->IsHTML(true);
$mail->Subject = "quizzically password reset confirmation";
$mailer = "Email Message";
$mail->Body = $mailer;
if(!$mail->Send()) {
$arr = array("web_forgot_success" => "web no send");
echo json_encode($arr);
} else {
$arr = array("web_forgot_success" => "web forgot success");
echo json_encode($arr);
}
}
}
所以我重新调整了代码,使其首先找到变量 $sendemail 和 $name,然后发送一封电子邮件,但每次(即使 $sendemail 变量不是 0)它都会跳过该 if 语句并返回 else。我已经通过在 else 变量中将 $sendemail 变量发送回我自己来测试它,它绝对不是 0。
好消息是 PHP 没有失败,坏消息是某些东西导致代码跳过了处理发送电子邮件的整个 if 部分。
修改代码:
$email = $link->real_escape_string($_POST["web_forgot_email"]);
$sendemail = 0;
$sql = "SQL to return Name and Email (Tested extensively and works)";
$res = $link->query($sql);
if ($res->num_rows == 0) {
$arr = array("web_forgot_success" => "web no account");
echo json_encode($arr);
}
while ($row = $res->fetch_array()) {
$sendemail = $row['CLIENT_EMAIL'];
$name = $row['NAME'];
}
if ($sendemail != 0) {
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "localhost";
$mail->SMTPAuth = true;
$mail->Username = "quizzically@quizzically.co.uk";
$mail->Password = "quizzically01";
$mail->From = "quizzically@quizzically.co.uk";
$mail->FromName = "quizzically";
$mail->AddAddress($sendemail);
$mail->WordWrap = 50;
$mail->IsHTML(true);
$mail->Subject = "quizzically password reset confirmation";
$mailer = "Email Message";
$mail->Body = $mailer;
if(!$mail->Send()) {
$arr = array("web_forgot_success" => "web no send");
echo json_encode($arr);
} else {
$arr = array("web_forgot_success" => "web forgot success");
echo json_encode($arr);
}
} else {
$arr = array("web_forgot_success" => "web forgot failed");
echo json_encode($arr);
}
我希望我正在做一些我还没有找到或没有的已弃用的东西,但我们将不胜感激。
【问题讨论】: