Bevor ich beginne, bitte beachten Sie, dass ich ziemlich neu bin.So löschen Sie XML-Knoten über ein HTML-Formular mit PHP
Ich habe einen Kalender, den ich schließlich Benutzer in der Lage sein möchte, Ereignisse, die in einer XML-Datei gespeichert sind, über ein HTML-Formular mit PHP hinzufügen, bearbeiten und löschen. Bisher habe ich es geschafft, dank der Tipps auf dieser Seite hinzuzufügen, aber ich habe Schwierigkeiten mit dem Löschen.
Ich möchte, dass der Benutzer den Namen des Ereignisses eingeben kann, das gelöscht werden soll, damit es gefunden und aus der XML-Datei entfernt werden kann.
Das Problem ist, dass, wenn ich ein Ereignis zum Löschen eingeben, das Formular nur Ereignisse in der umgekehrten Reihenfolge, dass sie eingegeben wurden, scheinbar von der Unterseite der XML-Datei gelöscht. Beispiel: Über das HTML-Formular gebe ich 4 Ereignisse ein. Ereignis 1, Ereignis 2, Ereignis 3, Ereignis 4.
Angenommen, ich möchte Ereignis 2 löschen. Ich benutze das Löschen-Formular, um Ereignis 2 zu löschen, aber Ereignis 4 wird gelöscht. Also versuche ich noch einmal Event 2 zu löschen und diesmal wird Event 3 gelöscht.
Jede Hilfe wird sehr geschätzt!
Vielen Dank.
Das ist, was ich habe:
XML
<calendar>
<event>
<name>Event 1</name>
<startdate>21-3-2016</startdate>
<enddate></enddate>
<starttime>14.41</starttime>
<endtime></endtime>
</event>
</calendar>
HTML
<form action="remove.php" method="post" name="remove" id="calendarEdit">
<input class="calendarInput" type="text" name="name" id="name">
<input type="submit" name="button" id="button" value="Delete">
</form>
Remove.php
$name = $_POST['name'];
$xml = new DOMDocument('1.0', 'utf-8');
$xml-> load('events.xml') ;
$xpath = new DOMXPath($xml);
foreach ($xpath->query("/calendar/event['name']") as $node);
{
$node->parentNode->removeChild ($node);
}
$xml->formatoutput - true;
$xml->save('events.xml');
header('Location: calendar.html');
exit();
Sie verwenden nie '$ name' in Ihrem Löschcode. Sie führen nur eine Schleife (falsch) über alle Ereignisse und versuchen, sie alle zu entfernen. –
Was soll ich verwenden? – HSwaff
wahrscheinlich etwas mehr wie '/ monatlich/event [text() = '$ name']' für die XPath-Abfrage ... –