我想知道是否有人可以帮助我。
我整理了this页面,该页面允许用户查看其上传图片的图库。
初次上传时,物理图像保存在以下文件结构中:
UploadedFiles/userid/locationid/image
和图像的详细信息,即描述等保存在名为files.xml
的xml文件中,该文件与物理图像位于同一目录中。
我现在正在努力让用户能够删除这些图像。
通过每张图片下方的删除图标,我很乐意在一些帮助下将以下内容放在一起,成功删除了物理图像。
'删除图标Onclick事件'
<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);
}
}
?>
更新了'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){
$attrValue = $domElement->getAttribute('file_name');
if ($attrValue == 'image') {
$nodeToRemove = $domElement;
}
}
if ($nodeToRemove != null)
$thedocument->removeChild($nodeToRemove);
echo $doc->saveXML();
?>
我遇到的问题是从xml文件中删除xml节点。我在下面提供了XML文件的摘录。
<?xml version="1.0" encoding="utf-8" ?>
- <files>
<file name="stag.jpg" source="stag.jpg" size="21341" originalname="stag.jpg" description="No description provided" userid="1" locationid="1" />
</files>
我已经做了很多关于如何解决这个问题的研究,发现jQuery有自己的命令,即jQuery.remove
,我认为它可以删除节点。在简短的教程之后,我在“Onclick事件”脚本的末尾添加了以下内容:
var doc = $(files.xml);
doc.find('file_name:src').remove();
不幸的是,虽然我没有收到特定的错误,但是没有从文件中删除该节点。对于XML来说,我是一个完全的初学者,所以也许我太简单地看待这个了。
我只是想知道是否有人可以看看这个,让我知道我哪里出错了。
非常感谢和问候
答案 0 :(得分:1)
这是因为JavaScript(JQuery)在内存中加载XML DOM,然后在删除节点时 它会从内存中的xml doc(对象)中删除。
它不会从物理XML文件中删除。
JS在沙箱浏览器环境中运行,无法更改系统上的本地文件。 如果你试图从远程服务器加载xml,那么这是一个非常糟糕的主意。
来自远程服务器的XML文件作为临时文件下载,然后当您再次加载XML时,会创建内存中的DOM,并从中删除该节点。
因此,如果您想要更改实际文件, 您将需要使用AJAX并向服务器发送一些HTTP请求以对物理文件执行相同的操作。
<强>更新强>:
查看本教程 http://www.phpeveryday.com/articles/PHP-XML-Removing-Node-P415.html
并尝试在delete.php中加载xml文件并从中删除相应的节点,然后将此xml保存回原始文件,该文件将被覆盖。