PHP会话变量只增加一次

时间:2016-06-29 15:06:53

标签: php mysql session

我最近在数据库中摆弄了PHP,我遇到了一个问题,当我想要增加一个会话变量时,if_语句中的question_id会增加一次,之后不再增加。

session_start();
$_SESSION['question_id'] = 11; // Set default var

if(isset($_POST['ans'])) {
    if($funcs->checkAnswer($_SESSION['question_id'], $mysqli)) {
        $_SESSION['question_id'] = $_SESSION['question_id'] + 1;
    }
}

$question = $funcs->getQuestion($_SESSION['question_id'], $mysqli);

$ _POST变量ans是用户提交答案的表单的ID,checkAnswer()会根据数据库中的正确答案检查此答案,该答案会获取正确答案并将其与用户进行比较。回答,如果正确则返回true,否则为false。如果checkAnswer()为true,理论上会话变量question_id应该每次递增并因此更新问题,但是它只执行一次然后它继续在增量的第一次迭代(问题2),并且如果答案用户输入的错误,由于某种原因重新回到问题一。

有人知道为什么$ _SESSION [' question_id']只会增加一次,即使if语句为真?如果您可以看到重置问题的位置也很好,但我可能会为此创建一个新帖子。

提前致谢。

3 个答案:

答案 0 :(得分:3)

您始终将question_id重置为11。 你必须写:

if (empty($_SESSION['question_id']) {
    $_SESSION['question_id'] = 11;
}   

答案 1 :(得分:0)

您正在对每个“设置默认值变量”的请求执行$_SESSION['question_id'] = 11;,然后在两个条件通过时将其递增一次。你为什么期望它永远高于12?

如果您不想每次都覆盖该值,则必须使用isset进行检查:

if (!isset($_SESSION['question_id'])) {
    $_SESSION['question_id'] = 11;
}

你也可以这样做:

++$_SESSION['question_id'];

而不是:

$_SESSION['question_id'] = $_SESSION['question_id'] + 1;

答案 2 :(得分:0)

每次执行脚本时,您都在重新设置$ _SESSION ['question_id']的值。这就是它只增加一次的原因。 您应该首先检查它:

<?php
session_start();

if( !isset($_SESSION['question_id']) )
{
  $_SESSION['question_id'] = 11; // Set default var
}

if(isset($_POST['ans'])) {
    if($funcs->checkAnswer($_SESSION['question_id'], $mysqli)) {
        $_SESSION['question_id'] = $_SESSION['question_id'] + 1;
    }
}

$question = $funcs->getQuestion($_SESSION['question_id'], $mysqli);

这样可以防止重复设置会话变量。

相关问题