我有两个输入文本具有相同的参数,我想提交它并期望在我的数据库中影响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();
}
});
}
我认为问题是智能控制器能够从两个输入文本中获取数组。如果只插入一个输入文本,它已经可以工作
答案 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();
}