Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Групповое удаление фоторгафий в админке
 
 автор: Erema   (19.09.2009 в 14:32)   письмо автору
 
 

Здравствуйте!
Делаю админку для сайта
Есть страничка "view_cat.php" на которой циклом выводятся фотографии
вот так выглядит цикл:

<?php
    $result = mysql_query ("SELECT * FROM catalog_img WHERE cat='$cat' ORDER BY id DESC LIMIT $start, $num",$db);
    $myrow = mysql_fetch_array ($result);
    do{
    printf  
    ("
    <span id='box_gallery_admin'>
     <a href='../%s' class='highslide' onclick='return hs.expand(this)'>
     <img src='../%s' class='img_size' alt='изображение'>
     <span id='ar'><p>Артикул %s</p></span>         
     </a>
     <input name='id' type='checkbox' value='%s'>
     </span>",
    $myrow["img"], $myrow["img_small"], $myrow["id"], $myrow["id"]);
    }
    while($myrow = mysql_fetch_array ($result)); 
?>


Вот как выглядят фотографии

http://www.corona-jeans.ru/image/qs.jpg

Задача: Релизовать групповое удалениу изображений (установив несколько флажков для удаления фотографий наживаем 'Удалить выбранные фото' и те фотографии которые помечены удаляются (см фото http://www.corona-jeans.ru/image/qs.jpg ) )
(выполненная задача: реализовано удаление изображений по одной фотографии что занимает большое количество времени если пользователь захочет удалить к примеру 70 фотографий из 100)

Код файла обработчика:

<?php
include("lock.php");
include("block/bd.php");
if (isset($_POST['id'])) {$id=$_POST['id'];}
?>
.
.
.
.
.
<?php

$result = mysql_query ("SELECT * FROM catalog_img WHERE id='$id' ",$db);
$myrow = mysql_fetch_array ($result);
     
     
     if ( isset($id) )
     {           
           $result = mysql_query (" DELETE FROM catalog_img WHERE id='$id' ");
                 
                       if ($result == 'true')
                       {echo "<h1>Изображение успешно удалено!</h1>
                         <p>Вы можетевыбрать из левого меню категорию для следующего удаления фотографий</p>
                         <p>Либо нажать в верхнем меню <strong>КАТАЛОГ</strong> для добавления фотографий</p>
                         ";}
    
           unlink($_SERVER['DOCUMENT_ROOT']."/corona_jeans/".$myrow['img_small']) or die("Не могу удалить файл, либо вы успешно удалили проблемный файл");
           unlink($_SERVER['DOCUMENT_ROOT']."/corona_jeans/".$myrow['img']) or die("Не могу удалить файл, либо вы успешно удалили проблемный файл");
     }
     else
     {echo "<p>Ваше изображение не удалено!!</p>";}
?>


Вот при этом можно удалять фоторгафии с сервера "по одной"
Помогите пожалуйста реализовать групповое удаление фотографий. Заранее спасибо:)

  Ответить  
 
 автор: cheops   (19.09.2009 в 15:08)   письмо автору
 
   для: Erema   (19.09.2009 в 14:32)
 

Возможно вас заинтересует тема http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=427 (обсуждение нужного вам вопроса, начинается где-то с середины).

  Ответить  
 
 автор: Erema   (19.09.2009 в 15:50)   письмо автору
 
   для: cheops   (19.09.2009 в 15:08)
 

ой, начитался еще больше каши в голове стало

  Ответить  
 
 автор: cheops   (19.09.2009 в 16:38)   письмо автору
 
   для: Erema   (19.09.2009 в 15:50)
 

Суть сводится к тому, что атрибут флажков value назначаются ключи удаляемых фотографий. А само удаление осуществляется при помощи списка и конструкции IN.

  Ответить  
 
 автор: Erema   (19.09.2009 в 16:54)   письмо автору
 
   для: cheops   (19.09.2009 в 16:38)
 

>ключи удаляемых фотографий. А само удаление осуществляется при помощи списка и конструкции IN.
Эх... для меня это так ново)) Может на моем коде покажете как это реализовать?

  Ответить  
 
 автор: cheops   (19.09.2009 в 17:05)   письмо автору
 
   для: Erema   (19.09.2009 в 16:54)
 

