Здравствуйте!
Реализую подсчет уникальных кликов по ссылке.
Вид ссылки:
http://test.loc/product/3/ticket=4thd45fsvnfg7
PHP:
if(isset($_GET['ticket'])){
$ticket = mysqli_escape_string($connection, strip_tags(htmlspecialchars(trim($_GET['ticket']))));
if(!isset($_SESSION['ticket'])){
count_ticket();
}
$_SESSION['ticket'] = $ticket;
}
Функция count_ticket:
function count_ticket(){
global $connection;
$query = "SELECT `count` FROM `ds_customers_ticket` WHERE `ticket` = '{$_SESSION['ticket']}'";
$res = mysqli_query($connection, $query) or die(mysqli_error());
if(mysqli_num_rows($res) > 0){
$query = ("UPDATE `ds_customers_ticket` SET `count` = `count` + 1 WHERE `ticket` = '{$_SESSION['ticket']}'");
$res = mysqli_query($connection, $query) or die(mysqli_error());
}
}
Если существует $_GET['ticket']
создается сессия, но перед ее созданием я вызываю функцию count_ticket()
. По умолчанию в базе данных значение количества переходов по ссылке = 0.
Необходимо подсчитывать уникальные переходы, т.е., если сессия существует уже, засчитывать переход по ссылке не нужно (это в случае, если пользователь будет нажимать F5). У меня, к сожалению, не засчитывает кол-во перехода, если пользователь открыл страницу первый раз и последующие его обновления страницы. Помогите, пожалуйста.
С условием:
if(isset($_SESSION['ticket'])){
count_ticket();
}
Отлично все считает, но засчитывает каждое обновление страницы.
а) использовать distinct
при выборке из БД
б) делать выборку по тикету и анализировать последнее время записи (или просто игнорировать при наличии в БД такого тикета)
Вот, что нужно было поправить:
if(!isset($_SESSION['ticket'])){
count_ticket($ticket);
}elseif($_SESSION['ticket'] != $ticket){
count_ticket($ticket);
}
И соответственно принимать $ticket
в функции function count_ticket($ticket){...}
elseif
необходим на случай, если этот же пользователь перейдет по ссылке уже с другим тикетом. Если убрать условие, то сессия уже существует у этого пользователя и клик по новому тикету у этого же пользователя не засчитается!
Пользуйтесь на здоровье:)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужно выводить запись, только после того как прошло 20 минут, есть такой код, но он не работаетдата хранится в int в unixtimestamp
Допустим есть у меня классы Text, Entry, Label, как мне создать массив экземпляров, данных(имеется ввиду этих) классовВообще такое реально
Заметил, что у Скайпа например, отличается всплывающее меню в области уведомлений от других приложений в трее - и шрифт, и даже разметкаМне...