【问题标题】:Passing a default value in POST array在 POST 数组中传递默认值
【发布时间】:2019-11-21 06:48:38
【问题描述】:

我有一个 MCQ 测试问题页面。问题和选项由 foreach 循环打印,并以 JSON 格式存储。当用户提交时,我有一个 POST 数组,我在其中存储为特定问题单击的单选按钮。我已经完成了所有工作,但其中有一个错误,即如果用户留下任何问题,帖子数组会因一些未知的索引/值值而受到干扰。并且正确答案数组中包含所有索引。所以我无法比较两个数组。如果没有索引/键,我如何将 0 作为数组中的值放置。

HTML 格式

 <form id="gi" method="post" name="mockForm" action="checkAnswer.php">

      <?php
      foreach ($json_data as $key => $value) {
          echo
          "<p><span class='que'> Question</span>&nbsp;&nbsp". $value['number']."&nbsp;&nbsp". "<br><hr class='line'>". $value['question']."<br><br>".
          "<pre>"."<input type='radio'  name='question" . $value['number']."' value='op1' required>" ." " , $value['op1']."</pre>".
          "<pre>"."<input type='radio' name='question" . $value['number']."' value='op2' required>" ." " , $value['op2']."</pre>".
          "<pre>"."<input type='radio' name='question" . $value['number']."' value='op3' required>"." "  , $value['op3']."</pre>".
          "<pre>"."<input type='radio' name='question" . $value['number']."' value='op4' required>"." " , $value['op4']."</pre>"

              "</p>";
      }
      ?>
            <input class="submitBtn" type="submit" name="btnsubmit" value="SUBMIT">
            <button onclick="hit(); handleClick();">click</button>
       </form>

PHP CHECKANSWER.php

<?php
$contentOfJsonFile = file_get_contents("example_10.json");
$JsonData = json_decode($contentOfJsonFile, true);

$correctAnswerArray = [];

$wrongCount = 0;
$correctCount = 0;
foreach ($JsonData as $key => $value) {
    array_push($correctAnswerArray, $value['correct_answer']);
}

    $userAnswerArray = $_POST;

$breakForeach = count($userAnswerArray) - 1;
$loopRun = 0;
foreach ($userAnswerArray as $key => $answer) {


    $questionNumber = substr($key, -1);

    if ($correctAnswerArray[$questionNumber] === $answer) {
        # increment correct
        $correctCount++;
    } else if($correctAnswerArray[$questionNumber] === 0) {
        # increment wrong
        $wrongCount++;
    }
    else {
        $wrongCount++;
    }


$loopRun++;

    if($breakForeach == $loopRun ) break;
}
echo "<br>".$correctCount."<br>";
echo $wrongCount;

?>

【问题讨论】:

  • 显而易见的解决方案是将其中一个单选按钮设置为选中。如果是可选问题,请使用 isset 检查后端。

标签: javascript php arrays json ajax


【解决方案1】:

叹息...请尝试从中学习一些东西。

<form id="gi" method="post" action="checkAnswer.php">
  <?php foreach ($json_data as $value): ?>
    <p>
        <span class="que">Question</span>
        <?php echo $value["number"]; ?>
    </p>

    <hr class="line">

    <?php 
        for ($i = 1, $i <= 4; $i++) {
            echo sprintf('<input type="radio" name="question[%d] value="%s" required> %s', 
                $value["number"], 
                $value["op{$i}"], 
                $value["op{$i}"]);
        }
    ?>
  <?php endforeach; ?>
<?php
// FIXME Database
$answerKey = json_decode(file_get_contents("example_10.json"), true);

$score = 0;
foreach ($_POST as $i => $answer) {
    if (isset($answerKey[$i]) && $answerKey[$i] == $answer) {
        // increment correct
        $score++;
    }
}

echo "<br>{$score}<br>";
echo count($answerKey) - $score;

【讨论】:

  • 实际上测试也包含否定标记方案,因此用户更愿意留下问题。我不用户点击另一个按钮留下问题,因为它会花时间。
  • 我得到的帖子数组是 ------ Array ( [question] => Array ( [0] => on [1] => on [2] => on [3 ] => on [4] => on ) [btnsubmit] => SUBMIT )
  • 我不确定您的 json 结构中有什么。我真的只是把它重构为可读的东西。检查生成的 html 并查看错误在哪里。 Stackoverflow 无法解决生活中的所有问题。
猜你喜欢
  • 2014-04-09
  • 2011-02-12
  • 1970-01-01
  • 2016-12-14
  • 2011-04-24
  • 2012-08-06
  • 2015-11-12
  • 2017-03-20
  • 1970-01-01
相关资源
最近更新 更多