在这里,我使用动态创建的输入字段来接收数组字符串值。我没有收到任何错误日志,但是仅提交了数组符号(“ []”)之后。在控制器上,我使用了 foreach循环。
**在查看表格时** [动态创建的输入字段]
在数据库接收到阵列符号时 [数据库阵列符号视图]
查看视图
$(document).ready(function()
{
var services_html = "<tr>"+
"<td><input name=\"name_ofpost[]\" class=\"form-control name_ofpost service_data\" type=\"text\" placeholder=\"<?php echo display('name_ofpost') ?>\"></td>"+
"<td><input name=\"no_ofpost[]\" class=\"form-control no_ofpost\" type=\"text\" placeholder=\"<?php echo display('no_ofvacy') ?>\" ></td>"+
"<td style=\"text-align:center\"><div class=\"btn btn-group\">"+
"<button type=\"button\" class=\"addMore btn btn-sm btn-success\">+</button>"+
"<button type=\"button\" class=\"remove btn btn-sm btn-danger\">-</button>"+
"</div></td>"+
"</tr>";
// add more field
$('body').on('click', '.addMore', function() {
$("#services").append(services_html);
});
// remove field
$('body').on('click', '.remove', function() {
$(this).parent().parent().parent().remove();
});
});
<?php echo form_open_multipart('jobupdate/dailyupdatejob/create','class="form-inner"') ?>
<div>
<tbody>
<tr>
<td>
<input name="name_ofpost[]" class="form-control name_ofpost service_data" type="text" placeholder="<?php echo display('name_ofpost') ?>">
</td>
<td>
<input name="no_ofpost[]" class="form-control no_ofpost" type="text" placeholder="<?php echo display('no_ofvacy') ?>">
</td>
<td style="text-align:center;">
<div class="btn btn-group"> <button type="button" class="addMore btn btn-sm btn-success">+</button>
<button type="button" class="remove btn btn-sm btn-danger">-</button>
</div>
</td>
</tr>
</tbody>
</div>
<button class="btn btn-success"><?php echo display('save') ?></button>
<?php echo form_close() ?>
在控制器上
<?php
public function create()
{
$this->form_validation->set_rules('jobtype_id', display('JS_job_type_name') ,'required');
$this->form_validation->set_rules('jobcategory_id', display('JS_job_category_name') ,'required');
$this->form_validation->set_rules('status', display('status') ,'required');
#-------------------------------#
$sName = $this->input->post('name_ofpost[]');
$sNo = $this->input->post('no_ofpost[]');
if(is_array($sName) && is_array($sNo)) {
$count = count($sName);
$vacancyDtls = array();
for($i=0;$i<$count;$i++) {
$vacDtls[$i] = array('name_ofpost' => $sName[$i],
'no_ofpost' => $sNo[$i]);
}
}
$vacancyDtls = json_encode($vacancyDtls);
#---------------------------------#
$data['newjobcreate'] = (object)$postData = [
'type' => $this->input->post('jobtype_id',true),
'category' => $this->input->post('jobcategory_id',true),
'vacancy_detail' => $vacancyDtls,
'created_date' => date('Y-m-d'),
'status' => $this->input->post('status',true),
];
#-------------------------------#
if ($this->form_validation->run() === true) {
if (empty($postData['job_main_id'])) {
if ($this->dailyupdatejob_model->create($postData)) {
$this->session->set_flashdata('message', display('save_successfully'));
} else {
$this->session->set_flashdata('exception',display('please_try_again'));
}
redirect('jobupdate/Dailyupdatejob/create');
} else {
$data['shorting_list'] = $this->job_bysorting_model->shorting_list();
$data['catagory_list'] = $this->jobcategory_model->catagory_list();
$data['content'] = $this->load->view('jobupdate/formoflistofjob',$data,true);
$this->load->view('padashboard',$data);
}
}
答案 0 :(得分:0)
请使用以下代码。系统返回空白数组,因为您使用了$ vacancyDtls = array()。
请使用以下代码,并让我知道。
$sName = $this->input->post('name_ofpost');
$sNo = $this->input->post('no_ofpost');
$vacancyDtls = array();
$count = count($sName);
for($i=0;$i<$count;$i++)
{
$vacDtls[$i] = array(
'name_ofpost' => $sName[$i],
'no_ofpost' => $sNo[$i]
);
}
$vacancyDtls = json_encode($vacancyDtls);
答案 1 :(得分:0)
您需要修复控制器上的两件事。
首先,当您想从输入中检索值时,仅传递在输入名称上使用的键值。在您的情况下,您在前端<input name="name_ofpost[]" {...}>
上使用过,因此您选择的密钥是name_ofpost
而不是name_ofpost[]
。
在从后输入中检索值的行中,从键名中删除[]
。
$sName = $this->input->post('name_ofpost');
$sNo = $this->input->post('no_ofpost');
第二,您在空数组上使用了每个
。$vacancyDtls = array(); //empty array
foreach($vacancyDtls as $vacDtls) {...} //there is nothing to foreach
请在$ sName或$ sNo上使用count函数。在使用count函数之前,需要确保该变量是一个数组,否则,您将收到此警告消息。您可以通过以下方式实现这一点:
// I assume you need both variables to be on the same size
if(is_array($sName) && is_array($sNo)) {
$count= count($sName);
$vacancyDtls = array();
//from here you add a for loop and extract the values from the input variables
for($i=0;$i<$count;$i++) {
$vacDtls[$i] = array('name_ofpost' => $sName[$i],
'no_ofpost' => $sNo[$i]);
}
} else {
//Make sure something came from the post or get resquest you just did from the front-end.
var_dump($this->input->post()); // will print every post parameter sent to the controller
var_dump($sName);
var_dump($sNo);
}
在else语句print_r或var_dump上,检查输入是否来自刚执行的请求,这是一种调试发送给控制器的内容的方法。
您的前端代码未显示您如何发出请求。目前尚不清楚您是要进行ajax调用还是使用表单,或者进行发布或获取请求。如果这是一个获取请求,请使用$ this-> input-> get('key name');
调试前端,并确保您使用的功能将某些内容传递给请求。