PHP 多页调查 - 移至下一部分

PHP Multipage survey - moving to the next part

我正在创建一个基于多项选择题列表的调查,用户在其中单击每个页面上的按钮以转换到下一个问题。

我现在的设置是,每个问题都是一个单独的表单,每个选择都是一个包含其答案值的提交按钮。我的问题是,使用此设置,用户必须单击答案两次(或刷新页面)才能继续调查的下一部分。我明白为什么目前会发生这种情况,因为我知道它必须再次重新加载到 运行 和 php 以检查是否设置了 $_SESSION

我现在确定我应该如何修改它来解决这个问题。

if (!isset($_SESSION['part1'])) { 
         $survey_question = "surveyQuestions and answers here";
         if (isset($_POST['part1'])) {
             $_SESSION['part1'] = $_POST['part1'];
         }
} else if (!isset($_SESSION['part2'])) { 
         $survery_question = "next questions and answers form"; 
... }

echo $survey_question;

我向每个提交按钮添加了一个 onClick 事件,以通过 javascript 重新加载页面,但无济于事。

据我了解,您可以在问题表单中添加一个隐藏值,以指示他们刚刚回答的问题。

...
<input type="hidden" name="questionNum" value="1" />
...

然后在你的 php 文件中,获取这个值并用它来显示下一个问题。

$question_num = (isset($_POST['questionNum'])) ? (int)$_POST['questionNum'] : 0;

switch($question_num) {
    case 0:
        $survey_question = "Question 1.";
        break;
    case 1:
        if(isset($_POST['part1'])) {
            $_SESSION['part1'] = $_POST['part1'];
        }

        $survey_question = "Question 2.";
        break;
     case 2:
        ...
}

当用户第一次进入php页面时,问题编号将设置为0,这将显示第一个问题。当他们再次提交页面时,questionNum POST 变量将设置为 1,这将在会话中保存第一个答案,然后打印出第二个问题。

使用 ajax 是个好主意,但是不用 ​​javascript 也可以做到。您可以简单地提交到同一页面 (.php) 使用隐藏输入收集正确的值并使用脚本中的 if 语句检查这一点