unlink() для удаления изображений с сервера вместе с удалением SQL

В настоящее время у меня есть таблица, в которой перечислены все «продукты», находящиеся в базе данных на моей странице. Рядом с каждым продуктом/списком есть флажок, поэтому вы можете удалить несколько продуктов одновременно. У меня есть функция удаления, которая хорошо работает с флажками, удаляя выбранные продукты из базы данных, но я не могу заставить работать вторую половину, которая является частью, которая должна войти в каталог сервера с именем «галерея» и удаление изображения, которое принадлежит продуктам, которые были удалены.

Когда кто-то нажимает кнопку удаления, он запускает этот код:

   //if form was submitted
   if ($submit && $submit == "Delete") {
        //escaping all of them for a MySQL query using array_map
        array_map ('mysql_real_escape_string', $allCheckBoxId);
        //implode will concatenate array values into a string divided by commas
        $ids = implode(",", $allCheckBoxId);
        //building query
        $deleteQuery = "DELETE FROM products WHERE `id` IN ($ids)";
        //running query
        mysql_query($deleteQuery);


            echo $ids;


        //BELOW IS THE PART THAT WILL NOT WORK
        //================================================

        //building query
        $deleteImgQuery = "SELECT * FROM products WHERE `id` IN ($ids)";


        while ($deleteImage = mysql_fetch_array($deleteImgQuery)) {

            $image_delete_id = $deleteImage['id'];
            $image_delete_image = $deleteImage['image'];


            $file= "../gallery/" . $image_delete_id . "/" . $image_delete_image;

            unlink($file);

            echo $file;

        }

   }

Он даже не будет выполнять часть «echo $file», что заставляет меня думать, что эта часть кода вообще не работает. Любая помощь?

ОБНОВЛЕННЫЙ КОД ПОСЛЕ СВОПА:

   //if form was submitted
   if ($submit && $submit == "Delete") {


        //escaping all of them for a MySQL query using array_map
        array_map ('mysql_real_escape_string', $allCheckBoxId);
        //implode will concatenate array values into a string divided by commas
        $ids = implode(",", $allCheckBoxId);


        //building query
        $deleteImgQuery = "SELECT * FROM products WHERE `id` IN ($ids)";


        while ($deleteImage = mysql_fetch_array($deleteImgQuery)) {

            $image_delete_id = $deleteImage['id'];
            $image_delete_image = $deleteImage['image'];


            $file= "../gallery/" . $image_delete_id . "/" . $image_delete_image;

            unlink($file);

            echo $file;

        }


        //building query
        $deleteQuery = "DELETE FROM products WHERE `id` IN ($ids)";
        //running query
        mysql_query($deleteQuery);


        echo $ids;


   }

person Catia    schedule 16.02.2012    source источник


Ответы (2)


Вам нужно выполнить $deleteImgQuery и получить ресурс mysql_fetch_array в качестве параметра при передаче строки. Измените следующие строки..

//building query
$deleteImgQuery = "SELECT * FROM products WHERE `id` IN ($ids)";
$res = mysql_query($deleteImgQuery);

while ($deleteImage = mysql_fetch_array($res)) {
// do
}
person monish    schedule 16.02.2012
comment
Это сработало спасибо! Хотя мне нужно было изменить эту часть while ($deleteImage = mysql_fetch_array($deleteImgQuery)) на while ($deleteImage = mysql_fetch_array($res)) Спасибо! - person Catia; 16.02.2012

Вам нужно поменять местами первую и вторую часть. Вы пытаетесь выбрать уже удаленные данные.

person Vessimir    schedule 16.02.2012
comment
$deleteQuery необходимо вызывать ПОСЛЕ $deleteImgQuery - person Vessimir; 16.02.2012
comment
Благодарю вас! Это все еще не работает. Все еще не будет даже эхо $file. Я обновлю код сейчас. - person Catia; 16.02.2012
comment
еще один комментарий: array_map ('mysql_real_escape_string', $allCheckBoxId) вернет экранированный массив, поэтому вам нужно $allCheckBoxId = array_map ('mysql_real_escape_string', $allCheckBoxId); - person Vessimir; 16.02.2012
comment
Спасибо, у меня все заработало благодаря вашему ответу и ответу выше! - person Catia; 16.02.2012