2013-09-28 183 views
0

我正在创建一个多选题测验,我不知道如何将多个数组插入数据库。我可以使用array_combine插入前两个数组,但不能在第3,第4,第5和第6个数组中插入。我可以将问题和答案,但不是选项A,B,C和D插入多个数组到数据库

我试图做类似

的foreach(array_combine($ _ POST [ 'inQuestion'],$ _ POST [ 'inAnswer'],$ _POST ['inA'],$ _POST ['inB'],$ _POST ['inC'],$ _POST ['inD'])作为$ question => $ answer => $ A => $ B => $ C => $ D){

请帮忙。这是我的代码。

<?php 
    if(isset($_POST['btnCreate'])) { 

     $inQuestion = array($_POST['inQuestion']); 
     $inAnswer = array($_POST['inAnswer']); 
     $inA = array($_POST['inA']); 
     $inB = array($_POST['inB']); 
     $inC = array($_POST['inC']); 
     $inD = array($_POST['inD']); 
     $inLesson = $_POST['inLesson']; 
     $inQuizNo = $_POST['inQuizNo']; 

     $sql = "SELECT * FROM lessons WHERE title='$inLesson'"; 
     $query = mysql_query ($sql); 
     $row = mysql_fetch_assoc($query); 

     $lessonID = $row['lessonID']; 

     foreach(array_combine($_POST['inQuestion'], $_POST['inAnswer']) as $question => $answer) { 

      $sql = "INSERT INTO `test` (question, answer, A, B, C, D, lessonID, quizNo) VALUES ('$question', '$answer', '$A', '$B', '$C', '$D', '$lessonID', $inQuizNo)"; 
      $query = mysql_query($sql); 
     } 

    } 
?> 

<div class="panel panel-info"> 
<div class="panel-heading"> 
    <h4>Create Assessment - Multiple Choice</h4> 
</div> 

<div class="panel-body"> 

    <form method="post"> 

     <br> 

     <div> 
      <div class="col-md-4"> 
       <strong>Lesson</strong><br> 
       <select class="form-control" name="inLesson"> 
        <option></option> 
        <option disabled></option> 

        <?php 
         $sql2 = "SELECT * FROM lessons WHERE courseID='$_GET[courseID]'"; 
         $query2 = mysql_query ($sql2);       
         while ($row2 = mysql_fetch_assoc($query2)) { 
        ?> 

         <option><?php echo $row2['title']; ?></option> 

        <?php } ?> 

       </select> 
      </div> 
      <div class="col-md-4"> 
       <strong>Quiz No.</strong><br>     
       <input required type="number" class="form-control" name="inQuizNo" min="1" max="100"> 
      </div> 
      <div class="col-md-4"> 
       <div class="pull-right"> 
       <br> 
       <input type="button" value="Add" id="addButton" class="btn btn-info"> 
       <input type="button" value="Remove" id="removeButton" class="btn btn-warning"> 
       </div> 
      </div> 
     </div> 

     <br><br><br><br><br> 

     <div id='TextBoxesGroup'> 
      <div id="TextBoxDiv1" class="form-group"> 

       <h2><span class="label label-primary">No. 1</span></h2> 
       <br><br> 

       <div class="col-md-10"> 
        <label>Question</label><input type='text' id='textbox1' name='inQuestion[]' class="form-control"> 
       </div> 
       <div class="col-md-2"> 
        <label>Answer</label><input type='text' id='textbox1' name='inAnswer[]' class="form-control"> 
        <br> 
       </div> 

       <div class="col-md-3"> 
        <label>A</label><input type='text' id='textbox1' name='inA[]' class="form-control"> 
       </div> 
       <div class="col-md-3"> 
        <label>B</label><input type='text' id='textbox1' name='inB[]' class="form-control"> 
       </div> 
       <div class="col-md-3"> 
        <label>C</label><input type='text' id='textbox1' name='inC[]' class="form-control"> 
       </div> 
       <div class="col-md-3"> 
        <label>D</label><input type='text' id='textbox1' name='inD[]' class="form-control"> 
        <br><br> 
       </div> 
      </div> 
     </div> 

     <div class="col-md-12"> 
      <button type="submit" name="btnCreate" class="btn btn-success pull-right">Create Quiz 
     </div> 
    </form> 
</div> 

+0

给你完整的代码,包括HTML代码。以便我们明白你想要什么 –

+0

这些数组的值类型是什么?为什么你有一个数组与其中的一个项目? – Othman

+0

你介意给我们更多关于你想要达到什么的信息吗? – Othman

回答

0

从我的理解,你想插入multible行到你的数据库。

首先,当你在HTML表单使用[]您不必将其声明为一个数组中php

其次,每个问题都会有一个疑问名字,答案,A,B,C,d

当您尝试创建HTML表单时,您可以使用此格式来跟踪question_id或编号。

<label>Question</label><input type='text' id='textbox1' name='inQuestion[1]' class="form-control"> 

然后你就可以检索该项目作为$_POST['inQuestion'][1]

例如,如果您需要在您的测试页10个问题,你可以做这样的:

<?php for($i = 0; $i <= 10; $i++) : ?> 
<form method="post"> 

    <div class="col-md-10"> 
     <label>Question</label><input type='text' id='textbox1' name='inQuestion[<?=$i;?>]' class="form-control"> 
    </div> 

    <div class="col-md-2"> 
     <label>Answer</label><input type='text' id='textbox1' name='inAnswer[<?=$i;?>]' class="form-control"> 
     <br> 
    </div> 


    <div class="col-md-3"> 
     <label>A</label><input type='text' id='textbox1' name='inA[<?=$i;?>]' class="form-control"> 
    </div> 
    <div class="col-md-3"> 
     <label>B</label><input type='text' id='textbox1' name='inB[<?=$i;?>]' class="form-control"> 
    </div> 
    <div class="col-md-3"> 
     <label>C</label><input type='text' id='textbox1' name='inC[<?=$i;?>]' class="form-control"> 
    </div> 
    <div class="col-md-3"> 
     <label>D</label><input type='text' id='textbox1' name='inD[<?=$i;?>]' class="form-control"> 
     <br><br> 
    </div> 


    <input type="submit" value="go"> 

</form> 

<?php endfor; ?> 

而且,为什么你把答案A,B,C,D的内容放到数组中,而你的数据库中有列。在查询中也使用这些变量。

$inA = $_POST['inA']; 
$inB = $_POST['inB']; 
$inC = $_POST['inC']; 
$inD = $_POST['inD']; 

最后我们试着现在插入你的值。

if($_POST['btnCreate']){ 

    // The form has been posted! 

    $inLesson = $_POST['inLesson']; 
    $inQuizNo = $_POST['inQuizNo']; 

    $questionsCount = count($_POST['inQuestion']); 

    $items = array(); 

    // Since we should have the same size of arrays. 
    // Also the empty validation has been handled before this step! 
    for($i = 0; $i < $questionsCount; $i++){ 
      $temp = array(); 
     $temp['inQuestion'] = $_POST['inQuestion'][$i]; 
     $temp['inAnswer']  = $_POST['inAnswer'][$i]; 
     $temp['inA']   = $_POST['inA'][$i]; 
     $temp['inB']   = $_POST['inB'][$i]; 
     $temp['inC']   = $_POST['inC'][$i]; 
     $temp['inD']   = $_POST['inD'][$i]; 
      $items[] = $temp; 
    } 


    // Now items should have an array of all questions. 

    foreach($items as $item){ 

     $SQL = 'INSERT INTO `test` (question, answer, A, B, C, D, lessonID, quizNo) VALUES (
                          "'.$item['inQuestion'].'", 
                          "'.$item['inAnswer'].'", 
                          "'.$item['inA'].'", 
                          "'.$item['inB'].'", 
                          "'.$item['inC'].'", 
                          "'.$item['inD'].'", 
                          "'.$inLesson.'", 
                          "'.$inQuizNo.'")'; 

     $query = mysql_query($SQL); 
    } // End Foreach 
} 
+0

