jQuery’s .serialize() mit PHP verarbeiten

Als ich noch ein jQuery-Neuling war und HTML-Formulare per AJAX abschicken wollte, habe ich mir rückblickend das Leben ziemlich schwer gemacht. Für jedes einzelne input, select oder textarea – Tag wurde eine ID vergeben, welche dann in der Javascript-Datei den entsprechenden Wert des Feldes ausgelesen hat und an den jQuery- $.post() Query weitergegeben hat. Das hat natürlich funktioniert, war aber wie gesagt nicht sehr klug & pflegeleicht. Vor allen bei größeren Formularen kam ein aufgeblähter Quelltext zu Stande, der natürlich auch noch getippt werden musste.

Es sah ungefähr folgendermaßen aus:

Abrufen und absichern musste ich die einzelnen Variablen dann in der PHP-Datei auch nochmal. Im Beispiel sind es drei Eingabefelder mit nummerierten Namen, wie es mit 50 oder mehr Eingabefeldern aussieht, könnt ihr euch ja denken.

Zum Glück bietet jQuery die serialize()-Funktion an, mit der es möglich ist, ganze Formulare abzurufen und in eine POST- oder GET-Variable zu packen. Dadurch spart man Quellcode und vor allem Zeit; ich möchte euch das ganze wieder an Hand eines Beispiels demonstrieren.

Wie ihr seht besitzen die input-Tags in diesem Beispiel keine IDs mehr, sondern wie bei Standardformularen auch üblich, das „name“-Attribut. Dafür hat das form-Tag nun die ID „myform“ erhalten, da wir in der folgenden Javascript-Datei nicht mehr die einzelnen Eingabefelder, sondern das ganze Formular ansprechen möchten.

Nun kommen in der ajax.php (also der PHP-Datei, an der wir unseren Request abschicken) keine einzelnen Variablen mehr an, sondern ein Array von Variablen.

Okay, so einfach ist es dann doch nicht. Es handelt sich nämlich noch nicht um einen ganz normalen PHP-Array, sondern einen String, der Array-Informationen erhält. Vielleicht kennt ihr dieses Vorgehen schon von PHP. Wenn ihr einen Array in einer Datenbank speichern möchtet, müsst ihr ihn erst mit serialize() in einen String verwandeln. Beim Auslesen aus der Datenbank kann der String wieder per unserialize() in ein normales PHP-Array verwandelt werden.

Bei dem von jQuery verwandelten Arrays greift die PHP-Funktion unserialize() leider nicht, hier müssen wir auf ein anderes Bordmittel zurückgreifen:

Das ist auch schon das ganze Geheimnis. Wenig Quelltext, dafür große Wirkung und eine wahre Zeitersparnis. Ich empfehle bei der Arbeit mit Datenbanken jedoch noch, den von parse_str() generierten Array durch eine foreach()-Schleife zu jagen und damit abzusichern.


Deprecated: Directive 'allow_url_include' is deprecated in Unknown on line 0