md: Eingabe bei Return

Hallo Ihr,

ich habe folgendes PHP-Skript, es trägt Daten, die in ein Eingabefeld eingegeben worden sind, in eine Textdatei ein. Leider funktioniert das nur, wenn der Button mit der Maus angeklickt wird. Wird die Return-Taste gedrückt, so lädt sich die Seite zwar neu, jedoch werden keine Daten übernommen. Dies ist schlecht, weil der Benutzer nicht sieht, dass es nicht funktioniert hat.

Was muss ich denn tun, dass das Skript auch bei Druck auf die Return-Taste ausgeführt wird?

<?PHP
            IF ($name !== "")
            {
             IF (ISSET($absenden))
             {
              $datei = FOPEN("eintraege.txt","a");
              $eintrag = EREG_REPLACE("\n","",$eintrag);
              $eintrag = STRIPSLASHES($eintrag);
              $daten = "$name \n";

FWRITE($datei,$daten);
              FCLOSE($datei);
              PRINT("Schön, dass Du dabei bist. Wir sehen uns!");
             }
             IF (FILE_EXISTS("eintraege.txt"))
             {
              $datei = FOPEN("eintraege.txt","r");
              $daten = FREAD($datei,filesize("eintraege.txt"));
             }
            }
           ?>

Vielen Dank,

