Вставить несколько строк в БД, используя одну форму - PullRequest
1 голос
/ 04 мая 2020

Я использую Codeigniter MVC Framework, я пытаюсь вставить 14 строк в БД. Кроме того, у меня есть 14 вызовов для модели в моем контроллере. Однако каким-то образом он вставляется только в воскресенье утром. Это почему? * Представление, которое я разместил, является лишь небольшой частью, которая повторяется каждый день (понедельник-воскресенье) и (утро, вечер).

Моя база данных выглядит следующим образом:

+ - ------- + --------- + -------- +

| день | время | user_id |

+ --------- + --------- + -------- +

| Воскресенье | утро | 1 |

+ --------- + --------- + -------- +

| Понедельник | вечер | 1 |

+ --------- + --------- + -------- +

Модель

public function saveFinalShifts($data) {

    $this->db->db_debug = FALSE;
    $error = NULL;
    if (!$this->db->insert_batch('final_shifts', $data)) {
        $error = $this->db->error();
    }
    return $error; 
}

controller

public function saveFinalShifts(){  

    $data = array();
    $dates = $this->input->post('date');
    $days = $this->input->post('day[]');
    $times = $this->input->post('time[]');
    $worker_names = $this->input->post('worker_name[]');

   if(is_array($dates)){
    foreach ($dates as $key => $date){
        $data[] =  array (
            'date' => $date,
            'day' => $days[$key],
            'time' => $times[$key],
            'worker_name' => $worker_names[$key],
            );
        }
   }
    $this->Shifts_model->saveFinalShifts($data);

}

View

<div class="warp">    
<?php echo form_open('Shifts/savefinalShifts'); ?>
<table class="manage">
<th>
                <input type="date" name="date[]">
</th>
<td>
                <input type="hidden" value="sunday" name="day[]">
                <input type="hidden" value="norning" name="time[]">
                <?php
                foreach ($sunday_morning as $shift):?>
                <br><label><input class="get_value" type="checkbox" name="worker_name[]" value="<?php       echo $shift['fullname'];?>">
                    <?php echo $shift['fullname'];
                    ?></label>
                <?php  endforeach;  ?>
            </td>
<td>
                <input type="hidden" value="monday" name="day[]">
                <input type="hidden" value="morning" name="time[]">
                <?php
                foreach ($monday_morning as $shift):?>
                <br><label><input class="get_value" type="checkbox" name="worker_name[]" value="<?php echo $shift['fullname'];?>">
                    <?php echo $shift['fullname'];
                    ?></label>
                <?php  endforeach;  ?>
            </td>
</table>

    <input type="submit" class="submit-btn" value=”send">
<div>

Это вывод, если я распечатываю массив данных:

Array
(
    [0] => Array
        (
            [date] => 2020-05-10
            [day] => sunday
            [time] => morning
            [worker_name] => Victoria 
        )

)  

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Все входящие сообщения, которые вы отправили, являются массивом, но вы просто выбираете первый элемент данных сообщения в (day, time, worker_name) с помощью [], как $this->input->post('day[]');. Попробуйте удалить [] и, дополнительно, переместите вызывающую модель saveFinalShifts() в оператор if, чтобы убедиться, что вы просто вызываете модель, когда $dates является массивом (или не пустым).

public function saveFinalShifts(){  
    $data = array();
    $dates = $this->input->post('date');
    $days = $this->input->post('day');
    $times = $this->input->post('time');
    $worker_names = $this->input->post('worker_name');

    if(is_array($dates) && !empty($dates)){  // make sure $dates is array and not empty []
       foreach ($dates as $key => $date){
          $data[] =  array (
            'date' => $date,
            'day' => $days[$key],
            'time' => $times[$key],
            'worker_name' => $worker_names[$key],
          );
       }
       $this->Shifts_model->saveFinalShifts($data);
    }
}
0 голосов
/ 04 мая 2020

Я думаю, что ошибка существует, потому что вы пишете query вне foreach loop в вашем controller function. Я написал исправленный код ниже, посмотрите, поможет ли это вам.

 if(is_array($dates)){
    foreach ($dates as $key => $date){
        $data =  array (
                    'date' => $date,
                    'day' => $days[$key],
                    'time' => $times[$key],
                    'worker_name' => $worker_names[$key],
                 );

         $this->Shifts_model->saveFinalShifts($data); //Move this line inside foreach loop
        }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...