• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Umsetzung: nach Löschen Erfolgsmeldung und Weiterleitung

rapid10

Mitglied
Hallo,

ich habe leider ein Umsetzungsproblem. Und zwar möchte ich einen Datensatz in einer MySQL-Datenbank löschen. Funktioniert tadellos.

Den Link generiere ich wie folgt:
PHP:
echo "<a href='".$_SERVER['SCRIPT_NAME']."?".$_SERVER['QUERY_STRING']."&delete=".$entry['id']."'>löschen</a>";
Zwischenfrage: Ist das so ok, oder greift sich da ein Profi an den Kopf?

Nun möchte ich, dass eine Erfolgsmeldung ausgegeben wird. Das ist nicht schwer, einfach echo und den Text schreiben. Nun bleibt aber leider der bspw. "&delete=12" in der URL vorhanden, wird nicht gelöscht. Wenn man jetzt den nächsten Datensatz löschen möchte, kommt es zum einem Problem, da zweimal der Parameter "delete" in der URL enthalten ist. Das möchte ich vermeiden, also header("Location: index.php").

Da aber bereits der Head, des HTML-Dokuments ausgegeben wurde, musst ich das so machen:
PHP:
ob_start();
header("Location: index.php");
ob_end_flush();
Ist das in Ordnung so, oder total verrückt programmiert? Einziges Problem: der Erfolgstext wird nicht einmal einen Bruchteil einer Sekunde angezeigt.

Wie könnte man diese Aufgabe am schönsten lösen?

Vielen Dank euch allen!
 
Werbung:
Zwischenfrage: Ist das so ok, oder greift sich da ein Profi an den Kopf?

Es gibt eine sehr starke Empfehlung, Operationen, die „Änderungen auf dem Server durchführen“ und die nicht bei zweimaligem Aufruf dasselbe Ergebnis liefern, als POST-Requests abzusenden.

- Hypertext Transfer Protocol - Wikipedia, the free encyclopedia

Ansonsten müsstest du dort aber mindestens noch das "&" maskieren ("&amp;"). (Was mit $_SERVER['QUERY_STRING'] so los ist, müsste ich jetzt auch erst nachgucken.)

Da aber bereits der Header, des HTML-Dokuments ausgegeben wurde

Ändere das. Führe den Code, der überprüft, ob eine Weiterleitung stattfinden soll, vor der ersten Ausgabe aus. (EVA-Prinzip.)

- EVA-Prinzip (Standardverfahren) - PHP.de Wiki
- EVA Prinzip - PHP Forum: phpforum.de

Einziges Problem: der Erfolgstext wird nicht einmal einen Bruchteil einer Sekunde angezeigt.

Wie könnte man diese Aufgabe am schönsten lösen?

Etwa wie hier im Forum beim Login mit einer speziellen „Zwischenseite“, die dann nach ein paar Sekunden weiterleitet.

Ansonsten ist es gar nicht so einfach, wenn du gleichzeitig den POST-Request killen willst. (Du braucht ja eine Weiterleitung, damit nicht beim Drücken von F5 die Nachricht „Daten erneut senden“ erscheint.) Eventuell mit einer Session, die speichert, ob eine „Hat geklappt“-Meldung angezeigt werden soll. Ist aber unter Umständen auch etwas übertrieben.
 
Danke für deine Antwort!

Wie könnte ich denn nun das Problem mit dem Link lösen? Einfach ein Formular machen, das per POST die ID überträgt, die gelöscht werden soll?
Und kennst du zufällig eine Klasse, die genau so ein Problem, mit header() und Funktionen, die vor jeglicher Ausgabe erfolgen müssen, behandelt bzw. komfortabel löst? Oder wie könnte ich das am einfachsten in mein Projekt implementieren?

Danke dir!
 
Werbung:
Also ich habe eine HTML-Klasse, die mir den head, body-Anfang und den footer des HTML-Dokuments ausgibt. Und da ich diese Methode in meiner index-Datei immer zuerst aufrufe, ist es schwer zu löschen und gleichzeitig umzuleiten.

PHP:
if(isset($_POST['doDelete']))
{
	$ACCOUNT->deleteItem($_POST['id']);
	echo "Löschen erfolgreich!";
	ob_start();
	header("Location: index.php?p=incomes");
	ob_end_flush();
}
 
Dann ruf die doch in deiner Index-Datei einfach nicht zuerst auf, sondern entscheide erst, ob du umleiten musst oder nicht.
 
Werbung:
Zurück
Oben