Получение только записи массива в базу данных для динамического создания поля ввода, не полученные входные значения в Codeigniter - PullRequest
0 голосов
/ 10 сентября 2018

Здесь, чтобы получить массив значений String, я использовал динамически создаваемые поля ввода. Я не получаю никакого журнала ошибок, но после отправки получаю только запись массива ("[]") На контроллере я использовал foreach loop .

** При просмотре формы ** [Динамически создаваемое поле ввода] 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);
		}
	}

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

На вашем контроллере нужно исправить две вещи.

Во-первых, когда вы хотите извлечь значения из ввода, вы передаете только значение ключа, которое вы использовали в имени ввода. В вашем случае вы использовали интерфейс <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

Вместо этого используйте функцию count для $ sName или $ sNo. Прежде чем использовать функцию 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 или используете форму, или отправляете запрос или получаете запрос. Если это запрос get, используйте $ this-> input-> get ('key name');

Отладьте интерфейс и убедитесь, что используемая функция передает что-то в запрос.

0 голосов
/ 11 сентября 2018

ERROR - 2018-09-10 07:27:03 --> Severity: Warning --> count(): Parameter must be an array or an object that implements Countable

Произошла ошибка , потому что я не объявил массив для функции контроллера . И я изменил свой код, и он работает нормально .

Функция контроллера

//input value from input field
$sName = $this->input->post('name_ofpost');
$sNo  = $this->input->post('no_ofpost');
//declared the array  here
$vacancyDtls = array();
$vacancyDt = array();
//used the count function for array
if(is_array($sName) && is_array($sNo)) {
$count = count($sName);
for ($i=0; $i < $count; $i++)
{
$vacancyDt[$i] = array(
'name_ofpost' => $sName[$i],
'no_ofpost' => $sNo[$i]
);
}
}
//to make the json format to database 
$vacancyDtls = json_encode($vacancyDt); 

И вывод как [{"name_ofpost":"post1","no_ofpost":"25"},{"name_ofpost":"post2","no_ofpost":"100"},{"name_ofpost":"post 3","no_ofpost":"58"}]

Спасибо: Франсиско де Кастро

0 голосов
/ 10 сентября 2018

Пожалуйста, используйте ниже код. Система возвращает пустой массив, потому что вы использовали $ 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...