Я использую SwiftMailer для отправки писем людям, которые зарегистрированы на моем сайте. Я хочу, чтобы отслеживать открывает & клики, и у меня открывания работают отлично. Сквозные клики почти там …
Когда вы открываете электронную почту, я использую изображение, установленное на 1px на 1px, которое загружает скрипт PHP. Это отслеживает адрес электронной почты человека и записывает, сколько раз он открывал его в моей базе данных MySql. Все ссылки в электронном письме сначала приводят пользователя к сценарию на моем сайте, который использует GET-запросы для чтения своего адреса электронной почты и адреса электронной почты, в котором содержалась ссылка. Этот сценарий затем записывает эту информацию в мою БД.
Проблема в том, что когда вы нажимаете на ссылку в письме, он записывает первый клик просто отлично. И это будет записывать каждый разные пользователь нажимает на ссылку, но он будет записывать каждый клик из одного и того же источника только один раз.
IE: в нижнем колонтитуле каждого электронного письма есть ссылка на понравившуюся компанию в Facebook, и еще одна — в Twitter. Когда вы нажимаете FB, БД обновляется, чтобы сообщить, что вы нажали 1 ссылку. Если вы нажмете на FB снова, он не будет обновляться. Но если вы нажмете на Twitter, он скажет, что вы нажали на 2 ссылки.
Если я загружу скрипт прямо в браузер, он будет правильно отслеживать каждый клик.
РЕДАКТИРОВАТЬ:
Структура URL: https://<my website>.com/emails.php?type=click&email=<id of email>&address=<user email>&url=<link to click on>
PHP:
if($_GET['type'] == 'click') {
$email = $_GET['email'];
$address = $_GET['address'];
$url = $_GET['url'];
// Get Worker Email
$sql = mysqli_query($con, "SELECT * FROM worker_emails WHERE id='$email'");
$row = mysqli_fetch_array($sql);
// Unserialize Array
$array = unserialize($row['clicks']);
// Update Array
$array[''.$address.'']['Clicks'] = $array[''.$address.'']['Clicks'] + 1;
// Serialize Array
$array = serialize($array);
// Update Click Tracking
mysqli_query($con, "UPDATE worker_emails SET clicks='$array' WHERE id='$email'");
// Send User to Link
header("Location: ".$url);
}
Предложения?
Задача ещё не решена.
Других решений пока нет …