$POST-Variable gesetzt, obwohl keine Eingabe erfolgte
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausschnitt
bedarf
bedingung
charakter
code
datum
eingabe
fehler
festzustellen
form
formular
leeres formular
level
menge
momentan folgendes problem
stunden
url
vergessen
vorname
wichtigste code
-
Hallo zusammen,
ich programmiere gerade eine Website, bei der man sich mit einem Formular bewerben kann und habe momentan folgendes Problem:
Wenn ich ein leeres Formular zur Datei schicke, auf der erstmal die Daten mit isset() durchgecheckt werden, dann sind die Variablen offensichtlich gesetzt, obwohl das Formular ja leer war.
Ein Ausschnitt des Codes des Formulars:
<form action="php/bewerbung/test.php" method="post"> <table id="bewerbung" cellspacing="10px"> <tr><td>Vorname:</td><td><input type="text" name="vn" size="20" class="tf" maxlength="20"></td></tr> <tr><td>Name des Charakters:</td><td><input type="text" name="cn" size="20" class="tf" maxlength="20"></td></tr> <tr><td>Level des Charakters:</td><td><input type="text" name="lvl" size="20" class="tf"maxlength="2"></td></tr> <tr><td>Maximallevel des Accounts:</td><td><input type="text" name="max" size="20" class="tf" maxlength="2"></td></tr> <tr><td>Tägliche Spielzeit in Stunden:</td><td><input type="text" name="sz" size="20" class="tf" maxlength="3"></td></Tr> <tr><td>E-Mailadresse:</td><td><input type="text" name="mail" size="20" class="tf" maxlength="20"></td></Tr> <tr><td><input class="submit" type="submit" value="Senden"><input style="margin-left: 10px;" class="submit" type="reset" value="Abbrechen"> </td><td></td></tr> </table> </form>
Außerdem hier noch der wichtigste Code von php/bewerbung/test.php:
<?php if (isset($_POST['vn'], $_POST['cn'], $_POST['lvl'], $_POST['sz'], $_POST['mail'], $_POST['max'])) { Jede Menge Code, der hier nicht wichtig ist... ?>
Wie gesagt - es wird trotzdem die Menge Code angezeigt, obwohl ich in das Formular nichts eingegeben habe. Hat jemand eine Idee, wie man gegen diesen Fehler angehen kann?
Viele Grüße
Gentleman1 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Dem Formular ist es wurscht, ob Daten eingetragen wurden, oder nicht. Die Variablen werden gesetzt und sind dann halt leer. Das ist kein Fehler! Du solltest also nicht nur prüfen, ob eine Variable gesetzt ist, sondern auch, ob sie Inhalte der gewünschten Art aufweist.
-
Benutz statt isset einfach empty.
Außer leere Checkboxen werden alle Felder übertragen. -
chatter schrieb:
Benutz statt isset einfach empty.
Auf Isset zu prüfen ist auch nicht sinnlos. Wenn nur ein Teil der erwarteten Variablen gesetzt sind, läßt das Rückschlüsse auf einen Manipulationsversuch zu. -
empty enthält isset. Es ist nur zu beachten, dass eine 0 ebenfalls eine leer gewertet wird. Das sollte hier aber kein Problem sein.
-
chatter schrieb:
empty enthält isset.
Das ist richtig! Eine nichtgesetzte Variable ist naturgemäß auch leer. Es gibt aber bei der Prüfung auf empty keine Möglichkeit, festzustellen, ob einfach nur eine Eingabe vergessen wurde, oder aber ein Bot-Skript die Daten geschickt hat, welches nicht unbedingt alle vorgesehenen (!) Formularfelder berücksichtigt . Ergo: eine zusätzliche Info für den Empfänger der Formulardaten, die nicht zwangsläufig sinnlos ist. Nicht mehr und nicht weniger wollte ich damit sagen. Über die Relevanz dieses Themas beim gezeigten Beispielformular will ich mich nicht äußeren.
-
Wie wäre es mit..
if ( $_POST['vn'] && isset($_POST['vn'] == bedingung ) )
.. würde dann nicht zunächst geprüft, ob überhaupt eine Eingabe stattgefunden hat?
-
menschle schrieb:
das bringt nur sowas wie
Wie wäre es mit..
if ( $_POST['vn'] && isset($_POST['vn'] == bedingung ) )
.. würde dann nicht zunächst geprüft, ob überhaupt eine Eingabe stattgefunden hat?
syntax error, unexpected '==' (T_IS_EQUAL)
gentleman1 schrieb:
wenn ein formular unausgefüllt abgeht, hast in allen post variablen leerstrings! also das ist eigentlich 'isset'. ein text ist auch dann 'isset', wenn er kein zeichen enthält! ein feiner unterschied ;). aus dem grund musst du in diesem fall unbedingt mit empty arbeiten.
...
... - es wird trotzdem die Menge Code angezeigt, obwohl ich in das Formular nichts eingegeben habe...<?php if (isset($_POST['vn'], $_POST['cn'], $_POST['lvl'], $_POST['sz'], $_POST['mail'], $_POST['max'])) { Jede Menge Code, der hier nicht wichtig ist... ?>
teste folgendes aus, dass du ein gefühl zu der sache entwickelst:<?php // das sind natürlich nur demodata, weil hier ja kein form ist. // probiere verschiedene werte zuzuweisen // sonst in deinem kode natürlich brauchst die nicht! $_POST['vn'] = true; // probiere hier auch true statt false aus! $_POST['cn'] = ''; $_POST['lvl'] = ''; $_POST['sz'] = ''; $_POST['mail'] = ''; $_POST['max'] = ''; // je nach bedarf können hier ANDs und ORs (auch gemischrt u. geklammert) stehen! // du kannst auch !empty nehmen (und zwar auch fallweise). if(empty($_POST['vn']) AND empty($_POST['cn']) AND empty($_POST['lvl']) AND empty($_POST['sz']) AND empty($_POST['mail']) AND empty($_POST['max'])) { echo 'Jede Menge Code, der hier nicht wichtig ist...'; }
Beitrag zuletzt geändert: 7.2.2013 4:25:35 von czibere -
Hallo zusammen,
vielen Dank für die vielen Antworten. Ich habe mich jetzt entschieden, die Variablen mit empty zu prüfen.
Viele Grüße
Gentleman1 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage