Невозможно получить данные массива из элементов формы в цикле в CodeIgniter - PullRequest
0 голосов
/ 21 октября 2018

Итак, у меня есть эта форма:

<?php echo flash_message_success('status_msg'); ?>

<?php echo form_open('students/mark_attendance/'.$session.'/'.$term.'/'.$class_id); ?>  

    <input type="checkbox" id="toggle_all" data-toggle="toggle" data-on="All Present" data-off="All Absent" data-onstyle="success" data-offstyle="danger" />

    <?php
    $i = 0;
    foreach ($students as $s) {

        $student_id = $s->id; ?>

        <input type="hidden" name="student_id[]" value="<?php echo $student_id; ?>" />

        <input class="bulk_select_present" type="radio" name="status[<?php echo $i; ?>]" value="Present" />Present

        <input class="bulk_select_absent" type="radio" name="status[<?php echo $i; ?>]" value="Absent" />Absent

        <input type="date" class="form-control" name="date" value="<?php echo set_value('date'); ?>" required />

        <button class="btn btn-success" type="submit">Mark Attendance</button>

<?php echo form_close() //mark_attendance ?>

И эта функция обрабатывает мою форму:

public function attendance($session, $term, $slug) {
        $class_details = $this->common_model->get_class_details_by_slug(school_id, $slug);
        $page_title = 'Attendance: ' . $class_details->class;
        $this->admin_header($page_title, $page_title);  
        $data['session'] = $session;
        $data['term'] = $term;
        $data['class_id'] = $class_details->id;
        $data['slug'] = $slug;
        $data['students'] = $this->common_model->get_students_list_by_class($class_details->id);
        $this->load->view('admin/students/attendance', $data);
        $this->admin_footer();
    }


public function mark_attendance($session, $term, $class_id) {
        $this->form_validation->set_rules('date', 'Date', 'trim|required');
        $this->form_validation->set_rules('student_id[]', 'Student ID', 'trim');

        $student_id = $this->input->post('student_id', TRUE);
        $status = $this->input->post('status', TRUE);
        $date = $this->input->post('date', TRUE);

        $slug = $this->common_model->get_class_details($class_id)->slug;

        if ($this->form_validation->run()) {

            for ($i = 0; $i < count($student_id); $i++) {
                $d_id = $student_id[$i];
                $d_status = $status[$i];

                //check if student was marked absent or absent
                if ($d_status == 'Present') {
                    $this->students_model->mark_student_present($session, $term, $class_id, $d_id);
                } else {
                    $this->students_model->mark_student_absent($session, $term, $class_id, $d_id);
                }
            }
            $this->session->set_flashdata('status_msg', "Attendance marked successfully");
            redirect('students/attendance/'.$session.'/'.$term.'/'.$slug);

        } else {
            $this->attendance($session, $term, $slug); //reload page with validation errors
        }   
    }

Проблема в том, что данные не будут отправлены вбаза данных (моя модель работает нормально, я проверил ее).Некоторые проверки показали, что $student_id не анализируется как массив (я попытался проверить с помощью функции is_array, и она вернула false).У меня нет объяснения этому поведению, я сделал аналогичную реализацию в другом модуле, и она отлично работает.Я практически вывернул функцию наизнанку, но проблема сохраняется.Интересно, что я делаю не так?Буду признателен, если кто-нибудь укажет мне правильное направление.

Примечание. Выше приведен упрощенный вариант кода, я удалил то, что, по моему мнению, не нужно для этого вопроса.

1 Ответ

0 голосов
/ 22 октября 2018

вы не можете отобразить массив в php.Предлагаемый способ заключается в том, что вы должны преобразовать массив в объект json, а затем сохранить объект json в виде строки в скрытом поле, после чего при отправке формы следует декодировать объект json, а затем получить массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...