Ich habe ein relativ umfangreiches PHP-Formular (ca. 30 Input-Felder bzw. Textareas), welches beim Öffnen Daten aus einer MySQL-Datenbank liest und die vorhandenen Felder entsprechend füllt. Der jeweils angemeldete User kann hier falsch hinterlegte Daten ändern und per Submit-Button mittels einer angepassten Formmailer.php gesendet. Da (zumindest die Textareas) odt mit mehreren Zeilen Text gefüllt sind ist es mir zu lästig alle Daten manuell zu prüfen. Somit hätte ich gerne (möglichst ohne Javascript) eine Prüf-Routine eingebaut, welche letztendlich nur die geänderten Feld-Inhalte übermittelt. Alle nicht geänderten Felder sollen den Wert "" (leer) erhalten.
Nur geänderte Formular-Feld-Inhalte senden
Einklappen
X
-
Was willsten damit bezwecken? Willst du "nur die geänderten" Daten in die Datenbank schreiben? Dann is die Prüfung doch voll sinnlos. Ändere einfach alle Daten in der Datenbank, diejenigen die nicht verändert wurden sind ja dann mit den vorherigen identisch.Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.
Kommentar
-
HI
lass doch vor dem versenden prüfen ob die inhalte gleich sind.
indem du dir z.b. die felder holst und dir nochmal die vorherigen Werte holst (haste da ja noch in der DB).
Wenn beide gleich sind, dann wird das feld nicht gesendet.
ODER:
du machst zu jedem Feld noch ein verstecktes feld mit z.b. einem hashwert (oder nochmal dem original-wert).
Das kannste dann vor dem versenden auch noch einmal prüfen.
PHP > 5
http://de3.php.net/manual/de/function.hash.php
PHP < 5
http://de3.php.net/manual/de/function.crc32.php
http://de3.php.net/manual/de/function.sha1.php
http://de3.php.net/manual/de/function.md5.php
Und falls du Benutzern nicht so richtig traust, kannst die Daten sonst ja auch in der Session speichern.
Ich persönlich würde wohl zur ersten Variante greifen (Daten vorm senden prüfen mit nochmaliger DB-Abfrage ob sie sich geändert haben)
gruss
igloZuletzt geändert von kapitaeniglo; 08.09.2007, 11:04.
Kommentar
-
Deine erste Lösung habe ich schon vor gehabt. PHP 5 liegt bei diesem Projekt nicht vor. Ich dachte es geht eleganter. Die Daten werden (wie oben beschrieben) nicht wieder in der Datenbank gespeichert sondern aus Sicherheit nur als e-Mail übermittelt. Der Mitarbeiter trägt dann die geänderten Daten händisch in die Datenbank ein. Die ganzen ausgelesenen Variablen, welche das Formular zunächst füllen liegen ja noch vor. Aber wie "hole" ich vor dem Senden die "aktuellen" Feld-Inhalte um diese nochmals vor dem Senden mit den Datenbank-Werten zu vergleichen?Zuletzt geändert von Overtone; 08.09.2007, 11:12.
Kommentar
-
Wieso klientseitig?
Das ganze wird nach absenden des formulars auf der verarbeitenden seite gemacht. Serverseitig.
1. Hole alle alten Daten aus der DB
2. Vergleiche mit den Daten aus dem Form
2. ->ggf. speichere geänderte Daten in ein array o.ä.
3. sende nur die veränderten Daten per E-Mail
Fertig!
BTW: Richtig wäre es, die geänderten Daten wohl in der DB zu speichern und nur noch von einem Mitarbeiter bestätigen zu lassen.
Kommentar
-
Hi
penizilin:
sollte heissen PHP neuer als Version 5 und PHP Version älter als Version 5
@TE:
als Tipp:
Speicher die geänderten Daten doch einfach in einr Extrazeile in der DB (also als weitere EIntrag). Wen sie bestätigt wurden, ersetze den Aten Eintrag durch den neuen.
Spart viel abtippen
Kommentar
Kommentar