它给了我一个错误。这条线上的未定义变量1 >> for($ i = 0; $ i <$$ questionsCount; $ i ++){ – user2825914

+0

我修正了for循环,现在可以试试了。 – Othman

+0

我终于得到了我的答案先生。你是非常大的帮助。谢谢 :) – user2825914

0

尝试这个

<?php 
    if(isset($_POST['btnCreate'])) { 

     $inQuestion = array($_POST['inQuestion']); 
     $inAnswer = array($_POST['inAnswer']); 
     $inA = $_POST['inA'] ? $_POST['inA'] : null; 
     $inB = $_POST['inB'] ? $_POST['inB'] : null; 
     $inC = $_POST['inC'] ? $_POST['inC'] : null; 
     $inD = $_POST['inD'] ? $_POST['inD'] : null; 
     $inLesson = $_POST['inLesson']; 
     $inQuizNo = $_POST['inQuizNo']; 

     $sql = "SELECT * FROM lessons WHERE title='$inLesson'"; 
     $query = mysql_query ($sql); 
     $row = mysql_fetch_assoc($query); 

     $lessonID = $row['lessonID']; 

      $sql = "INSERT INTO `test` (question, answer, A, B, C, D, lessonID, quizNo) VALUES ('$question', '$answer', '$inA', '$inB', '$inC', '$inD', '$lessonID', $inQuizNo)"; 
      $query = mysql_query($sql); 
    } 
