Anzeige
Tutorialbeschreibung

Umgang mit Formularen und $_POST-Variablen

Umgang mit Formularen und $_POST-Variablen

Spätestens seit PHP 5 ist der Umgang mit POST-Daten aus Formularen etwas schwieriger geworden. Da es durchaus vorkommen kann, dass man diese Daten innerhalb einer Datei häufiger aufrufen muss (zB in Administrations-Oberflächen) möchte ich euch hier meine Idee vorstellen, wie man sich hier viel Arbeit sparen kann!


Dies ist mein erstes Tutorial, kann also vorkommen, dass ich etwas kompliziert formuliere. Bei Beschwerden bitte melden!!

Einführung - Idee


Spätestens seit PHP 5 ist es der Fall, dass man alle Daten, welche man mit der POST-Methode aus einem File an ein anderes schickt, mit $_POST['key'] "hereinholen" muss (PHP4, 3, ... $HTTP_POST_VARS['key']


Programmiere ich ein CMS, sehen zB die Dateien für ein Newscript wie folgt aus:
news.php
newsDo.php

In der news.php werden alle Formulare dargestellt (einfügen, bearbeiten, löschen), in der newsDo.php werden diese Daten verarbeitet.
Beispiel zur Eingabe:
    Das Formular zur Eingabe wird dargestellt, die Formulardaten werden an newsDo.php mittelst der method="POST" geschickt, der Link würde ungefähr so lauten:
    newsDo.php?do=insert

Beim bearbeiten wäre der link zB newsDo.php?do=update, beim löschen wäre das do=delete.

Da im News-Bereich die Formularfelder wohl immer den selben Namen haben - zB Titel, Text, Datum, visible - wäre es nun sinnvoll, am Seitenanfang von newsDo.php diese Daten EINMAL hereinzuholen, zB so:

$titel = $_POST['titel'];
$text = $_POST['text'];
$datum = $_POST['datum'];

Beim Eintrag in die Datenbank müssen diese Variablen wieder angesprochen werden. Dort zwar nurmehr mit $titel, $text und $datum, trotzdem muss man hier noch alles 2mal anfassen. Steigt dann noch die Anzahl der Formularelemente, wird es ziiiiiieemlich aufwändig und mühseelig!!

Um nun diesen Schritt etwas zu erleichtern, hier meine Idee:

MERKE:
Formularelemente, welche mit der Methode Post verschickt werden, werden in einer Art Array gespeichert:
$_POST['key'] = value
key = Name des Feldes
value = Wert des Feldes

Schritt 1:
newsDo.php

Wir deklarieren eine Variable (einen Array), welcher später die Werte der POST-Variablen (incl. deren key) enthalten soll:

$posted = array();

Schritt 2:

Jetzt der eigentliche Geniestreich:
foreach ($_POST as $key => $elem)
{
    $posted[$key] = $elem;
}

Erklärung: foreach($_POST as $key => $elem):
                     jedes übertragene POST-Feld wird in den Array $key => $elem aufgeteilt
                      $key also wieder der "Schlüssel" im Array, dieser ist der Feldname der übermittelten
                                Formularfelder
                      $elem dessen Wert

                   $posted[$key] = $elem;
                      $posted ist der vorher deklarierte Array
                      der $key ist wieder der Schlüssel für den Wert

                   $posted[titel'] = 'Titel einer News';
                   hier wäre also zB das Formularfeld 'titel' mit dem Wert 'Titel einer News' übergeben worden

Jetzt kann ich diese übermittelten Wert jederzeit verwenden, in meinem Fall mit $posted['titel'], $posted['text'] und $posted['datum']

Meiner Meinung nach sehr hilfreich, sollte es etwas kompliziert erklärt sein meldet euch bei mir, ich kann es auch nochmal etwas ausführlicher erklären!

Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von Cokxxie
  • 25.02.2010 - 11:40

Es ist einigermaßen ok. Es eignet sich sehr gut für Sicherheitsaspekte. Zum beispiel um alle eingehenden $_POST via mysql_real_escape_string() zu entschärfen. Jedoch würde ich außer diesen keinen Grund sehen, warum ich besimmte werte aus dem Array $_POST[] in $posted[] verlagern sollte ?!

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 10.05.2007 - 20:06

Es ist ein Mittelding. Es ist nicht perfekt, weil du hier wirklich nur eine Idee beschreibst, trotzdem kann man mit dem Wissen was man daraus zieht gut eigene Sahcne bauen. Darum 4*

x
×
×