在同一参数中提交多个值

时间:2018-04-15 18:18:47

标签: php codeigniter

我有两个输入文本具有相同的参数,我想提交它并期望在我的数据库中影响2行

视图

HTML

'<input name="campaign_name" value="campaign_name_1"  class="form-control" type="text">'
'<input name="campaign_name" value="campaign_name_2"  class="form-control" type="text">'

控制器

    public function ajax_update()
    {
        $campaign_name=$this->input->post('campaign_name');
        {
        $data = [

                'campaign_name' => $campaign_name,

                ];
    }
            $insert = $this->cs->save($data);

        echo json_encode("status" => TRUE));
    }

模型

    public function save($data)
    {
        $this->db->insert($this->table, $data);
        return $this->db->affected_rows();
    }

html中的ajax

function edit_cs(id)
{
    save_method = 'update';
    $('#form')[0].reset(); 
    $('.form-group').removeClass('has-error'); 
    $('.help-block').empty(); 


    $.ajax({
        url : "<?php echo site_url('cs/ajax_edit/')?>/" + id,
        type: "GET",
        dataType: "JSON",
        {


// the data came from this "dataa"
dataa = [{ campaign_name: "eedfefs",status: 1},
{campaign_name:"aarar",status:2}];
console.log(dataa);

for (var i = 0; i < dataa.length; i++) {
            var campaign_name = dataa[i].campaign_name;
            var badges = document.createElement('div');
            badges.className = 'badges';
            badges.innerHTML =

                '<input name="campaign_name[]" value="'+campaign_name+'"  id="campaign_name"class="form-control" type="text">';

                    document.getElementById('case2').appendChild(badges);


 }


                        $('#modal_form').modal('show'); 
                        $('.modal-title').text('Call Action'); 
             }
        }

    });
}


function save()
{


    var url = "<?php echo site_url('cs/ajax_update')?>";
    $.ajax({
        url : url,
        type: "POST",
        data: $('#form').serialize(),
        dataType: "JSON",
        success: function(data)
        {

            if(data.status) //if success close modal and reload ajax table
            {
                $('#modal_form').modal('hide');
                reload_table();
            }


    });
}

我认为问题是智能控制器能够从两个输入文本中获取数组。如果只插入一个输入文本,它已经可以工作

2 个答案:

答案 0 :(得分:0)

您不能使用具有相同名称的输入,它会被重读。 您可以在名称之后加上[]使它们成为数组, 例子:

<input name="campaign_name[]" value="campaign_name_1"  class="form-control" type="text">
<input name="campaign_name[]" value="campaign_name_2"  class="form-control" type="text">

带有'campaign_name_1'值的第一个输入将作为第一个索引(0)位于数组中,第二个输入将是下一个索引等等。

echo $_POST['campaign_name'][0];
echo $_POST['campaign_name'][1];

将回显

campaign_name_1
campaign_name_2

在AJAX功能中,你应该以同样的方式对待。

答案 1 :(得分:0)

如果您想同时为每个广告系列生成一行并获得适当数量的affected_rows(),则需要使用insert_batch()

首先,您需要遵循pradeeps的答案并将输入正确定义为数组:

'<input name="campaign_name[]" value="campaign_name_1"  class="form-control" type="text">'
'<input name="campaign_name[]" value="campaign_name_2"  class="form-control" type="text">'

其次,您需要为批量插入正确格式化输入数组:

public function ajax_update() {
    $campaign_name = $this->input->post('campaign_name');
    if (!empty($campaign_name)) {
        $data = array();
        foreach ($campaign_name as $val) {
            $data[]['campaign_name'] = $val;
        }
        $rows = $this->cs->save($data); // will return proper num of affected rows;
        echo json_encode(array("status" => TRUE));
    } else {
        echo json_encode(array("status" => FALSE));
    }
}

并对save()方法进行小修改:

public function save($data)
    {
        $this->db->insert_batch($this->table, $data);
        return $this->db->affected_rows();
    }