这与测验应用程序有关。问题是从数据库中随机生成的。用户通过单选按钮选择一个答案。答案以及问题ID和用户ID存储在数据库中。 一切都很好。
问题是我有一个数组,我想存储在我的数据库中。以下是代码。
观点:
xauthtoken
控制器:
<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);
}
如何将数组存储到我的数据库中?
答案 0 :(得分: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
答案 1 :(得分: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()获取记录之后; 我希望这段代码有用。
答案 2 :(得分:0)
您无法在db中存储数组,使用&lt; implode&#39;将数组转换为字符串功能
控制器:
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函数,无需insert_batch 型号:
function insert_ans($data) {
$this->db->insert('tbl_answers', $data);
}