对于动态创建输入字段,仅接收数据库的数组符号,而在Codeigniter中未接收到输入值

时间:2018-09-10 04:32:02

标签: php arrays database codeigniter dynamic

在这里,我使用动态创建的输入字段来接收数组字符串值。我没有收到任何错误日志,但是仅提交了数组符号(“ []”)之后。在控制器上,我使用了 foreach循环

**在查看表格时** [动态创建的输入字段] enter image description here

在数据库接收到阵列符号时 [数据库阵列符号视图] enter image description here

查看视图

$(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);
		}
	}

2 个答案:

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

调试前端,并确保您使用的功能将某些内容传递给请求。