WernerK: Post Variablen bei Enter Taste

Hallo,

angebommen ein Formular sieht so aus:

  
    <form action="page2.php" method="post">  
    <input type="text "name="txt_searchValue" size="20"/>  
    <input type="submit" name="submit" value="Suchen"/>  
    </form>  

Wenn man im Textfeld etwas eingibt und auf den Submit Button klickt dann wird mir in dieser AUsgabe unten auch der Wert angezeigt.

echo "post txt_searchValue value ist " . $_POST['txt_searchValue'] . "<br>";

Wenn ich aber in das Textfeld gehe, etwas eingebe und dann gleich die Enter Taste drücke kommt keine Meldung. (vermutlich weil es kein Post request ist)

Wenn ich nun aber folgendes zum Test einbaue:

if (isset ($_POST)) { var_dump ($_POST); }

Dann zeigt mir dieser var_dump immer etwas an , etwa wie folgt:

array(5) {  ["txt_searchValue"]=> string(3) "fff"  }

Warum sind dies solche Unterschiede?
Warum greift bei der Enter Taste überhaupt das "if(isset ($_POST)) ?

Kann man irgendwie erreichen, dass bei Klick auf Enter Taste das Gleiche passiert wie wenn man mit der Maus auf den "Suchen" Submit Button klickt?

vielen Dank
Gruss
Werner

  1. Tach!

    <form action="page2.php" method="post">
        <input type="text "name="txt_searchValue" size="20"/>
        <input type="submit" name="submit" value="Suchen"/>
        </form>

    
    > Wenn ich aber in das Textfeld gehe, etwas eingebe und dann gleich die Enter Taste drücke kommt keine Meldung. (vermutlich weil es kein Post request ist)  
      
    (Nein.) Es war in HTML 4 nur vorgesehen, dass die name-value-Pärchen von "erfolgreichen" Elementen in den Request übernommen werden. Einige Browser interpretieren einen Button nur dann erfolgreich, wenn er geklickt wurde, ansonsten nicht. Andere Browser taten immer so, als sei einer der Submit-Button gedrückt worden, auch wenn stattdessen anderswo ein Enter gedrückt wurde. Du solltest dich nicht darauf verlassen, dass das Submit-name-value-Pärchen mit übertragen wird. In HTML5 hat sich da wohl etwas geändert, aber darauf würde ich nicht bauen, du brauchst ja keine Information darüber, welcher Button gedrückt wurde.  
      
    
    > Wenn ich nun aber folgendes zum Test einbaue:  
    > if (isset ($\_POST)) { var\_dump ($\_POST); }  
    > Dann zeigt mir dieser var\_dump immer etwas an , etwa wie folgt:  
    > array(5) {  ["txt\_searchValue"]=> string(3) "fff"  }  
    > Warum greift bei der Enter Taste überhaupt das "if(isset ($\_POST)) ?  
      
    Weil es doch ein POST-Request ist. Ob POST oder GET legt das method-Attribut fest, nicht die Art und weise, wie der Submit ausgelöst wird. Außerdem würde ich hier nicht mit isset($\_POST) sondern empty($\_POST) prüfen. In früheren PHP-Versionen war $\_POST nämlich immer da und mann kann PHP auch heute noch so konfigurieren. Und sicherlich möchtest du nur dann etwas verarbeiten, wenn auch was zum Verarbeiten da ist, also wenn zumindest irgendein Inhalt in $\_POST steht.  
      
    
    > Kann man irgendwie erreichen, dass bei Klick auf Enter Taste das Gleiche passiert wie wenn man mit der Maus auf den "Suchen" Submit Button klickt?  
      
    Ja, die Verarbeitung so schreiben, dass sie nicht auf das Submit-Button-name-value-Pärchen angewiesen ist.  
      
      
    dedlfix.
    
    1. Hallo,

      Ja, die Verarbeitung so schreiben, dass sie nicht auf das Submit-Button-name-value-Pärchen angewiesen ist.

      Das bedeutet aber das man irgendwo auch ein Stück Javascript ins Form platziert das die Entertaste überprüft und einen Form Submit macht oder?

      Gruss
      Werner

      1. Tach!

        Ja, die Verarbeitung so schreiben, dass sie nicht auf das Submit-Button-name-value-Pärchen angewiesen ist.
        Das bedeutet aber das man irgendwo auch ein Stück Javascript ins Form platziert das die Entertaste überprüft und einen Form Submit macht oder?

        Nein, das Enter löst auch einen Submit aus, da braucht es kein Javascript. Um serverseitig zu überprüfen, ob gePOSTet wurde, reicht eine Prüfung auf empty($_POST). Man muss den Submit-Button nicht berücksichtigen (dann kann man auch das name-Attribut weglassen).

        dedlfix.