我有一个订单成功页面,如果您的订单成功,您将被定向到该页面,并且它还会将您的订单状态更新为成功。为什么我的电子邮件没有发送给用户?
<?php
$url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
if (strpos($url,'order-success') !== false) {
$servername = "REMOVED";
$username = "REMOVED";
$password = "REMOVED";
$dbname = "REMOVED";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check Connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "UPDATE orders SET Status = 'Success' WHERE Status = 'Incomplete' AND Username = '{$_SESSION['Username']}' ORDER BY OrderID DESC LIMIT 1;";
echo $sql;
if ($conn->query($sql) === TRUE) {
$to .= ''. $_SESSION['Username']. '';
$subject = 'Order Confirmation';
$message = '
<html>
<head>
<title>Birthday Reminders for August</title>
</head>
<body>
<p>Here are the birthdays upcoming in August!</p>
<table>
<tr>
<th>Person</th>
<th>Day</th>
<th>Month</th>
<th>Year</th>
</tr>
<tr>
<td>Joe</td>
<td>3rd</td>
<td>August</td>
<td>1970</td>
</tr>
<tr>
<td>Sally</td>
<td>17th</td>
<td>August</td>
<td>1973</td>
</tr>
</table>
</body>
</html>
';
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
mail($to, $subject, $message, $headers);
}
else {
session_destroy();
}
$conn->close();
}
?>
请忽略我发送的消息,这是一个例子,我实际上不打算使用它。我只是想在订单状态设置为成功时收到要发送的电子邮件。
有什么问题?
答案 0 :(得分:1)
首先,mail()函数根据成功返回true或false,检查
其次,检查您的垃圾邮件文件夹中的电子邮件,有numerous ways to approach this problem
答案 1 :(得分:0)
从您的来源,我发现可能存在两个主要问题。
session_start()
检查您是否已在脚本顶部启动了会话,以便您可以访问$_SESSION['Username']
。这是你echo $sql
时看到的内容吗?
更新订单SET状态=&#39;成功&#39;状态=&#39;不完整&#39; AND用户名=&#39;&#39; ORDER BY OrderID DESC LIMIT 1;
您在此行if ($conn->query($sql) === TRUE) {
使用了严格的相等检查。我怀疑$conn->query($sql)
是否会产生布尔值,因此可能永远不会达到该块。请改用:
if($ conn-&gt; query($ sql)== TRUE){
或简单地说:
if($ conn-&gt; query($ sql)){
检查这些,看看问题是否消失!
答案 2 :(得分:0)
Order By是必需的,因为它会获取最高值 OrderID列,因此是该用户的最新列。
Order By
和Limit
不太可能在UPDATE查询中使用。
它用作子查询,与您使用它的方式不同。
相反,您可以使用:
UPDATE orders
SET Status = 'Success'
WHERE Status = 'Incomplete'
AND Username = '{$_SESSION['Username']}'
AND OrderID = ( SELECT MAX(OrderID) FROM orders WHERE Username = '{$_SESSION['Username']}' ) ;
如果您的目标是更新特定用户名的最新记录。
答案 3 :(得分:0)
你有什么收获?运行脚本后它会更新吗? 这样做:
if(mail($to, $subject, $message, $headers)){
redirect to the page
}else{
echo 'Mail Error';
}
此后你的输出是什么?
答案 4 :(得分:0)
mail()函数通常使用在localhost上运行的SMTP服务器发送消息。您是否检查过确定该主机上确实存在SMTP服务器?如果是这样,您可能需要检查SMTP服务器的日志,这些内容可以说明服务器尝试提供消息时发生的消息。