如何将输入字段数组插入mysql

时间:2017-09-29 09:46:21

标签: php mysql arrays html5 multidimensional-array

目前我正在尝试将复选框,广播和文本字段数组插入到我的数据库中,当我从每个复选框组中选择一个选项时,数组会插入。 但是当我从不同的组中选择多个选项或者将一个组留空时,插入就会混乱。这就是第4组的值可以插入到第1组的行中。 这是我的代码

Html表单。

while($row2=$coursefetch1->fetch()){
    $iid = $row2['id'];
    if($row2['type'] == 0){
        echo '

        <div class="tab-pane" id="'.$row2['id'].'">
        <div class="row" align="center">

        <b> '.$row2['question'].' </b><br>
        <input type="hidden" id="question" name="question[]" value="'.$row2['question'].'">

        <input type="hidden" id="test_id" name="test_id[]" value="'.$row2['test_id'].'">
        <input type="checkbox" id="yanswer" name="yanswer1[]" value="a"><span> '.$row2['a'].' </span><br>
        <input type="checkbox" id="yanswer" name="yanswer2[]" value="b"><span> '.$row2['b'].' </span><br>
        <input type="checkbox" id="yanswer" name="yanswer3[]" value="c"><span> '.$row2['c'].' </span><br>
        <input type="checkbox" id="yanswer" name="yanswer4[]" value="d"><span> '.$row2['d'].' </span><br>


        </div>
        </div>

        ';
    }

    elseif($row2['type'] == 2){
        echo '

        <div class="tab-pane" id="'.$row2['id'].'">
        <div class="row" align="center">

        <b> '.$row2['question'].' </b><br>
        <input type="hidden" id="question" name="question[]" value="'.$row2['question'].'">

        <input type="hidden" id="test_id" name="test_id[]" value="'.$row2['test_id'].'">
        <input type="radio" style="background-color:red;" id="yanswer" name="yanswer[]" value="a"><span> '.$row2['a'].' </span><br>
        <input type="radio" style="background-color:red;" id="yanswer" name="yanswer[]" value="b"><span> '.$row2['b'].' </span><br>
        <input type="radio" style="background-color:red;" id="yanswer" name="yanswer[]" value="c"><span> '.$row2['c'].' </span><br>
        <input type="radio" id="yanswer" name="yanswer[]" value="d"><span> '.$row2['d'].' </span><br>


        </div>
        </div>

        ';
    }

    elseif($row2['type'] == 1){

        echo '

        <div class="tab-pane" id="'.$row2['id'].'">
        <div class="row" align="center">

        <b> '.$row2['question'].' </b><br>
        <input type="hidden" id="question" name="question[]" value="'.$row2['question'].'">

        <input type="hidden" id="test_id" name="test_id[]" value="'.$row2['test_id'].'">
        <input type="text" id="yanswer" name="yanswer1[]" value="">


        </div>
        </div>

        ';
    }

}
?>


PHP that processes the form

    <?php
    require "head.php";


    if (isset($_POST['submit'])) {
      $question_array = $_POST['question'];
      $testid_array = $_POST['test_id'];
      $answer_array = $_POST['yanswer'];
      $i = 0;
    for($i = 0; $i < count($question_array); $i++) {
        $question = $question_array[$i];
        $testid = $testid_array[$i];
        $answer = $answer_array[$i];

        $enterscore = $achilles->prepare("INSERT INTO `user_answer` (test_id,question,your_answer)
        VALUES (:t,:q,:a)");

        $enterscore->bindparam(':t',$testid);
        $enterscore->bindparam(':q',$question);
        $enterscore->bindparam(':a',$answer);
        $enterscore->execute();

      }
    }

1 个答案:

答案 0 :(得分:0)

  

但是当我从不同的组中选择多个选项或者将一个组留空时,插入就会混乱。

这是因为只有选中复选框才会提交值。所以未经检查的那些不会在你的数组中生成一个条目,并且由于数组索引是自动分配的,由于字段名末尾的[],你会得到一个“乱码”的数据结构。

预先指定数组元素的索引:name="foo[0]"name="foo[1]"等。这样,您将在其定义的“位置”中获取选中的复选框值,以便您知道哪个值属于哪个答案。

正如评论中提到的那样,ID 必须在HTML文档中是唯一的 - 所以你需要去修复它。根据您首先需要这些ID的内容,您需要使它们包含某种计数器值......或者如果它们没有任何特定用途,则将其删除。