2016-11-08 86 views
0

这与测验应用程序有关。问题从数据库中随机生成。用户通过单选按钮选择一个答案。答案与问题ID和用户ID一起存储在数据库中。 一切工作正常。在Codeigniter中的数据库中的数组中插入数组

问题是我有一个数组,我想存储在我的数据库中。以下是代码。

的观点:

<div class="col-lg-8"> 
    <table class="table" style="width: 100%;"> 
     <?php $i = 0; 
     $ques = 1; 
     echo form_open ('Menu/submit_ans', array ('name' => 'quiz')); 
     foreach ($quiz_array as $q) { ?>  
     <td colspan="2" style="background-color: #337ab7; color: white;"> 
      <h4>Question No. <?php echo $ques?> </h4> 
     </td> 
     <tr> 
      <td colspan="2"><?php echo $q->ques;?></td> 
      <input hidden name="qid[]" type="text" value="<?php echo $q->qid;?>"> 
      <input hidden name="uid[]" type="text" value="<?php echo $user['id'];?>"> 
     </tr> 
     <tr> 
      <td><?php echo $q->ans_1;?></td> 
      <td><input type="radio" name="ans[<?php print $i; ?>]" value="1"></td> 
     </tr> 
     <tr> 
      <td><?php echo $q->ans_2;?></td> 
      <td><input type="radio" name="ans[<?php print $i; ?>]" value="2"></td> 
     </tr> 
     <tr> 
      <td><?php echo $q->ans_3;?></td> 
      <td><input type="radio" name="ans[<?php print $i; ?>]" value="3"></td> 
     </tr> 
     <tr> 
      <td><?php echo $q->ans_4;?></td> 
      <td><input type="radio" name="ans[<?php print $i; ?>]" value="4"></td> 
     </tr> 
     <?php $i ++; 
     } ?> 
     </table> 
    <center> 
     <button class="btn btn-success" type="submit">Submit!</button> 
     <a></a> 
    </center> 
</div> 
<?php echo form_close();?> 

控制器:

function submit_ans() { 
    $data = array(
    'qid' => $_POST['qid'], 
    'user_id' => $_POST['uid'], 
    'ans_att' => $_POST['ans'] 
    ); 
    $this->load->model('MyModel'); 
    $this->MyModel->insert_ans($data); 
} 

型号:

function insert_ans($data) { 
    foreach($data as $answer) { 
     //var_dump($answer); 
    } 
    $this->db->insert_batch('tbl_answers', $data);   
} 

以下是错误我得到:

INSERT INTO `tbl_answers`() VALUES ('6','9','1','5','7','10','4','12','8','3','11','2'), ('1','1','1','1','1','1','1','1','1','1','1','1'), Array 

如何将数组存储到我的数据库中?

+0

use like that'ans ['ans_att'] [<?php print $ i; ?>]'全部相同 – devpro

回答

1

insert_batch,你必须要使用的列名作为对每个值类似的关联指数:

$data = array(// array structure for batch insert method. 
    array(
     'column1' => 'val' , 
     'column2' => 'val' ,  
    ), 
    array(
     'column1' => 'val' , 
     'column2' => 'val' , 
    ) 
); 

所以,你需要在这里的,你需要修改你的输入字段:

<input type="radio" name="ans['ans_att'][<?php print $i; ?>]" value="4"> 

对于所有其他字段也是如此,上面提到的数组只是数组结构的提示,您必须像上述一样修改数组。

您也可以调试$data阵列将帮助你了解,你在这里做什么,目前你的阵列是这样的:

$data = array(// structure is not matched with required 
    'qid' => some encoded code, 
    'user_id' => array(1,1,2), 
    'ans_att' => array(1,1,2) 
); 

手册将帮助您了解更多:http://www.codeigniter.com/userguide3/database/query_builder.html

+0

我放弃了使用insert_batch的想法。我如何将所有的数组值存储在数据库中? $数据=阵列( \t 'q_id'=> $ _POST [ 'QID'] [0], \t 'USER_ID'=> $ _POST [ 'UID'] [0], 'ans_att'=> $ _POST ['ans'] [0] ); 我想通过数组迭代所有的问题和答案,然后将它们存储在数据库中。 –

+0

@SahibUzZaman:你可以在这里使用循环的所有值 – devpro

+0

我试图通过在数组中设置相同的变量的问题和答案,但我不能得到它迭代 –

0

您应该编码json_encode方法。

实施例:

<?php 
function submit_ans(){ 
    $data = array(
    'qid' => json_encode($_POST['qid']), 
    'user_id' => $_POST['uid'], 
    'ans_att' => $_POST['ans'] 
    ); 
    $this->load->model('MyModel'); 
    $this->MyModel->insert_ans($data); 
} 
?> 

和使用json_decode后获取记录(); 我希望这段代码有帮助。

0

不能存储在数据库的阵列,使用转换数组字符串“内爆”功能

控制器:

function submit_ans() { 
    $data = array(
    'qid' => $_POST['qid'], 
    'user_id' => $_POST['uid'], 
    'ans_att' => implode(',',$_POST['ans']) 
    ); 
    $this->load->model('MyModel'); 
    $this->MyModel->insert_ans($data); 
} 

使用时只需插入功能模型,无需insert_batch 型号:

function insert_ans($data) { 

    $this->db->insert('tbl_answers', $data);   
} 
+0

这让我只存储测验中的一个值。我如何发布所有的值? –

相关问题