将数组中的单选按钮值发布到php文件

时间:2017-01-15 19:06:11

标签: php jquery html

我正在试着写一篇试卷。我的代码是这样的:

<form action="check.php">
  <span id="ques_id_12">Question 1</span>
  <input type="radio" id="option_a_12" name="ques12[]" value="1">
    <label for="option_a_12">Answer a</label>
  <input type="radio" id="option_b_12" name="ques12[]" value="2">
    <label for="option_b_12">Answer b</label>
  <input type="radio" id="option_c_12" name="ques12[]" value="3">
    <label for="option_c_12">Answer c</label>
  <input type="radio" id="option_d_12" name="ques12[]" value="4">
    <label for="option_d_12">Answer d</label>

  <span id="ques_id_13">Question 2</span>
  <input type="radio" id="option_a_13" name="ques13[]" value="1">
    <label for="option_a_13">Answer a</label>
  <input type="radio" id="option_b_13" name="ques13[]" value="2">
    <label for="option_22">Answer b</label>
  <input type="radio" id="option_c_13" name="ques13[]" value="3">
    <label for="option_c_13">Answer c</label>
  <input type="radio" id="option_d_13" name="ques13[]" value="4">
    <label for="option_d_13">Answer d</label>

  <span id="ques_id_14">Question 3</span>
  <input type="radio" id="option_a_14" name="ques14[]" value="1">
    <label for="option_a_14">Answer a</label>
  <input type="radio" id="option_b_14" name="ques14[]" value="2">
    <label for="option_b_14">Answer b</label>
  <input type="radio" id="option_c_14" name="ques14[]" value="3">
    <label for="option_c_14">Answer c</label>
  <input type="radio" id="option_d_14" name="ques14[]" value="4">
    <label for="option_d_14">Answer d</label>

 <input type="submit">
</form>

问题是动态的,上面来自php和mysql代码。我想将数据发布到php文件,在那里我可以计算出正确的问题数量,错误的问题数量和尝试的问题数量。

我很困惑如何检查正确的答案。 $_POST[ans_a]将从所有问题中返回ans_a。我如何区分所有问题并分别将它们放入数组中。或者我应该改变我安排动态代码的方式吗?

2 个答案:

答案 0 :(得分:0)

注意@RajdeepPaul说的是什么。您的答案将被公开并与答案一起发布,因此如果您想要任何类型的安全性,请不要这样做,并在PHP中检查答案..

$answers = ['ques12' => 4, 'ques13' => 3, 'ques14' => 2];

现在循环遍历所有答案。 $ answers中的键与$ _POST中的键相同。

答案 1 :(得分:0)

首先,从不在HTML表单中将正确答案作为hidden输入字段。任何人都可以看到源代码并获得所有问题的正确选项。在表格中保留与特定问题相对应的正确答案(选项):

+-------------+----------------+
| question_id | correct_option |
+-------------+----------------+
|             |                |

或者,使用这样的数组:

$correct_options = array('ques_id_12' => 4, 'ques_id_13' => 3, 'ques_id_14' => 2);

以后您可以将正确答案与用户输入的选项值进行比较。

现在回答您的问题,您需要更改此复选框元素的name属性值,

name="ques_id_12"针对问题ID 12的所有复选框选项,name="ques_id_13"针对问题ID 13的所有复选框选项等。

此外,由于您使用表单向服务器发送大量数据,因此应使用POST方法而不是GET

所以你的表格应该是这样的:

<form action="check.php" method="POST">
    <span id="ques_id_12">Question 1</span>
    <input type="radio" id="option_a_12" name="ques_id_12" value="1">
    <label for="option_a_12">Answer a</label>
    <input type="radio" id="option_b_12" name="ques_id_12" value="2">
    <label for="option_b_12">Answer b</label>
    <input type="radio" id="option_c_12" name="ques_id_12" value="3">
    <label for="option_c_12">Answer c</label>
    <input type="radio" id="option_d_12" name="ques_id_12" value="4">
    <label for="option_d_12">Answer d</label>

    <span id="ques_id_13">Question 2</span>
    <input type="radio" id="option_a_13" name="ques_id_13" value="1">
    <label for="option_a_13">Answer a</label>
    <input type="radio" id="option_b_13" name="ques_id_13" value="2">
    <label for="option_22">Answer b</label>
    <input type="radio" id="option_c_13" name="ques_id_13" value="3">
    <label for="option_c_13">Answer c</label>
    <input type="radio" id="option_d_13" name="ques_id_13" value="4">
    <label for="option_d_13">Answer d</label>

    <span id="ques_id_14">Question 3</span>
    <input type="radio" id="option_a_14" name="ques_id_14" value="1">
    <label for="option_a_14">Answer a</label>
    <input type="radio" id="option_b_14" name="ques_id_14" value="2">
    <label for="option_b_14">Answer b</label>
    <input type="radio" id="option_c_14" name="ques_id_14" value="3">
    <label for="option_c_14">Answer c</label>
    <input type="radio" id="option_d_14" name="ques_id_14" value="4">
    <label for="option_d_14">Answer d</label>

    <input type="submit">
</form>

表单提交后,您可以使用简单的foreach循环将用户输入的选项值与每个问题的正确选项值进行比较,如下所示:

foreach($_POST as $question_id => $user_inputted_option){
    // compare the user inputted option value with the correct option value
}

更新(1):

  

我怎么知道哪些问题已经回答,哪些问题没有?我将如何传递问题ID?

假设您的问题ID数组是这样的:

$ques_ids = array('ques_id_12', 'ques_id_13', 'ques_id_14', 'ques_id_15', 'ques_id_16');

然后在提交表单后,您需要像这样处理表单:

$array_keys = array_keys($_POST); // all the user attempted question ids
foreach($ques_ids as $q_id){
    if(in_array($q_id, $array_keys)){
        // attempted question
        $user_inputted_option_value = $_POST[$q_id];
        // now compare the user inputted option value with the correct option value
    }else{
        // unattempted question
    }
}

旁注:如果您想查看完整的数组结构,请执行var_dump($_POST);