使用codeigniter从数据库和数据库中删除多个图像

时间:2015-02-05 05:47:16

标签: php arrays codeigniter

我刚创建了从数据库中删除图像的代码,也从图像存储的文件夹中删除了图像,但是当我单击"检查所有"时,只从数据库和文件夹中成功删除了一个图像。我做错了什么?这是我的视图使用复选框javascript:

<form name="indonesia" action="<?php echo site_url('admin/wallpaper/delete'); ?>" method="post">  

     <button type="submit" class="btn btn-danger" name="hapus" value="hapus">Hapus</button>

      <?php echo anchor('admin/wallpaper/tambah', 'Tambah Wallpaper');?>

    <table id="example" class="table table-striped table-bordered" cellspacing="0" width="100%">
    <thead>
        <tr>
             <th>
                <button type="button" class="btn btn-info" onClick="check_all()" >Check</button>
                <button type="button" class="btn btn-success" onClick="uncheck_all()" >Un-Check</button>
            </th>
            <th>id</th>
            <th>Keterangan</th>
            <th>Gambar</th>
            <th>Action</th>
        </tr>
    </thead>

        <tbody>
            <?php
            foreach ($ListWallpaper->result() as $row)
            {
            ?>
        <tr>
            <td><input type="checkbox" name="item[]" id="item[]" value="<?=$row->id_wall ?>"></td>
            <td><?=$row->id_wall ?></td>
            <td><?=$row->ket ?></td>
            <td><?=$row->wall ?></td>
            <td>
                <a href="<?php echo base_url() ?>admin/wallpaper/hapus/<?= $row->id_wall ?>" class="label label-success">Delete</a>

                <a href="<?php echo base_url() ?>admin/wallpaper/edit/<?= $row->id_wall ?>" class="label label-success">Update</a>
           </td>
        </tr>
       <?php  }  ?>
    </tbody>
</table>

</form>   

这是我的控制器

public function delete()
{

$ownerNames = $this->input->post('item');

foreach ($ownerNames as $ownerName => $k) {

 //echo "Array : " . $k . "<br/>";

$photo = $this->wallpaper_model->del_photo($k);

if ($photo->num_rows() > 0)
    {
        $row = $photo->row();

        $file_photo = $row->wall;

        echo "$file_name</br>";
        $path_file = 'image/wallpaper/';

        unlink($path_file.$file_photo);
    }

  $this->wallpaper_model->drop_photo($k);

  redirect('admin/wallpaper','refresh');
}
}

和我的模特

function del_photo($k)
            {
                $this->db->where('id_wall',$k);
                $query = $getData = $this->db->get('tabel_wall');
                        if($getData->num_rows() > 0)
                            return $query;
                        else
                            return null;
            }
  function drop_photo($k)
            {
            $this->db->where('id_wall',$k);
            $this->db->delete('tabel_wall');
            }

只有一个图像从文件夹和数据库中成功删除,但当我尝试echo "$file_name</br>";时,它会显示所有图像。我做错了什么?如果有人能指导我,我会很感激。

2 个答案:

答案 0 :(得分:1)

首先,我会设置一个从控制器到视图的图像数组,$data['wallpapers'] = array();用于您可能需要包含在route.php中的某些site_url $route['controller/update/(:any)'] = "controller/update/$1"

要删除所选图像,您可以在数组()中执行选定的帖子,然后在值复选框上输入名称=&#34;&#34;

免责声明:这只是一个例子。

public function index() {
    $k = $this->uri->segment(what ever); // Use uri segment is id example.com/image/1 = $this->uri->segment(2);

    $results = $this->model_name->del_photo($k);

    $data['wallpapers'] = array();

    foreach ($results as $result) {
      $data['wallpapers'][] = array(
       'id_wall' => $result['id_wall'],
       'update' => site_url('controllername/update' .'/'.  $result['wall_id']),
       'ket' => $result['ket']
      );
    } 

    $data['delete'] = site_url('controller/function');

    $selected = $this->input->post('selected');

    if (isset($selected)) {
        $data['selected'] = (array)$selected;
    } else {
        $data['selected'] = array();
    }

    $this->load->view('your list', $data);
}
public function update() {
   //update info here
}

public function delete() {

    $selected = $this->input->post('selected');

    if (isset($selected)) {
        foreach ($selected as $image_id) {

          $wall_id = $image_id

            $this->db->query("DELETE FROM " . $this->db->dbprfix . "TABLENAME WHERE wall_id = '" . (int)$wall_id . "'");

        }
    }   

}

查看

从控制器添加了echo delete作为站点url。

<form action="<?php echo $delete;?>" method="post">

<table>

<thead>
<tr>

 <td style="width: 1px;" class="text-center"><input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" /></td>

 <td>Update</td>    
 </tr>

</thead>
<tbody>



<?php if ($wallpapers) { ?>

<?php foreach ($wallpapers as $wallpaper) { ?>

<td class="text-center"><?php if (in_array($wallpaper['id_wall'], $selected)) { ?>

<input type="checkbox" name="selected[]" value="<?php echo $wallpaper['id_wall']; ?>" checked="checked" />

<?php } else { ?>

<input type="checkbox" name="selected[]" value="<?php echo $wallpaper['id_wall']; ?>" />

<?php } ?>

</td>
<td><a href="<?php echo $update; ?>">Update</a></td>

<?php } ?>

<?php } ?>



</tbody>

</table>

</form>

模型

function del_photo($k) {

$this->db->where('id_wall',$k);

$query = $this->db->get('table_name');

if($query->num_rows() > 0) {

    $return = $query->result_array();

} else {

    return false;
}

}

答案 1 :(得分:0)

在控制器中,将重定向指令移到foreach循环之外。