?> 

<div class="panel panel-info"> 
<div class="panel-heading"> 
    <h4>Create Assessment - Multiple Choice</h4> 
</div> 

<div class="panel-body"> 

    <form method="post"> 

     <br> 

     <div> 
      <div class="col-md-4"> 
       <strong>Lesson</strong><br> 
       <select class="form-control" name="inLesson"> 
        <option></option> 
        <option disabled></option> 

        <?php 
         $sql2 = "SELECT * FROM lessons WHERE courseID='$_GET[courseID]'"; 
         $query2 = mysql_query ($sql2);       
         while ($row2 = mysql_fetch_assoc($query2)) { 
        ?> 

         <option><?php echo $row2['title']; ?></option> 

        <?php } ?> 

       </select> 
      </div> 
      <div class="col-md-4"> 
       <strong>Quiz No.</strong><br>     
       <input required type="number" class="form-control" name="inQuizNo" min="1" max="100"> 
      </div> 
      <div class="col-md-4"> 
       <div class="pull-right"> 
       <br> 
       <input type="button" value="Add" id="addButton" class="btn btn-info"> 
       <input type="button" value="Remove" id="removeButton" class="btn btn-warning"> 
       </div> 
      </div> 
     </div> 

     <br><br><br><br><br> 

     <div id='TextBoxesGroup'> 
      <div id="TextBoxDiv1" class="form-group"> 

       <h2><span class="label label-primary">No. 1</span></h2> 
       <br><br> 

       <div class="col-md-10"> 
        <label>Question</label><input type='text' id='textbox1' name='inQuestion[]' class="form-control"> 
       </div> 
       <div class="col-md-2"> 
        <label>Answer</label><input type='text' id='textbox1' name='inAnswer[]' class="form-control"> 
        <br> 
       </div> 

       <div class="col-md-3"> 
        <label>A</label><input type='text' id='textbox1' name='inA' class="form-control"> 
       </div> 
       <div class="col-md-3"> 
        <label>B</label><input type='text' id='textbox1' name='inB' class="form-control"> 
       </div> 
       <div class="col-md-3"> 
        <label>C</label><input type='text' id='textbox1' name='inC' class="form-control"> 
       </div> 
       <div class="col-md-3"> 
        <label>D</label><input type='text' id='textbox1' name='inD' class="form-control"> 
        <br><br> 
       </div> 
      </div> 
     </div> 

     <div class="col-md-12"> 
      <button type="submit" name="btnCreate" class="btn btn-success pull-right">Create Quiz 
     </div> 
    </form> 
</div> 
+0

它仍然没有工作先生。它给了我一个通知:“在sql语句中对数组进行字符串转换”。 – user2825914

+0

再次尝试我的答案,我做了一些编辑到您的HTML和你的PHP代码 –

0

,而不是发布一个详细的解决方案,玩如何插入多行得到一些想法

喜欢的东西:

$_POST['inQuestion'] = array(
    'q1','q2','q3' // from input array name 'inQuestion[]' 
); 

$_POST['inAnswer'] = array(
    'a1','a2','a3' // from input array name 'inAnswer[]' 
); 

$_POST['other'] = 'sunshine'; 

$_POST['yet_another'] = 'nice weather'; 

foreach($_POST['inQuestion'] as $k => $v){ 
$inserts[] = "(".$v.",".$_POST['inAnswer'][$k].",".$_POST['other'].",".$_POST['yet_another'].")"; 
} 

echo "INSERT INTO table col_1, col_2, col_3, col_4 VALUES ".implode(',',$inserts).""; 

// INSERT INTO table col_1, col_2, col_3, col_4 VALUES (q1,a1,sunshine,nice weather),(q2,a2,sunshine,nice weather),(q3,a3,sunshine,nice weather)