我创建了一个包含多个步骤(使用jquery)的测试系统,允许用户选中复选框以选择他们的答案,并在表单中显示摘要页面和最终提交按钮。我现在想要创建评分系统。
1)首先,这是代码(在一个循环中),从Wordpress获取每个问题的答案:
<input type="checkbox" name="answer<?php echo $counter; ?>[]" value="<?php echo $row['answer']; ?>" />
2)在每个答案旁边的Wordpress中,是一个带有是或否选项的下拉列表,用于标记答案是对还是错。这是以下列方式输出的:
<?php $row['correct']; ?>
3)用户检查的每个正确答案应该值1分。该标记由字段确定:
<?php the_field('pass_mark'); ?>
4)我希望它在用户检查正确答案时用分数更新隐藏字段:
<input type="hidden" value="<?php echo $score; ?>" name="test-score" />
当用户检查正确的答案时,如何使用用户分数更新隐藏字段?我不知道该怎么做才能先行一步!
整个测试都在一个表单中,所以它只能在提交时更新隐藏字段吗?
我仍然需要一些如何做的例子。
答案 0 :(得分:0)
Spokey是对的 - 如果您在客户端使用您建议的方法对其进行评分,则用户可以作弊。
相反,要么用户使用JQuery $ .post调用来发布每个答案,然后将分数存储在PHP会话中。或者只是等到提交整个表单并在服务器端评估整个表单的分数。
*更新*
您必须将表单提交给可以评估表单的脚本。所以说它被提交到myForm.php
在myForm.php中,获取post vars:
$correct_answers = $however_you_get_your_correct_answers();
//Assuming $correct_answers is a associative array with the same keys being used in post -
$results = array();
if($_POST){
foreach ($_POST as $key=>$value) {
if ($_POST[$key] == $correct_answers[$key]){
$results[$key] = 'correct';
}
else $results[$key] = 'incorrect';
}
}
这是未经测试的,但应该有效。
答案 1 :(得分:0)
在我看来,你应该为此目的使用会话,因为任何浏览器输出都可以在任何文本编辑器中保存和查看。这不是正确的目的哦隐藏的输入元素。当您需要自动提交内容时使用隐藏输入,但在处理某些重要数据时从不使用它。
通过id
映射您的问题和答案,这样您就无法在HTML
中显示真实的答案和分数。
这是一个非常简单的例子:
<?php
$questions = array(
125 => array("text"=>"2x2?", "answer"=>"4", 'points'=>3),
145 => array("text"=>"5x6?", "answer"=>"30", 'points'=>2),
);
?>
<form method="post">
<?php foreach ($questions as $id => $question): ?>
<div><?php echo $question['text'] ; ?></div>
<input type="text" name="question<?php echo $id ; ?>"/>
<?php endforeach ; ?>
<input type="submit" value="Submit"/>
</form>
/* In submission script */
<?php
if (isset($_POST['submit'])){
foreach($questions as $id => $question){
if (isset($_POST["question{$id}"])){
$answer = $_POST["question{$id}"] ;
if ($answer === $question['answer']){
$_SESSION['score'] += $question['points'] ;
}
}
}
}