Здесь для получения значений массива String я использовал динамически созданные поля ввода. Я не получаю журнал ошибок, но после отправки получается только нотация массива ("[]"). На контроллере я использовал цикл 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);
}
}
Пожалуйста, используйте приведенный ниже код. Система возвращает пустой массив, потому что вы использовали $ 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);
Вам нужно исправить две вещи на вашем контроллере.
Во-первых, когда вы хотите получить значения из ввода, вы передаете только значение ключа, которое вы использовали в имени ввода. В вашем случае вы использовали <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. Прежде чем использовать функцию подсчета, вам необходимо убедиться, что переменная является массивом, иначе вы получите это предупреждающее сообщение, которое вы получили. Вы можете сделать это следующим образом:
// 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');
Отладьте интерфейс и убедитесь, что используемая функция передает что-то в запрос.
Я использую единственную форму для вставки значений, а не AJAX. Кроме того, я пытаюсь использовать тот код, который вы мне предлагаете.
Можете ли вы отредактировать свой вопрос и добавить тег формы? Какой метод вы используете в форме, публикации или получении? Можете ли вы var_dump $ this- & gt; input- & gt; post () и $ this- & gt; input- & gt; get () и опубликовать результаты здесь
Сэр, я отредактировал свой код. На контроллере и в разделе просмотра. Поскольку вы предлагаете использовать код, но не получили желаемых результатов,
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"}]
Благодарность: Франсиско де Кастро
Не могли бы вы отметить мой ответ как правильный? Я рад, что смог тебе помочь.
Я немного изменил ваш код и исправил его. Спасибо
журнал ошибок -
ERROR - 2018-09-10 07:27:03 --> Severity: Warning --> count(): Parameter must be an array or an object that implements Countable