我在PHP上需要一些帮助,因为我对代码有问题。当我收到电子邮件时,当我打开电子邮件时,它将更新数据库中的值,因为它将像两次更新。示例:当我打开电子邮件时,它应该像1一样更新值,但它将更新2个值而不是1。
。这是open_mail.php:
<?php
header("Content-Type: image/jpeg");
readfile("image.jpeg");
//Connect to the database
include('config.php');
$id = $_GET['id'];
$tracking_sql = mysqli_fetch_assoc(mysqli_query($link, "SELECT username, subject, campaign, newsletter_type, opened FROM tracking2 WHERE id = '$id'"));
$param_username = $tracking_sql['username'];
$subject = $tracking_sql['subject'];
$campaign = $tracking_sql['campaign'];
$newsletter_type = $tracking_sql['newsletter_type'];
$opened = $tracking_sql['opened'];
$date = date('Y-m-d H:i:s');
if ($opened == 1)
{
if ($open_again == '')
{
mysqli_query($link, "UPDATE tracking2 SET opened = 2, datetime = '$date' WHERE id = '$id'");
$open_again = 'opened';
}
}
else if ($opened == 0)
{
if ($open_again == '')
{
mysqli_query($link, "UPDATE tracking2 SET opened = 1, datetime = '$date' WHERE id = '$id'");
$open_again = 'opened';
}
}
echo "<img src='http://example.com/Images/track.jpeg'>";
//close the connection
mysqli_close($link);
?>
我发现的问题与这一行有关:
else if ($opened == 1)
我添加了$open_again = 'opened'
,以查看它是否有助于阻止它,但没有帮助。我也尝试过,但没有区别。
$tracking_sql = mysqli_fetch_assoc(mysqli_query($link, "SELECT username, subject, campaign, newsletter_type, opened FROM tracking2 WHERE id = '$id' LIMIT 1"));
我无法解决该问题,因为它在我第一次收到电子邮件后保持了两次更新。当我使用$ ID变量来搜索数据库中的ID时,我没有使用循环或其他任何内容,以在与ID的同一行中更新它,因为它应该仅更新一次。我认为问题是与open_mail.php。
有关这是电子邮件底部显示的内容:
<img src=3D"http://example.com/open_mail.php?id=3D2602 " style=3D"width: 0;
max-height:0; overflow:hidden; ">
我要实现的是,当我第一次收到电子邮件并打开电子邮件时,我想在跟踪表中搜索ID并将其更新为1,因此当我再次打开电子邮件时,它将更新值到2,然后3、4、5 ...等
您能告诉我一个示例,当我第一次收到我打开的电子邮件时,我可以使用两次更新的最佳方法是什么?
更新语句可以引用自己的列,例如:
UPDATE tracking2 SET opened = opened + 1 ...
所以在上下文中:
<?php
header("Content-Type: image/jpeg");
readfile("image.jpeg");
//Connect to the database
include('config.php');
$id = $_GET['id'];
$stmt = $link->prepare('UPDATE tracking2 SET opened = opened + 1, datetime=NOW() WHERE id = ?');
$stmt->bind_param('s', $id);
$stmt->execute();
//close the connection
mysqli_close($link);