| 

.NET C# Java Javascript Exception

1
Wie kann ich in PHP die Formularvariablen auslesen, die vom Client gepostet werden?

<form method="/add.php">
Name: <input type="text" />
</form>

Irgendwie kommt am Server kein Name an, obwohl das Formular funktioniert.
19.07.2009
rover 275 1 2 4
5 Antworten
3
Du solltest dem Feld noch einen Namen geben:

<form method="/add.php"> Name: <input
name="name" type="text" /> </form>

variablen aus formularen werden übrigens in den arrays $_GET oder $_POST gespeichert.

mit
var_dump($_GET);
var_dump($_POST);
kannst du dir in php den inhalt alle übertragener feldern anzeigen lassen.
21.07.2009
maagz 313 1 1
1
" $_GET und $_POST "
maagz 21.07.2009
1
Ich hätte noch eine Folgefrage: http://codekicker.de/fragen/HTML-Formular--Unterschied-von-id-und-name-auf-inputs/29
rover 23.07.2009
4
Eine Prüfung der Variablen ob leer oder nicht reicht übrigens in keinem Fall aus.
Du _MUSST_ _ALLE_ Nutzereingaben _IMMER_ auf Plausibilität hin überprüfen. Ausreden gelten hier nicht!

Verwende dazu keine Funktion, die Pauschal alle $_REQUEST, $_POST oder $_GET Werte irgendwie überprüft und auch keine Schleife sondern überprüfe alle Eingaben einzeln und lösche ggf. die Variablen bzw. ungültige Zeichen.

intval() und preg_(match|replace)() sind Deine Freunde.
08.09.2009
hannemann 81 1 1
2
Die Frage ist, wofür man es nutzt :)
Mein Miniatur-Schleifen-Beispiel bezog sich eher darauf,"hat jemand alle Felder die er ausfüllen sollte ausgefüllt, oder nicht".
Das man User-Eingaben definitiv noch genauer checken muß, kann ich nur voll und ganz unterstreichen.
lunatigs 08.09.2009
1
Ganz deiner Meinung! Vertraue NIE Usereingaben!
darkdust 08.09.2009
1
Da habt ihr Recht, aber so weit war der Kollege doch gar nicht. is_int, is_numeric, is_float usw. helfen da auch.

ALLES IST BÖSE, BIS DAS GEGENTEIL BEWIESEN IST!
tomahlak 08.09.2009
3
Dein formular würde so nicht wirklich funktionieren, da das Attribut method="" nicht für die Aktion des Formulars zuständig ist, sondern für die Art, wie es abgesendet wird.

Du müsstes also deine /add.php in das Attribut action="" packen ;)
Sieht dann wie folgt aus: <form action="/add.php">

Dazu sollte man noch sagen, dass die PHP-Variablen $_GET und $_POST davon abhängig sind, was für eine MEthode du deinem Formular giebst.
Sprich: <form action="/add.php" method="POST">
bzw. <form action="/add.php" method="GET">
07.09.2009
darkdust 451 2 6
3
Es gibt 3 Arrays in PHP die Formulardaten enthalten:

1. $_GET
2. $_POST
3. $_REQUEST

$_GET enthält nur Parameter die mittels get übermittelt wurden, also z.B. wie index.php?param1=value&param2=value

$_POST enthält nur Parameter die mittels post übermittelt wurden, die stehen nicht in der URL

$_REQUEST wird auf $_GET, $_POST und einigen weiteren Quellen zusammengebaut. GGf. überschreiben Werte aus $_POST Daten aus $_GET. (Details zur Reihenfolge findet man im PHP-Manual)

Die Name-Attribute der Eingabefelder (input, select, textarea) sind die Schlüssel, die Inhalte sind die Werte der Arrays.

Deklariert der Name des Formularfeldes ein Array, dann steht die Daten als Array in den jeweiligen Arrays.

<input type="text" name="data[eins]" />
<input type="text" name="data[zwei]" />
(Wie man sieht nutzt das Escapezeichen Backslash zur Darstellung der eckigen Klammern)

Dann ist data entsprechend ein Array.
So das Formular mit POST übermittelt wurde, steht dann der Wert z.B. in $_POST['data']['eins']

Die if-Anweisung im Beispiel if (!isset($unit) kannste knicken.
isset() prüft, ob die Variable deklariert wurde, nicht ob sie einen brauchbaren Inhalt hat.
Das foreach-Konstrukt wird die Variable innerhalb der Schleife verfügbar machen. isset ist also immer true, if ! wird niemals erreicht.
Vermutlich ist if (!empty($unit)) gemeint.
07.09.2009
tomahlak 237 1 2
1
Es gibt auch noch einen weiteren array, der in Formularen eingesetzt wird: $_FILE
Der wird z.B. bei Dateiuploads verwendet.
Mehr dazu siehe: http://us3.php.net/manual/de/features.file-upload.php
darkdust 08.09.2009
2
Nicht ganz richtig! Das superglobale Array das du meinst heißt $_FILES - nicht $_FILE!
FalkP 08.09.2009
1
OK, ich habe die Dateien vergessen.

Ein Dateiupload musst Du dann aber auch anders behandeln, d.h. Du kannst nicht einfach drauf rumorgeln wie auf einfachen Inputfeldern.
tomahlak 08.09.2009
2
Es kann auch sinnvoll sein, die Formulareingaben als Array zu übergeben.
<input type="text" name="data{name}" ...> (wichtig ist name und plz nicht mit ' oder " zu versehen)
<input type="text" name="data{plz}" ...>
...

Auf die Art und Weise kann man dann unter PHP in einer Schleife
auswerten, ob Eingabefelder mit Text gefüllt wurden oder nicht.
foreach($_POST{'data'} AS $key => $unit) {
if(!isset($unit)) { ... }
}

Das kann manchmal Code und Arbeit sparen.

Der aufmerksame Leser wird gemerkt haben, daß die { } Klammern um name, pls und 'data' herum eigentlich eckig sein müssten, was sich hier aber dank BB-Code-Prüfung nicht darstellen lässt (zumindest ist mir nicht bekannt wie).
07.09.2009
lunatigs 1,3k 2 8
1
Danke, das wusste ich auch noch nicht. :)
darkdust 07.09.2009
1
Backslash escaped die eckige Klammer
tomahlak 07.09.2009

Stelle deine Php-Frage jetzt!