我想知道是否有人可以帮助我。
我正在使用this页面,允许用户查看其上传图片的图库。
上传后,图像将保存在此文件路径UploadedFiles/userid/locationid/image
中,图像的详细信息(即名称,描述等)将保存在名为files.xml
的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();
?>
删除物理图像工作正常,但我在解决如何删除相关子节点方面遇到了很大困难。虽然我没有收到任何错误消息,但节点未被删除。我从这个网站收到了一些关于如何解决这个问题的指导here,即通过PHP XML DOM,但说实话,我读的越多,我就越困惑。我似乎无法理解它。
我只是想知道是否有人可以看看这个,让我知道我哪里出错了。
非常感谢和亲切的问候
答案 0 :(得分:1)
要删除使用getElementsByTagName
找到的节点,您可以使用以下内容将其删除:
if (!empty($_POST)) {
$image = $_POST['image'];
if (file_exists($image)) {
unlink($image);
}
$doc = new DOMDocument;
$doc->load('files.xml');
// iterate over all tags named <file>
$list = $doc->getElementsByTagName('file');
foreach ($list as $domElement) {
// check whether attribute 'source' equals $image
if ($domElement->getAttribute('source') == $image) {
// remove the node
$domElement->parentNode->removeChild($domElement);
}
}
echo $doc->saveXML();
}