0

我创建了一个测试系统,它有多个步骤(使用 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" />

当用户检查正确答案时,如何使用用户分数更新隐藏字段?我不知道该尝试什么才能先尝试一下!


好的,每个人都发现了一个大漏洞。我完全愿意以一种隐藏的方式这样做,这样人们就无法查看源代码。针对的用户类型不知道如何查看源代码,但最好从正确的方式开始!

整个测试都在一个表单中,所以它只能在提交时更新隐藏字段吗?

我仍然需要一些例子来说明如何做到这一点。

4

2 回答 2

0

Spokey 是对的 - 如果您在客户端评分,就像使用您建议的方法一样,用户将能够作弊。

相反,用户可以调用 JQuery $.post 来发布每个答案,然后将分数存储在 PHP 会话中。或者只是等到整个表单被提交,然后在服务器端评估整个表单的分数。

* 更新 *

您必须将表单提交给可以评估表单的脚本。所以说它被提交到 myForm.php

在 myForm.php 中,获取帖子变量:

$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';
   }
}

这是未经测试的,但它应该工作。

于 2013-04-11T14:24:15.237 回答
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'] ;
      }
    }
  }
}
于 2013-04-11T14:24:49.187 回答