我最近在数据库中摆弄了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语句为真?如果您可以看到重置问题的位置也很好,但我可能会为此创建一个新帖子。
提前致谢。
答案 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);
这样可以防止重复设置会话变量。