У меня есть 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).'
В вашем коде дисплея поместите $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. Возьмите имя из идентификатора записи. Не полагайтесь на имя, предоставленное пользователем.
Для ясности мой примерный код мало или вообще не требует проверки данных/дезинфекции. Обязательно проверяйте и удаляйте данные, вставленные в вашу базу данных.
в будущем не хранить изображения в базе данных, хранить их в папке и иметь базу данных только для своего пути и имени изображения. если вам когда-либо понадобится резервное копирование, вы не можете экспортировать свои таблицы с изображениями в них. и изображения становятся очень низкими в таблице.
Вам нужно будет восстановить изображения, прикрепленные к галерее, которую вы удаляете, до того, как вы удалите галерею. В псевдокоде:
$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
Если вы сначала удалите галерею, вы потеряли свои записи о том, какие изображения находятся в этой галерее. Подумайте об этом как о займе, который стреляет в заемщика, прежде чем требовать вернуть деньги.