Интересно, может ли кто-нибудь помочь мне, пожалуйста.
Я использую эту страницу, чтобы пользователи могли просматривать галерею загруженных изображений.
После загрузки изображения сохраняются в этом пути к файлу UploadedFiles/userid/locationid/image
, а сведения об изображении, т. е. имя, описание и т. д., сохраняются в файле XML с именем files.xml
, который находится в том же каталоге, что и изображения. Выдержка из этого показана ниже:
<?xml version="1.0" encoding="utf-8" ?>
- <files>
<file name="AC-0003749-Clark_145520.jpg" source="AC-0003749-Clark_145520.jpg" size="3873" originalname="AC-0003749-Clark_145520.jpg" description="No description provided" userid="1" locationid="1" />
</files>
Галерея предоставляет пользователю дополнительные функциональные возможности с помощью значка под каждым изображением, позволяющего удалить каждое изображение. Это делается с помощью следующего кода:
Событие нажатия значка
<script type="text/javascript">
Galleria.ready(function() {
this.$('thumblink').click();
$(".galleria-image").append(
"<span class='btn-delete ui-icon ui-icon-trash'></span>");
$(".btn-delete").live("click", function(){
var img = $(this).closest(".galleria-image").find("img");
// send the AJAX request
$.ajax({
url : 'delete.php',
type : 'post',
data : { image : img.attr('src') },
success : function(){
alert('Deleting image... ');
img.parent().fadeOut('slow');
}
});
return false;
});
});
</script>
delete.php — измененный код
<?php
if (!empty($_POST)) {
$image = $_POST['image'];
if (file_exists($image)) {
unlink($image);
}
}
$doc = new DOMDocument;
$doc->load('files.xml');
$thedocument = $doc->documentElement;
$list = $thedocument->getElementsByTagName('files');
$nodeToRemove = null;
foreach ($list as $domElement){
if ($attrValue == '$image') { $domElement->parentNode->removeChild($domElement); }
}
if ($nodeToRemove != null)
$thedocument->removeChild($nodeToRemove);
echo $doc->saveXML();
?>
Удаление физического образа работает нормально, но мне очень трудно понять, как удалить соответствующий дочерний узел. Хотя я не получаю сообщения об ошибке, узел не удаляется. Я получил некоторые рекомендации здесь с этого сайта о том, как это сделать, т.е. через PHP XML DOM, но, честно говоря, чем больше я об этом читаю, тем больше путаюсь. Я просто не могу уложиться в голове.
Мне просто интересно, может ли кто-нибудь взглянуть на это, пожалуйста, и дайте мне знать, где я ошибся.
Большое спасибо и с уважением
unlink()
на основе опубликованной переменной, такой как$image
, без проверки ее значения довольно опасно ... упражнение для читателя. 15.05.2012files.xml
относится к файламuserid
иlocationid
, значения которых используются для создания папок в моей структуре папок, то естьUploadedFiles/userid/locationid/files.xml
. Файл delete.php находится на самом верхнем уровне, поэтому доUploadedFiles
. Я думаю, мне придется поиграть с попыткой передать переменные сеанса «userid» и «locationid» в файл «delete.php». Большое спасибо и с уважением. 15.05.2012->saveXML()
не выполняет обратную запись в файл. 16.05.2012error_reporting(-1); ini_set('display_errors', 'On');
в начало вашего кода. Это должно дать вам хорошее представление о том, где искать. 16.05.2012