我的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 ...等
能否请您举个例子,什么是最好的方式,当我第一次收到这样打开的电子邮件后,可以使用两次阻止更新的最佳方法是什么?
答案 0 :(得分:3)
更新语句可以引用自己的列,例如:
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);