Hi Alex,
Also ich habe bisher die erste Methode angewandt. Die
Formulare schreiben in eine maximal zwei Tabellen, weshalb ich
lieber die zweite Methode anwenden würde.
Die 2 Methode ist besser!
Die Eingabefelder bleiben wie gesagt auch bei erfolgreichem
Speichern gefüllt, aber die Speicherung der Daten in die DB
könnte man ja dennoch überprüfen und einen Fehler ausgeben,
wenn die Formulare fehlerhaft ausgefüllt wurden.
Prinzipiel sollte man sich fragen inwieweit es Sinn macht überhaupt noch die alten Daten anzuzeigen, wenn der Eintrag erfolgreich war. Wirklich sinnvoll ist das ja nur bei Fehleingaben bzw. eine DB-Error, damit der User nicht alles neu einzugeben braucht und auch hier ist ein weiteres Vorgehen abhängig davon, wie du allgemein deine Anwendung aufgebaut hast, benutzt du für jede Seite bzw. deren Subpages ein eigenes Script (nicht schön) oder hast du ein Script für die Subpages in „switch case“ unterteilt (schöner)?
Der Primärschlüssel wird eh in einer SESSION-Variable
gespeichert. Bei einem Reload über Browser-Button oder zweiten
Absenden der Form wird überprüft, ob der Eintrag schon
vorhanden ist und nur geupdatet und nicht neu angelegt.
Kann man machen, hier ist die Frage, inwieweit möchte man DB-Zugriffe gering halten (ist halt abhängig von den Userzahlen), möchte man die Zugriffe gering halten, ist ein Session-Token eine schöne Alternative, denn dein Vorgehen funktioniert ja nur, wenn du den Primärschlüssel nicht auf autoincrement hast, (der Primärschlüssel sollte bevorzugt ein INT-Wert sein und kein String).
Ist das so in Ordnung?
Wie schon oben gefragt, ist das abhängig, wie du deine Anwendung aufgebaut hast. Grob, ohne deinen Aufbau zukennen, sage ich mal: Am besten ist, bei Erfolg rufst du eine neue Seite auf, mit der Erfolgsmeldung und evtl. den Daten die eingetragen wurden. Und sicherst noch ein 2mal versenden mit einem Token ab (Benutzerverhalten ist immer schwierig vorraus zusehen) Ein Bsp. dazu:
HTML:
…
PHP:
$\_SESSION['token'] = md5(session\_id().time());
$html= $this-\>getTemplate(DEIN\_FORM);
$html = str\_replace('{token}', $\_SESSION['token'], $html);
PHP-Formular senden:
if(isset($\_POST['token'])){
if(isset($\_SESSION['token']) AND ($\_POST['token']) == $\_SESSION['token']){
Führe transaction in DB aus....
if($success){
$\_SESSION['token'] = ''";
zeige Erfolgsmeldung...
else{
zeige Fehlermeldung.....Token bleibt erhalten
}
.....
}
}
Gruß XXD