0

誰か助けてくれませんか。

ユーザーがアップロードした画像のギャラリーを表示できるこのページをまとめました。

最初のアップロード時に、物理イメージは次のファイル構造に保存されます。 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 Event」スクリプトの最後に以下を追加しました。

var doc = $(files.xml);
doc.find('file_name:src').remove();

残念ながら、特定のエラーは表示されませんが、ノードはファイルから削除されません。私は XML に関してはまったくの初心者なので、単純化しすぎているのかもしれません。

誰かがこれを見て、どこが間違っているのか教えてください。

多くの感謝と敬意

4

1 に答える 1

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 を元のファイルに保存して上書きします。

于 2012-05-11T13:44:24.010 に答える