2010-09-21 8 views
0

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

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

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

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).'  

ответ

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'], и он показывает пробел. Очень расстраивает. – ss888

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

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

0

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

+0

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

Смежные вопросы