在Codeigniter中的数据库中的数组中插入数组

时间:2016-11-08 07:24:46

标签: php codeigniter

这与测验应用程序有关。问题是从数据库中随机生成的。用户通过单选按钮选择一个答案。答案以及问题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);        
}

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

3 个答案:

答案 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);        
}