открыть отслеживание электронной почты без обновления дважды - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужна помощь с моим 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 для поиска идентификатора в базе данных, чтобы обновить его в той же строке, что и идентификатор, так как он должен обновлять его только один раз.Я считаю, что проблема в том, что что-то связано с open_mail.php.

Вот что показано в нижней части письма:

<img src=3D"http://example.com/open_mail.php?id=3D2602 " style=3D"width: 0; 
max-height:0; overflow:hidden; ">

То, чего я хочу достичь, - это когда я впервыеПолучив письмо, и я открываю его, я хочу найти идентификатор в таблице отслеживания и обновить его до 1, поэтому, когда я снова открою письмо, оно обновит значение до 2, а затем 3, 4, 5 ...и т. д.

Не могли бы вы показать мне пример того, как лучше всего использовать блокировку обновления, как дважды после первого получения электронного письма, которое я открываю, так?

1 Ответ

0 голосов
/ 22 февраля 2019

Операторы обновления могут ссылаться на свой собственный столбец, например:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...