感谢Stack Overflow成员的帮助和宝贵见解,我非常接近完成我的测验项目。但是,对于项目的最后润色,我还有一些问题。在开始之前,我想简要介绍一下我的测验项目。
测验包含10个问题。每个问题都是多项选择或Y / N,它只使用单选按钮和提交信息的答案按钮。该代码包含JavaScript和PHP,以及稍后的一些Ajax。到目前为止它能做什么(如果精确地遵循)是当用户进入第一页回答第一个问题时,选择一个单选按钮并点击答案按钮,它提交表格并打印相应的文本,具体取决于它是否是正确或不正确。这部分效果很好,至少对我而言。
什么不合适是两件事。我能够增加甚至在页面上显示递增的值(尽管它不会在最后的迭代中显示)但是当刷新页面时,您可以在第一页中再次执行相同的过程并增加总正确变量。这意味着,作为用户,您可以增加总的正确变量,甚至不留下第一个问题(完全没有问题)。
这是我的代码:
foreach ($correctAns as $key => $answer)
{
if (!empty($_POST[$key]))
{
if ($_POST[$key] == $answer)
{
print $correct[$index];
$_SESSION["totalCorrect"]++;
print $_SESSION["totalCorrect"];
}
else if($_POST[$key] != $answer)
{
print $incorrect[$index];
print "0";
}
}
$index++;
};
目标是从每个页面增加总正确变量,并根据正确变量的数量,将它们带到两个页面中的一个。例如,如果它们的总正确变量小于7,则它们将重定向到重拍页面。如果它等于或大于7,则它们将被带到成功页面。
以下是表单提交的示例:
<form>
<fieldset>
<legend>Question 1</legend>
<input type="radio" name="answer1" value="a" id="1a"><label for="1a" > A.</label>
<br>
<input type="radio" name="answer1" value="b" id="1b"><label for="1b"> B.</label>
<br>
<input type="radio" name="answer1" value="c" id="1c"><label for="1c"> C.</label>
<br>
<input type="radio" name="answer1" value="d" id="1d"><label for="1d"> D.</label>
</fieldset>
<input type="button" id="answer" class="" value="ANSWER">
</form>
我想要锁定的主要内容是当用户选择了一个单选按钮并单击了答案按钮时,该值存储在我的PHP文件中。如果用户到目前为止有3个正确答案,则应保留这3个正确答案。当用户在单击问题10上的提交按钮后回答所有10个问题时,将对所有问题进行评估。
我已经研究过破坏会话的表单数据并使用另一个PHP文件进行重定向,但我仍然对某些方面感到困惑。例如,如果用户在问题4上并决定刷新页面的原因,问题1-3中的表单数据是否也会被销毁?
如果我能提供或澄清其他任何内容,请告诉我。
答案 0 :(得分:0)
我看到您正在使用会话,使用会话变量来保存已到达的问题,并使用另一个会话来保存正确答案的计数器。
然后在每个页面的标题中,通过PHP脚本检查用户所遇到的问题。
<?php
session_start();
if(!$_SESSION['question_id']){
$_SESSION['question_id'] = 1;
$_SESSION['correct_answers'] = 0;
}
$question_id = $_SESSION['question_id'];
// select question where question_id = $question_id
// select all choices and correct answer ($correct_answer)
// print the question with the choices
if(isset $_post['submit']){
if($correct_answer == $_POST['choice']){
$_SESSION['correct_answers']+=1;
$_SESSION['question_id']+=1;
}
}