Хорошо, давайте, сначала сформируем HTML-форму с флажками
<?php 
  $query = "SELECT * FROM catalog_img
            WHERE cat='$cat'
            ORDER BY id DESC
            LIMIT $start, $num";
  $result = mysql_query($query, $db); 
  if(!$result) exit("Ошибка выполнения SQL-запроса");
  if(mysql_num_rows($result))
  {
    echo "<form action='handler.php' method='post'>";
    while($myrow = mysql_fetch_array ($result))
    { 
      echo "<div>";
      echo "<img src='../$myrow[img_small]' class='img_size' alt='изображение'><br />";
      echo "<input type='checkbox' name='type[]' value='$myrow[id]'>";
      echo "</div>";
    }
    echo "<input type='submit'>";
    echo "</form>";
  }
?>

Теперь выбрав флажки а нажав на кнопку "Отправить" можно переправить PHP-скрипту handler.php список (id) тех изображений, которые необходимо удалить.

  Ответить  
 
 автор: cheops   (19.09.2009 в 17:11)   письмо автору
 
   для: Erema   (19.09.2009 в 16:54)
 

При этом обработчик handler.php может содержать следующий код
<?php 
  // Удалить сразу несколько записей можно при 
  // помощи запроса "DELETE FROM base WHERE id IN (1,3,5,7)" 
  // Получаем список отмеченных флажков 
  $type = $_POST['type']; 
  if(!empty($type)) 
  { 
    // Защита от SQL-инъекции
    for($i = 0; $i < count($type); $i++) $type[$i] = intval($type[$i]);
    // Удаляем изображение
    $query = "SELECT * FROM catalog_img
              WHERE id IN (".implode(",", $type).")"; 
    $img = mysql_query($query);
    if(!$img) exit("Ошибка выполнения SQL-запроса - ".mysql_error());
    if(mysql_num_rows($img))
    {
      while($result = mysql_fetch_array($img))
      { 
        if(!empty($result['img_small']) && file_exists($_SERVER['DOCUMENT_ROOT']."/corona_jeans/".$result['img_small']))
          @unlink($_SERVER['DOCUMENT_ROOT']."/corona_jeans/".$result['img_small']);
        if(!empty($result['img']) && file_exists($_SERVER['DOCUMENT_ROOT']."/corona_jeans/".$result['img']))
          @unlink($_SERVER['DOCUMENT_ROOT']."/corona_jeans/".$result['img']);
       }
    }
    // Теперь удаляем сами записи
    $query = "DELETE FROM catalog_img
              WHERE id IN (".implode(",", $type).")"; 
    if(!mysql_query($query)) exit("Ошибка удаления файлов");
  } 
?>

  Ответить  
 
 автор: Erema   (19.09.2009 в 18:13)   письмо автору
 
   для: cheops   (19.09.2009 в 17:11)
 

Спасибо Вам огромное! Вы мне очень помогли! Столько работал над этой проблемой и все ни как не мог справится)

  Ответить  
 
 автор: Erema   (20.09.2009 в 05:32)   письмо автору
 
   для: Erema   (19.09.2009 в 18:13)
 

А еще появился вопрос!
Как сделать так чтобы при нажатии на "удалить выбранные фото" страничка так скажем перезагружалась и мы видели после загрузки не обработчик а ту страничку с которой удаляли фото!?

  Ответить  
 
 автор: Erema   (20.09.2009 в 10:20)   письмо автору
 
   для: Erema   (20.09.2009 в 05:32)
 

Все уже сам решил проблему=)

  Ответить