Vereinfachen Sie die Handhabung von Formularen

Sparen Sie Zeit, reduzieren Sie den Wartungsaufwand, vereinfachen Sie Ihren Code und tun Sie das alles, während Sie sich wie ein freakin 'Genie fühlen! In diesem Lernprogramm erfahren Sie, wie Sie Variablenvariablen, Nachschlag-Arrays und ein wenig clevere Programmierung verwenden, um die Handhabung von Formularen erheblich zu vereinfachen.


Variable Variablen, Methoden und Eigenschaften

Bevor wir uns mit der Verwendung eines Lookup-Arrays zu intensiv beschäftigen können, ist es wichtig, zuerst das Konzept der Variablenvariablen zu verstehen.

Was sind variable Variablen??

Variable Variable ist ein Begriff, der die Verwendung einer Variablen zum Deklarieren einer anderen Variablen beschreibt.

In der einfachsten Form könnte eine Variablenvariable folgendermaßen aussehen:

 $ foo = 'ein Wert!'; // Einen Anfangswert deklarieren $ bar = 'foo'; // Warten Sie, was ist los? echo $$ bar; // Heiliger Strohsack! Diese Ausgabe "Ein Wert!"

Warum sollten Sie sich interessieren??

Bei einem Proof-of-Concept wie im vorherigen Beispiel wirkt die Verwendung von Variablenvariablen wahrscheinlich ziemlich dumm und überkompliziert. Es gibt jedoch wirklich gute Gründe, sie in einigen Fällen einzusetzen.

Praktische Beispiele

Die verantwortungsbewusste Verwendung von Variablenvariablen kann die Menge an Code, die wiederholt werden muss, beispielsweise durch Konvertieren eines assoziativen Arrays in ein Objekt mit bereinigten Werten, drastisch reduzieren.

Beispiel ohne Variable Variablen

$ comment = new stdClass (); // Ein Objekt erstellen $ comment-> name = sanitize_value ($ array ['name']); $ comment-> email = sanitize_values ​​($ array ['email']); $ comment-> url = sanitize_values ​​($ array ['url']); $ comment-> comment_text = sanitize_values ​​($ array ['comment_text']);

Beispiel mit Variable Variablen

$ comment = new stdClass (); // Ein neues Objekt füreach erstellen ($ array als $ key => $ val) $ comment -> $ key = sanitize_values ​​($ val); 

Sehen Sie, wie viel einfacher das war? Und Sie können sich das Beispiel vorstellen ohne Variable Variablen würden aussehen, wenn das Array etwa 50 oder 100 Werte hätte.

HINWEIS: Mir ist bewusst, dass man auch verwenden könnte array_map () und das Array explizit als Objekt umwandeln, um dasselbe zu erreichen. Das ist nicht der Punkt. Wir illustrieren hier ein Konzept. Mitspielen.


Das Problem bei der Formularverarbeitung

Machen Sie die Formularverarbeitung zum Kinderspiel.

Da Sie nun wissen, wie Sie variable Variablen verwenden, können wir uns mit den Fleisch- und Kartoffelarten dieses Artikels beschäftigen. Die Idee ist, dass die Verwendung eines Lookup-Arrays anstelle von mehreren Controller-Dateien oder einer switch-Anweisung Ihnen eine Menge zusätzlicher Wartung erspart. wiederholter Code und Kopfschmerzen im Allgemeinen.

Um unser Konzept zu veranschaulichen, verwenden wir die Idee der Formularverarbeitung. Dies ist ein wesentlicher Aspekt der Webprogrammierung kann auch einer der langwierigsten Bereiche eines Projekts sein.

Nach einer Neubewertung Ihrer Codiergewohnheiten können Sie jedoch möglicherweise die Verarbeitung von Formularen zu einem Kinderspiel machen.

Häufig wird für jedes zu verarbeitende Formular eine eigene Datei erstellt oder eine switch-Anweisung verwendet. In diesem Abschnitt erfahren Sie, wie beide Lösungen implementiert werden können. Anschließend untersuchen wir eine Lösung mit Variablenvariablen und wie sie Ihre Projekte verbessern kann.

Ein Arbeitsbeispiel mit mehreren Formularverarbeitungsdateien

Eine häufig verwendete Methode zur Bearbeitung von Formularsendungen ist das Erstellen einer ganzen neuen Datei, um die Daten jedes Formulars separat zu behandeln.

Nehmen Sie zum Beispiel diese drei Formulare, die ein Benutzerkonto mit einem neuen Namen, einer neuen E-Mail-Adresse oder beiden aktualisieren:

