Получение только записи массива в базу данных для динамического создания поля ввода, не полученных входных значений в Codeigniter

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

** Форма просмотра ** [Динамически создаваемое поле ввода] Получение только записи массива в базу данных для динамического создания поля ввода, не полученных входных значений в Codeigniter

В базе данных получено обозначение массива [представление нотации массива базы данных] Получение только записи массива в базу данных для динамического создания поля ввода, не полученных входных значений в Codeigniter

В форме просмотра

$(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);
		}
	}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
43
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

журнал ошибок - ERROR - 2018-09-10 07:27:03 --> Severity: Warning --> count(): Parameter must be an array or an object that implements Countable

altisbiswa 10.09.2018 07:29
Ответ принят как подходящий

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

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

altisbiswa 10.09.2018 08:18

Можете ли вы отредактировать свой вопрос и добавить тег формы? Какой метод вы используете в форме, публикации или получении? Можете ли вы var_dump $ this- & gt; input- & gt; post () и $ this- & gt; input- & gt; get () и опубликовать результаты здесь

Francisco de Castro 10.09.2018 08:56

Сэр, я отредактировал свой код. На контроллере и в разделе просмотра. Поскольку вы предлагаете использовать код, но не получили желаемых результатов,

altisbiswa 10.09.2018 11:06

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"}]

Благодарность: Франсиско де Кастро

Не могли бы вы отметить мой ответ как правильный? Я рад, что смог тебе помочь.

Francisco de Castro 11.09.2018 06:46

Я немного изменил ваш код и исправил его. Спасибо

altisbiswa 11.09.2018 07:44

Другие вопросы по теме