我正在使用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
变量?