Form 1

Formular 2

Formular 3

Jedes dieser Formulare verweist auf eine andere Verarbeitungsdatei. Wie sieht also jede dieser Dateien aus??

Bearbeitungsformular 1 (assets / inc / ex1-form1.php)

save_name (); // In diesem Beispiel geben Sie einfach einige Daten über das Echo des Formulars aus. "
Verarbeitungsdatei: ", $ _SERVER ['PHP_SELF']," \ n \ nMethodenausgabe:\ n ", $ output"
\ n ", '

Geh zurück

'; else die ('Ungültige Formularübermittlung');

Bearbeitungsformular 2 (assets / inc / ex1-form2.php)

save_email (); // In diesem Beispiel geben Sie einfach einige Daten über das Echo des Formulars aus. "
Verarbeitungsdatei: ", $ _SERVER ['PHP_SELF']," \ n \ nMethodenausgabe:\ n ", $ output"
\ n ", '

Geh zurück

'; else die ('Ungültige Formularübermittlung');

Bearbeitungsformular 3 (assets / inc / ex1-form3.php)

save_both (); // In diesem Beispiel geben Sie einfach einige Daten über das Echo des Formulars aus. "
Verarbeitungsdatei: ", $ _SERVER ['PHP_SELF']," \ n \ nMethodenausgabe:\ n ", $ output"
\ n ", '

Geh zurück

'; else die ('Ungültige Formularübermittlung');

Wie Sie deutlich sehen können, duplizieren die obigen Beispieldateien eine Menge Code. Erweitern Sie diese Option auf 15 Formulare auf einer Site, und Sie werden schnell feststellen, dass die Wartung zum Albtraum werden kann.

Die Kontoklasse

Wie Sie sehen, erstellen die Verarbeitungsdateien eine Instanz der Klasse CopterLabs_Account. Dies ist eine sehr einfache Klasse, die Informationen zu einer Formularübergabe ausgibt.

Hier ist der Code für die Klasse (assets / inc / class.coperlabs_account.inc.php):

 * @copyright 2011 Copter Labs * @license http://www.opensource.org/licenses/mit-license.html * @license http://www.gnu.org/licenses/gpl-3.0.txt * / class CopterLabs_Account public $ name = NULL, $ email = NULL; öffentliche Funktion save_name () $ this-> name = htmlentities ($ _ POST ['name'], ENT_QUOTES); Rückgabe "Methode:". __METHODE__ . "\ nName:". $ this-> name. "\ n";  public function save_email () $ this-> email = htmlentities ($ _ POST ['email'], ENT_QUOTES); Rückgabe "Methode:". __METHODE__ . "\ nEmail:". $ this-> email. "\ n";  public function save_both () $ this-> name = htmlentities ($ _ POST ['name'], ENT_QUOTES); $ this-> email = htmlentities ($ _ POST ['email'], ENT_QUOTES); Rückgabe "Methode:". __METHODE__ . "\ nName:". $ this-> name. "\ nEmail:". $ this-> email. "\ n"; 

Sie können diesen Code in Beispiel 1 auf der Demo-Seite ausprobieren.

Ein Arbeitsbeispiel mit einer einzelnen Verarbeitungsdatei und einer Switch-Anweisung

Eine andere beliebte Lösung für die Formularverarbeitung besteht darin, alle Verarbeitungsskripts in einer Datei zu konsolidieren und mithilfe einer switch-Anweisung zu bestimmen, was mit den Daten zu tun ist.

Der Switch-Ansatz verwendet im Allgemeinen einen Trick, bei dem eine versteckte Eingabe zu dem Formular hinzugefügt wird, das eine Aktion enthält, die bei der Übergabe auszuführen ist. Diese
Mit action wird dann festgelegt, was mit dem Formular geschehen soll.

Hier sind die gleichen drei Formulare von oben mit hinzugefügten Aktionen, die alle auf eine einzelne Verarbeitungsdatei zeigen:

Form 1

Formular 2

Formular 3

Und die neue Verarbeitungsdatei sieht folgendermaßen aus: (assets / inc / ex2-switch.php)

save_name (); brechen; // Formular-2-Bearbeitungsfall 'update-email': $ output = $ account_obj-> save_email (); brechen; // Formular 3-Behandlungsfall 'update-both': $ output = $ account_obj-> save_both (); brechen; // Wenn keine gültige Aktion gefunden wird, stimmt etwas nicht. Standardeinstellung: die ('Nicht unterstützte Aktion.');  // Für dieses Beispiel geben Sie einfach einige Daten über das Echo des Formulars aus. "
Verarbeitungsdatei: ", $ _SERVER ['PHP_SELF']," \ nAction: ", htmlentities ($ _ POST ['action'], ENT_QUOTES)," \ n \ nMethodenausgabe:\ n ", $ output"
\ n ", '

