#php #bootstrap-4 #codeigniter-3
#php #bootstrap-4 #codeigniter-3
Вопрос:
Я довольно новичок в codeigniter и совсем новичок в PHP. Я хочу удалить запись из базы данных и каталога. данные удаляются из базы данных и каталога.когда я отправляю, удаление выполняется успешно, но удаление всегда выбирает последний элемент из базы данных таблиц для удаления, а не из идентификатора в представлении, которое я выбираю для удаления. Вот мой код
- 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 ?>
- 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');
}
- 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>
Затем проверьте свой код, который отображается в браузере. У вас должны быть теги открывающей формы, эквивалентные тегам закрывающей формы.