存储和检索_SESSION变量

时间:2014-10-14 16:01:48

标签: php session session-variables

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

0 个答案:

没有答案