打开电子邮件跟踪,无需更新两次

时间:2019-02-21 21:50:08

标签: php mysql email

我的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 ...等

能否请您举个例子,什么是最好的方式,当我第一次收到这样打开的电子邮件后,可以使用两次阻止更新的最佳方法是什么?

1 个答案:

答案 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);