PHP / MySQL Удалить изображение из базы данных

0

У меня есть php script, который обрабатывает раздел admin/создание страниц для моего сайта. Все данные сохраняются в таблице базы данных с именем isadmin. Внутри этого script у меня есть форма загрузки изображения, которая добавляет изображения в отдельную базу данных, 'isgallery', а затем отображает их обратно в разделе script/admin. Теперь все это прекрасно работает, но я не могу удалить это изображение. Я знаю, что это удалит их, но я не могу заставить идентификатор изображения быть добавленным к вызову delete mysql. Похоже, что он не существует вне выражения while. (Кажется, существует проблема с распознаванием $_POST ['imagename'] после добавления изображений arrrghhh!).

Нижеприведенный код и любая помощь значительно оценены. S.

Это код, который удаляет:

if ($_POST['delGallery']=='1') {        
        $sql = "DELETE FROM isgallery WHERE id = ".mysql_real_escape_string($_POST['isgallery_id']);
        mysql_query($sql);
        //file_exists($galleryFileDir.'/'.$_POST['imagename']) ? unlink($galleryFileDir.'/'.$_POST['imagename']) : NULL;        
        //unset($_POST['imagename']);
    }

Это код для отображения и добавления изображений:

$galleryQuery=mysql_query("select * from isgallery where assoc_object = '".$_POST['id']."'");
            echo '<ul class="gallery">'. PHP_EOL;            
            while($galleryResult=mysql_fetch_array($galleryQuery)) {    

                echo '<li><img src="../../images/properties/gallery/'.$galleryResult['imagename'].'" width="120" height="120" class="image" /><br />
                      <label for="delGallery"><input type="checkbox" name="delGallery" value="1" /> Delete this image?</label><br />                                                       
                      <p>'.$galleryResult['id'].'</p>
                      <input type="hidden" name="isgallery_id" value="'.$galleryResult['id'].'" />
                      </li>    
                '. PHP_EOL;                        
            }    

            echo '</ul><br /><br />' . PHP_EOL;                                
            echo '<label for="galleryFile">Add Image (*.jpg / *.gif): </label><input type="file" name="galleryFile" value=""><br />
            '.($_POST['imagename'] ? '
            <label for="imagename"></label><img src="../../images/properties/gallery/'.$_POST['imagename'].'" width="120" class="image"><br />                
            <label for="delGallery"></label><input type="checkbox" name="delGallery" value="1" style="margin:0 0 0 7px;"> Delete this image?<br />
            ' : NULL).'    
Теги:

3 ответа

0
Лучший ответ

В вашем коде дисплея поместите $galleryResult['id'] в вашу форму:

<input type="hidden" name="isgallery_id" value="<?php echo $galleryResult['id'] ?>" />

Затем в коде удаления:

$sql = "DELETE FROM isgallery WHERE id = ".mysql_real_escape_string($_POST['isgallery_id']);

Примечания:

Чтобы удалить файл, имя файла должно быть сохранено в таблице isgallery. Возьмите имя из идентификатора записи. Не полагайтесь на имя, предоставленное пользователем.

Для ясности мой примерный код мало или вообще не требует проверки данных/дезинфекции. Обязательно проверяйте и удаляйте данные, вставленные в вашу базу данных.

  • 0
    Большое спасибо за ответ. Ваш ответ, кажется, работает, но он все еще не удаляет выбранное изображение, только последнее. Если у меня есть 5 изображений с одинаковым именем = "isgallery_id", то как он узнает, какое из них выбрать? Кажется, он не собирает «ценность». Попытка повторить $ _POST ['isgallery_id'], и он показывает пустым. Очень расстраивает.
0

в будущем не хранить изображения в базе данных, хранить их в папке и иметь базу данных только для своего пути и имени изображения. если вам когда-либо понадобится резервное копирование, вы не можете экспортировать свои таблицы с изображениями в них. и изображения становятся очень низкими в таблице.

  • 0
    Извинения, изображения хранятся в папке, только с именем файла в базе данных:)
0

Вам нужно будет восстановить изображения, прикрепленные к галерее, которую вы удаляете, до того, как вы удалите галерею. В псевдокоде:

$galleryID = (int)$_POST['galleryID'];
$result = do_query("SELECT imageID FROM ... WHERE (galleryID = $galleryID);");
while ($row = $result->fetchROw()) {
    delete_image($row['imageID']); // delete each image in the gallery
}
do_query("DELETE FROM ... WHERE (gallerID = $galleryID);"); // delete the gallery

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

  • 0
    Большое спасибо за ответ, хотя я не мог заставить это работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню