如何将数组变量传递给控制器​​?

时间:2017-12-09 02:58:48

标签: codeigniter

我需要将一个数组变量从表单传递给控制器​​,以便将值保存到数据库中。

这是观点:

    <?php
            $i=1;

            foreach ($data->result() as $dt)  
            {                                                                               
            ?>
            <input type="text" value="<?php echo $i;?>" />
            <input type="text" name="name[]" id="name" value="<?php echo   $name;?>" />
            <?php
            $i++;
            }
            ?>

<button type="button" name="save" id="save" class="btn btn-mini btn-info"><i class="icon-save"></i>Save</button>​

这是javascript:

$(document).ready(function(){

$("#save").click(function(){

    var string = $("#my-form").serialize();
    $.ajax({
        type    : 'POST',
        url     : "<?php echo site_url(); ?>/the_site/site_value/save_name",
        data    : string,
        cache   : false,
        success : function(data){
            $.gritter.add({
                title: 'Info..!!',
                text: data,
                class_name: 'gritter-info'
            });
        }
    });

});

});

这是控制器:

public function save_name()
{
        $name = $this->input->post('name');//actually 'name' is 'name[]' from view.

        if (is_array($name))
        {
            foreach ($name as $name1 => $name2)
            {
                  $dt['person_name']     = $name2;
              }
          }

          $id['id_person'] = '001'; //this is just an example of id..

选择一个表及其选定的行...

 $q = $this->db->get_where("the_table",$id); 
        $row = $q->num_rows();
        if($row>0)
        {

1 个答案:

答案 0 :(得分:0)

在发布时,names数组看起来像这样(我使用microtime()生成一些随机名称仅用于示例):

Array
(
    [name] => Array
        (
            [0] => 0.33037500 1512871675
            [1] => 0.33040300 1512871675
            [2] => 0.33041700 1512871675
            [3] => 0.33043000 1512871675
            [4] => 0.33044300 1512871675
            [5] => 0.33045500 1512871675
            [6] => 0.33046800 1512871675
            [7] => 0.33048000 1512871675
            [8] => 0.33049100 1512871675
            [9] => 0.33050500 1512871675
            [10] => 0.33051700 1512871675
        )

)

你可以这样访问数组:$names = $this->input->post('name');(你已经在做了)。

然后你可以运行foreach:

foreach ($names as $name) {
    $q = $this->db->get_where("the_table", array('name' => $name));
    if ($q->num_rows() > 0) {
        $this->db->update('the_table', array('name' => $name), array('id' => $q->row()->id));
        echo "Name successfully updated";
    } else {
        $this->db->insert('the_table', array('name' => $name));
        echo "Name successfully saved";
    }
}

您必须检查每个名称是否存在。由于您只变量与name进行比较,因此您必须get_where名称相同。如果它不存在,则插入,如果存在,则使用给定的id进行更新。我高度建议您阅读query builder documentation因为您将字符串而不是数组直接传递给db函数。这不起作用。