Gehen Sie zurück zu Beispiel 2

'; else die ('Ungültige Formularübermittlung');

Sie können dies in Aktion sehen, indem Sie Beispiel 2 auf der Demo-Seite besuchen. Dies ist eine deutliche Verbesserung gegenüber der Verwendung mehrerer Formulare, aber Sie können sehen, dass wir immer noch etwas Code duplizieren.

Darüber hinaus ist es eine persönliche Präferenz von mir zu vermeiden Schalter Aussagen, wann immer ich kann. Dies liegt daran, dass Schalter verwendet lose Vergleiche ('ein Faden' wird auslösen Fall 0 weil eine Zeichenfolge auswertet 0 wenn Sie es in eine Ganzzahl konvertieren) und ist äußerst leicht in Spaghetti-Code umzuwandeln.


Problembehebung: Lookup-Arrays und variable Variablen

Wie wir bisher gesehen haben, haben beide oben genannten Lösungen ihre Nachteile und erfordern doppelten Code. Stellen Sie sich vor, es gäbe ein Dutzend oder mehr Formulare auf der Website - nicht hübsch.

Um dieses Problem anzugehen, können wir ein Konzept namens a verwenden Array nachschlagen, welche die vom Formular übergebenen Aktionen einer für das Objekt aufgerufenen Methode zuordnet.

Ja, Sie können die Aktion als Methodennamen festlegen. Dies ermöglicht jedoch, dass eine falsche Formularübergabe eine öffentliche Methode aufrufen kann. Das Array zu einem Schlüssel-Wert-Paar zu machen, ist ein kleiner Schritt, um ohne viel zusätzlichen Aufwand etwas mehr Kontrolle hinzuzufügen.

Ein Arbeitsbeispiel mit einer einzelnen Verarbeitungsdatei und einem Lookup-Array

Anhand unserer Kenntnisse der Variablenvariablen von Beginn dieses Tutorials möchten wir unsere Demo so modifizieren, dass sie ein Lookup-Array verwendet.

Ändern Sie die drei Formulare so, dass sie auf eine neue Controller-Datei zeigen:

Form 1

Formular 2

Formular 3

Als nächstes stellen Sie die Verarbeitungsdatei zusammen, die die Formularübermittlung behandelt (assets / inc / ex3-lookup-array.php):

 'save_name', 'update-email' => 'save_email', 'update-both' => 'save_both'); // Stellen Sie sicher, dass der Array-Schlüssel vorhanden ist, wenn (array_key_exists ($ action, $ lookup_array)) verwendet wird. // Verwenden Sie Variablenvariablen, rufen Sie die richtige Methode auf und speichern Sie die Ausgabe. $ Output = $ account_obj -> $ lookup_array [$ action] ();  else die ('Nicht unterstützte Aktion.');  // Für dieses Beispiel geben Sie einfach einige Daten über das Echo des Formulars aus. "
Verarbeitungsdatei: ", $ _SERVER ['PHP_SELF']," \ nAction: ", htmlentities ($ _ POST ['action'], ENT_QUOTES)," \ n \ nMethodenausgabe:\ n ", $ output"
\ n ", '

Gehen Sie zurück zu Beispiel 3

'; else die ('Ungültige Formularübermittlung');

Überprüfen Sie dies auf der Demo-Seite, indem Sie die Formulare in Beispiel 3 ausprobieren.

Da wir die Aktion als Schlüssel im Array festlegen, verwenden wir array_key_exists () um sicherzustellen, dass die Aktion gültig ist. Dann verwenden wir den Wert, der der Aktion entspricht, als Methodennamen. Beachten Sie, dass wir hinter dem Wert die Klammern hinzugefügt haben, um sicherzustellen, dass er als Methode ausgeführt wird.

Die Hinzufügung des Lookup-Arrays hält den Code kurz, einfach und klar (sobald Sie sich mit variablen Variablen befassen).


Zusammenfassung

Bei verantwortungsvoller Verwendung können Lookup-Arrays das Aktualisieren und Verwalten Ihrer Skripte wesentlich einfacher machen, wenn Sie sie mit Variablenvariablen kombinieren.

Wie können Sie Lookup-Arrays und variable Variablen in Ihre Projekte integrieren, um die Wartung zu vereinfachen? Lass es mich in den Kommentaren wissen!