Я работаю над function
Это позволяет пользователю голосовать за пост не более одного раза. На странице несколько постов, поэтому мне нужно отслеживать, за какие посты проголосовал пользователь.
Я делаю это, сохраняя общую сумму голосов. Например, если пользователь голосует за сообщение, он должен удалить свой голос, проголосовав один раз, или поменять свой первоначальный голос на голосование вниз, проголосовав дважды.
При первом голосовании я инициализирую $_SESSION
переменная к 0
, Понижение голоса приводит к -1
и голосование принимает его 1
,
Здесь PHP
function
для голосования «за» (функция «против» аналогична):
function upVote($post_id) {
global $databaseController;
if(!isset($_SESSION[$post_id])) {
$_SESSION[$post_id] = 0;
}
if($_SESSION[$post_id] <= 0) {
$sql = "SELECT likes FROM posts WHERE id='" . $post_id . "'";
$results = $databaseController->select($sql);
if($results && $results->num_rows == 1) {
$results = $results->fetch_assoc();
$new_likes = ++$results['likes'];
try {
$databaseController->startTransaction();
$sql = "UPDATE posts SET likes=" . $new_likes . " WHERE id=" . $post_id;
$databaseController->update($sql);
if($databaseController->commit()) {
$_SESSION[$post_id] = ++$_SESSION[$post_id];
return true;
}
} catch (Exception $e) {
$databaseController->rollback();
return false;
}
}
}
return false;
}
$_SESSION[$post_id]
всегда сбрасывается на 0
каждый раз, когда вызывается функция, позволяющая пользователю голосовать столько раз, сколько он хочет.
Почему это происходит? Мне кажется, что переменная должна быть установлена только в 0
если пользователь никогда не голосовал за сообщение, иначе он просто извлекает переменную, видит, что она существует, и изменяет ее.
Что-то не так с моей логикой? Или я не использую $_SESSION
переменные в правильном пути?
Задача ещё не решена.
Других решений пока нет …