在Codeigniter中的数据库中的数组中插入数组
这与测验应用程序有关。问题从数据库中随机生成。用户通过单选按钮选择一个答案。答案与问题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
如何将数组存储到我的数据库中?
在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
我放弃了使用insert_batch的想法。我如何将所有的数组值存储在数据库中? $数据=阵列( \t 'q_id'=> $ _POST [ 'QID'] [0], \t 'USER_ID'=> $ _POST [ 'UID'] [0], 'ans_att'=> $ _POST ['ans'] [0] ); 我想通过数组迭代所有的问题和答案,然后将它们存储在数据库中。 –
@SahibUzZaman:你可以在这里使用循环的所有值 – devpro
我试图通过在数组中设置相同的变量的问题和答案,但我不能得到它迭代 –
您应该编码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后获取记录(); 我希望这段代码有帮助。
不能存储在数据库的阵列,使用转换数组字符串“内爆”功能
控制器:
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);
}
这让我只存储测验中的一个值。我如何发布所有的值? –
use like that'ans ['ans_att'] []'全部相同 – devpro