kostenloser Webspace werbefrei: lima-city


$POST-Variable gesetzt, obwohl keine Eingabe erfolgte

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    gentleman1

    gentleman1 hat kostenlosen Webspace.

    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&auml;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 :king:
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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.
  4. Benutz statt isset einfach empty.
    Außer leere Checkboxen werden alle Felder übertragen.
  5. 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.
  6. empty enthält isset. Es ist nur zu beachten, dass eine 0 ebenfalls eine leer gewertet wird. Das sollte hier aber kein Problem sein.
  7. 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. :wink:

  8. m******e

    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?
  9. menschle schrieb:
    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?
    das bringt nur sowas wie
    syntax error, unexpected '==' (T_IS_EQUAL)

    gentleman1 schrieb:
    ...
    <?php
    if (isset($_POST['vn'], $_POST['cn'], $_POST['lvl'], $_POST['sz'], $_POST['mail'], $_POST['max'])) {
         Jede Menge Code, der hier nicht wichtig ist...
    ?>
    ... - es wird trotzdem die Menge Code angezeigt, obwohl ich in das Formular nichts eingegeben habe...
    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.

    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
  10. Autor dieses Themas

    gentleman1

    gentleman1 hat kostenlosen Webspace.

    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 :king:
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!