Gruß, Marco

  1. Hallo,

    <?PHP
                IF ($name !== "")
                {
                 IF (ISSET($absenden))
                 {

    Ich nehme an, dass mit $absenden der Submit-Button abgefragt wird. Nimm das mal raus und frage lieber mit einem Hidden-Field ab, ob das Formular gesendet wurde.
    U.U. wird bei Absenden des Formulars mit der Return-Taste der Submit-Button umgangen.

    Schöne Grüße
    Axel

    1. »»frage lieber mit einem Hidden-Field ab, ob das Formular gesendet wurde.

      Wie kann ich denn so was machen? Habe leider (noch) nicht so viel Ahnung von PHP.

      Vielen Dank für eure Hilfe.

      Gruß, Marco

      1. Hallo,

        Du schreibst in Dein Formular ein Hiddenfield mit rein:
        <input type="hidden" name="abgesendet" value="1" />

        Dann in Deinem PHP-Code änderst Du die IF-Abfrage von
        if(ISSET($absenden)) {

        ab in

        if( isset($_POST['abgesendet']) ) {

        Dann sollte es gehen.
        Im übrigen scheint es mir anhand des kurzen Ausschnittes, als würdes Du direkt den Namen der Formularfelder mit einem Dollar davor als Variable ansprechen !?! Also z.B. $name für ein Feld <input name="name" ... />. Richtig? Die solltest Du besser alle umstellen auf $_POST['name'] also allgemein gesagt: $_POST['formularfeldname'] und dann in der Datei php.ini den Parameter "REGISTER_GLOBALS" auf Off stellen (oder 0 oder so). Den Parameter zu aktivieren ist ein Sichreheitsrisiko.

        Schöne Grüße
        Axel

        1. Vielen Dank für eure Hilfe, werde es mal probieren. Zur Vollständigkeit hier der fehlende Code:

          <FORM ACTION="ich_bin_dabei.php" METHOD="post">
                  <TABLE WIDTH="75%" BORDER="0">
                   <TR>
                    <TD COLSPAN="2" ALIGN="LEFT">
                     <SPAN CLASS="a-dick">
                      Ja, ich bin dabei!
                     </SPAN>
                    </TD>
                   </TR>
                   <TR COLSPAN="2">
                    <TD>
                     &#160;
                    </TD>
                   </TR>
                   <TR>
                    <TD>
                     <SPAN CLASS="a-dick">
                      Name:
                     </SPAN>
                    </TD>
                    <TD>
                     <input type="text" name="name" size="50">
                    </TD>
                   </TR>
                   <TR>
                    <TD COLSPAN="2">
                     &#160;
                    </TD>
                   </TR>
                   <TR>
                    <TD COLSPAN="2" ALIGN="LEFT">
                     <INPUT TYPE="SUBMIT" VALUE="eintragen" name="absenden">
                    </TD>
                   </TR>
                  </TABLE>
                 </FORM>

          Vielen Dank!

          Gruß, Marco

    2. Moin,

      <?PHP
                  IF ($name !== "")
                  {
                   IF (ISSET($absenden))
                   {

      also das sieht erstmal merkwürdig aus. Die Keywords werden auch in PHP normalerweise klein geschrieben. PHP akzeptiert zwar auch Großschreibung, aber es ist eben untypisch.

      Ich nehme an, dass mit $absenden der Submit-Button abgefragt wird.

      Der Script-Auszug sieht außerdem stark danach aus, als ob md sich hier auf register_globals verlässt.
      Davon kann man nur abraten! Wenn irgendwann das Script auf einen anderen Server umziehen muss, geht das Theater los und man muss einen Haufen Variablenbezüge umschreiben. Dann lieber gleich anständig.

      U.U. wird bei Absenden des Formulars mit der Return-Taste der Submit-Button umgangen.

      Ja, das passiert wohl, wenn der Submit-Button entweder ein <button type="submit"> oder ein <input type="image"> ist. Wenn man stattdessen einen klassischen Submit-Button <input type="submit"> verwendet, wird das name/value-Pärchen auch beim Drücken der Return-Taste mit übertragen.

      So long,

      Martin

      1. echo $begrüßung;

        U.U. wird bei Absenden des Formulars mit der Return-Taste der Submit-Button umgangen.

        Ja, das passiert wohl, wenn der Submit-Button entweder ein <button type="submit"> oder ein <input type="image"> ist. Wenn man stattdessen einen klassischen Submit-Button <input type="submit"> verwendet, wird das name/value-Pärchen auch beim Drücken der Return-Taste mit übertragen.

        Das name-value-Päärchen eines nicht gedrückten Buttons mitzusenden halte ich für einen Fehler. Der IE sendet dieses nur, wenn der Button auch tatsächlich geklickt wurde. Der FF nimmt einfach den ersten (Submit-)Button, den er findet. Ich hätte nichts gegen das Verhalten des FF einzuwenden, gäbe es ein "default"-Attribut, das so definiert wäre, dass der damit markierte Button beim Absenden mit Enter als betätigt angenommen wird.

        Leider ist das Verhalten beim Absenden mit Enter in der HTML 4.01 Specification (Forms - Successful controls) nicht definiert. Vielleicht ist es dort auch gar nicht vorgesehen, Enter zum Absenden zu verwenden ...

        "If a form contains more than one submit button, only the activated submit button is successful."
        Dieser Satz legt leider auch nicht fest, was bei nur einem Submit-Button, der nicht aktiviert wurde, passieren soll.

        echo "$verabschiedung $name";

        1. Hallo,

          Das name-value-Pärchen eines nicht gedrückten Buttons mitzusenden halte ich für einen Fehler. Der IE sendet dieses nur, wenn der Button auch tatsächlich geklickt wurde.

          das ist entweder falsch oder nicht immer zutreffend. Zu diesem Thema habe ich nämlich selbst schon Versuche gemacht. Solange das Formular nur einen Submit-Button hat, senden IE & FF auch beim Absenden per Enter-Taste immer das name- und das value-Attribut dieses Buttons mit. So jedenfalls war es bei meinen eigenen Tests.
          Veraussetzung ist natürlich, dass zum Zeitpunkt des Absendens ein anderes Formularelement den Fokus hat, das die Enter-Taste nicht selbst auswertet. Der häufigste Fall ist wahrscheinlich, dass der Cursor noch in einem Textfeld (<input type="text">) steht, ein Textfeld also den Focus hat.

          Übrigens: Diese Versuche hatte ich seinerzeit mit FF 1.0.4 und IE 5.5 SP2 durchgeführt.

          "If a form contains more than one submit button, only the activated submit button is successful."

          Um Missverständnisse zu vermeiden, würde ich hier mal "activated" übersetzen als "betätigt".

          Dieser Satz legt leider auch nicht fest, was bei nur einem Submit-Button, der nicht aktiviert wurde, passieren soll.

          Stimmt. Aber den Fall gibt es im IE auch nicht. Für ihn ist in einem Formular immer genau ein Submit-Button vorausgewählt (erkennbar am dick gezeichneten Rand). Der IE imitiert hier mit den Formularelementen genau das Verhalten von Windows in Dialogfenstern, in denen auch zwei Tasten fest einer bestimmten Funktion zugeordnet sind: Die Enter-Taste "drückt" den als Default markierten Button, und die Esc-Taste erzeugt ein "Cancel"-Event. In einem Formular im IE werden diese beiden Tasten auf "Submit" und "Reset" abgebildet.
          Soweit ich feststellen konnte, wird der Submit-Button nur dann nicht mitgesendet, wenn er deaktiviert wurde oder das Formular mit Javascript über die submit()-Methode abgesendet wurde.

          So long,

          Martin

          1. echo $begrüßung;

            Das name-value-Pärchen eines nicht gedrückten Buttons mitzusenden halte ich für einen Fehler. Der IE sendet dieses nur, wenn der Button auch tatsächlich geklickt wurde.

            das ist entweder falsch oder nicht immer zutreffend.

            Tut mir leid. Aufgrund meiner bisherigen Erfahrung und den eben nochmal angestellten Versuchen kann ich meine obige Aussage nicht widerrufen. Ich testete mit einem IE 6.0.

            Außerdem versuchte ich noch mit den Standalone-Versionen vom 4er und 5er und erhielt das gleiche Ergebnis. Der 5.5er versagte seinen Dienst.

            echo "$verabschiedung $name";