контроллер получает неправильный идентификатор из представления при отправке формы в codeigniter

#php #bootstrap-4 #codeigniter-3

#php #bootstrap-4 #codeigniter-3

Вопрос:

Я довольно новичок в codeigniter и совсем новичок в PHP. Я хочу удалить запись из базы данных и каталога. данные удаляются из базы данных и каталога.когда я отправляю, удаление выполняется успешно, но удаление всегда выбирает последний элемент из базы данных таблиц для удаления, а не из идентификатора в представлении, которое я выбираю для удаления. Вот мой код

  1. view.php
 <?php foreach ($data as $row) : ?>
    <div class="modal fade" id="deleteModal<?= $row['id']; ?>" tabindex="-1" role="dialog" aria-labelledby="deleteModalLabel" aria-hidden="true">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="deleteModalLabel">Ready to delete?</h5>
                    <button class="close" type="button" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">×</span>
                    </button>
                </div>
                <div class="modal-body">
                    <?php echo form_open('admin/slider_delete'); ?>
                    <input type="text" name="id" id="id" value="<?= $row['id']; ?>">
                    <div class="form-group row">
                        <label for="slider_name" class="col-sm-3 col-form-label">Slider Name</label>
                        <div class="col-sm-9"><input type="text" class="form-control" name="slider_name" id="slider_name" value="<?= $row['slider_name']; ?>" readonly>
                        </div>
                    </div>
                    <div class="form-group row">
                        <label for="slider_image" class="col-sm-3 col-form-label">Image</label>
                        <div class="col-sm-9">
                            <div class="custom-file">
                                <div class="row">
                                    <div class="col-sm-12">
                                        <input type="hidden" class="form-control" id="slider_image" name="slider_image" value="<?= $row['slider_image']; ?>" readonly>
                                        <img src="<?= base_url('assets/img/slider/') . $row['slider_image']; ?>" id="image-preview" alt="image preview" class="img-thumbnail" style="width : 100px;height:60px;">
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    <br><br><br>Are you sure to delete this data?
                </div>
                <div class="modal-footer">
                    <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
                    <button type="submit" class="btn btn-primary">Update</button> </div>
                <?= var_dump($row); ?>
            </div>
        </div>
    </div>
<?php endforeach ?>
  
  1. controller.php
     public function slider_delete()
    {
        $id = $this->input->post('id');
        $slider = $this->input->post('slider_image');
        $data = [
            'slider_name' => htmlspecialchars($this->input->post('slider_name', true)),
            'slider_link' => htmlspecialchars($this->input->post('slider_link', true)),
            'text_active' => 1,
            'title_text' => htmlspecialchars_decode($this->input->post('title_text', true)),
            'description' => htmlspecialchars_decode($this->input->post('description', true)),
            'is_active' => 1
        ];
        echo var_dump($id, $data, $slider);
        die;
        $this->slider_model->delete($id, $data, $slider);

        $this->session->set_flashdata('massage', '<div class="alert alert-success" role="alert"> Slider has been delete!</div>');
        redirect('admin/slider');
    }
  
  1. model.php
     public function delete($id, $data, $slider)
    {
        $this->db->set($data);
        $this->db->where('id', $id);

        unlink(FCPATH . 'assets/img/slider/' . $slider);
        $this->db->delete('slider');
}
  

Комментарии:

1. Вы добавляете идентификатор строки в цикле. Таким образом, будут опубликованы только последние.

2. Вероятно, вы должны сделать каждую итерацию цикла своей собственной формой.

3. спасибо всем, я уже получил ответ, я забыл поместить </form> в представление … теперь все вернулось к нормальному удалению: D

Ответ №1:

Из вашего кода вы создаете новую форму для каждой строки, но не закрываете форму. Таким образом, переменная ID всегда является последней, установленной перед предполагаемым тегом закрытой формы. После строки

 <br><br><br>Are you sure to delete this data?
  

Добавить

 </form>
  

Затем проверьте свой код, который отображается в браузере. У вас должны быть теги открывающей формы, эквивалентные тегам закрывающей формы.