martin_22: Nochmaliges Ausführen einer Datei verhindern

Guten Morgen

bin ich froh das dieses forum wieder funktioniert! Ich hätt sonst nicht gewusst wohin ich mich sonst wenden hätte können mit meinen folgenden Fragen:

1. Ich hab ein kleines PHP Programm geschrieben bei dem es auch ein Eingabeformular gibt welches auf eine eigene "Speicherseite" weiterleitet und die Inhalte übergibt. Diese Speicherseite leitet dann wieder auf eine Übersicht weiter. Mein Problem ist das wenn ich danach auf der Übersichtsseite beim Browser auf zurück clicke wird der Speichervorgang nochmal ausgeführt. - Kann ich das irgendwie verhindern???

2. Ebenfalls bei diesem Programm gibts ein Formular das aber nur aus einem input Feld und einem Absendebutton besteht. Hier ist folgendes Problem aufgetaucht: wenn der User mit einem IE surft und im Eingabefeld Enter drückt wird das Formular nicht abgesendet (bei Safari z.B. klappt das ganz gut mit Enter). Ziel dieses Formulars ist die selbe Datei nur ein anderer case (datei.php?action=save)

Hoffe jemand von euch kann mir zumindest bei einem dieser Problemchen helfen. Danke.

Mfg Martin

  1. Moin,

    um den ganzen Murks zu verhindern mit dem Formular würde ich eine unique ID für den Speichervorgang generieren, dem Formular mitgeben, und bei abschicken prüfen, ob diese ID den Speichervorgang überhaupt/noch ausführen darf, wenn ja  dann wird die ID aus der liste gestrichen, also sowas wie eine Eintrittskarte o.ä.

    Gruss

    --
    no strict;
    no warnings;
    man google
    1. Hallo

      Also mit dem input feld meine ich keine textarea. Es ist wirklich nur ein einzeiliges Textfeld das max 15 Zeichen enthält.

      Und bezüglich dem zurück hab ich bei anderen Seiten gesehen das da eine Fehlermeldung kommt das die Seite nicht mehr gültig ist z.B. beim absenden einer email bei gmx aber auch bei einigen anderen seiten ist mir das schon mal untergekommen und ich wollte wissen wie die das dann gemacht haben!?

      Mfg Martin

      1. Hallo

        Also mit dem input feld meine ich keine textarea. Es ist wirklich nur ein einzeiliges Textfeld das max 15 Zeichen enthält.

        Wie gesagt, auch der IE versendet ein valides Formular per Enter - auch aus einer Input Box heraus.

        Und bezüglich dem zurück hab ich bei anderen Seiten gesehen das da eine Fehlermeldung kommt das die Seite nicht mehr gültig ist z.B. beim absenden einer email bei gmx aber auch bei einigen anderen seiten ist mir das schon mal untergekommen und ich wollte wissen wie die das dann gemacht haben!?

        Sie versehen die Seite mit einer eindeutigen ID, z.B. per Hiddenfeld, und werten dann serverseitig aus, ob diese ID bereits verwendet wurde.
        Das kannst Du gut in diesem Forum nachprüfen, wenn Du nach dem Abspeichern einer Nachricht die Seite neu lädst.

        Gruß
        Mark

        1. Sie versehen die Seite mit einer eindeutigen ID, z.B. per Hiddenfeld, und werten dann serverseitig aus, ob diese ID bereits verwendet wurde.
          Das kannst Du gut in diesem Forum nachprüfen, wenn Du nach dem Abspeichern einer Nachricht die Seite neu lädst.

          Also nicht direkt neu laden, sondern den gleichen Request erneut senden.
          Vielleicht schaffe ich es heute noch, in _einem_ Posting zu schreiben, was ich eigentlich schreiben will.

        2. Hallo Mark,

          Und bezüglich dem zurück hab ich bei anderen Seiten gesehen das da eine Fehlermeldung kommt das die Seite nicht mehr gültig ist z.B. beim absenden einer email bei gmx aber auch bei einigen anderen seiten ist mir das schon mal untergekommen und ich wollte wissen wie die das dann gemacht haben!?
          Sie versehen die Seite mit einer eindeutigen ID, z.B. per Hiddenfeld, und werten dann serverseitig aus, ob diese ID bereits verwendet wurde.

          Ich denke eher, dass die das Formular mit method="post" absenden und Martin wohl method="get" (was auch der Default-Value ist) verwendet. Mehr Infos dazu findest du, Martin, hier: http://de.selfhtml.org/html/formulare/definieren.htm#bereich

          Gruss,
          Daniel

          1. Hallo Daniel

            also ich verwende schon method=post.

            Bei den IE gibts anscheinend auch Unterschiede. Bei einem Freund z.B. wird die Seite wieder neu aufgebaut das Formular wurde aber nicht abgesendet (das gleiche passiert auf meinem Mac mit IE)

            Das heißt ich brauch irgendeine Lösung das das Absenden mit Enter überall oder nirgends funktioniert.

            Mfg Martin

      2. Moin!

        Und bezüglich dem zurück hab ich bei anderen Seiten gesehen das da eine Fehlermeldung kommt das die Seite nicht mehr gültig ist z.B. beim absenden einer email bei gmx aber auch bei einigen anderen seiten ist mir das schon mal untergekommen und ich wollte wissen wie die das dann gemacht haben!?

        Das ist keine _Fehler_meldung, sondern eine Meldung des Browsers, der den Benutzer darauf hinweist, dass die soeben per Zurück-Taste erreichte Seite das Resultat eines abgeschickten POST-Formulars war und nur wiederhergestellt werden kann, indem dasselbe Formular noch mal an den Server gesendet wird. Und schon hast du deine doppelte Ausführung des Skriptes.

        Es gibt dagegen genau zwei Methoden:
        1. Wie schon erwähnt die Mitsendung einer einmaligen ID im Formular, und der Server muß dann erkennen, dass er diese ID schon mal erhalten hat, und dann bei weiteren identischen IDs die Arbeit verweigern.
        2. Man kann es sich auch einfacher machen und die HTML-Ergebnisseite des POST-Formulars einfach komplett weglassen und einfach mit einem Redirect auf eine weitere Seite weiterleiten. Die holt der Browser dann wieder per GET ab, und die Zurücktaste überspringt die POST-Ergebnisseite dann ganz einfach, weil der Redirect den Browser anweist, anstelle der POST-Ergebnisseite die GET-Seite zu laden.

        Bei dieser zweiten Methode hast du aber unter Umständen das Problem, auf der GET-Seite ein individuelles Ergebnis anzuzeigen, d.h. du mußt dann evtl. mit irgendeinem Mechanismus (Sessions oder URL-Parameter) die benötigten Daten aus dem Formular weiterreichen.

        - Sven Rautenberg

  2. Hallo,

    Guten Morgen

    bin ich froh das dieses forum wieder funktioniert! Ich hätt sonst nicht gewusst wohin ich mich sonst wenden hätte können mit meinen folgenden Fragen:

    1. Ich hab ein kleines PHP Programm geschrieben bei dem es auch ein Eingabeformular gibt welches auf eine eigene "Speicherseite" weiterleitet und die Inhalte übergibt. Diese Speicherseite leitet dann wieder auf eine Übersicht weiter. Mein Problem ist das wenn ich danach auf der Übersichtsseite beim Browser auf zurück clicke wird der Speichervorgang nochmal ausgeführt. - Kann ich das irgendwie verhindern???

    Nein, jeder Request ist unabhängig von allen anderen.

    1. Ebenfalls bei diesem Programm gibts ein Formular das aber nur aus einem input Feld und einem Absendebutton besteht. Hier ist folgendes Problem aufgetaucht: wenn der User mit einem IE surft und im Eingabefeld Enter drückt wird das Formular nicht abgesendet (bei Safari z.B. klappt das ganz gut mit Enter). Ziel dieses Formulars ist die selbe Datei nur ein anderer case (datei.php?action=save)

    Mein IE verschickt Formulare nach Enter.
    Es sei denn Du verstehst unter einem Eingabefeld eine Textarea.

    Gruß
    Mark

    1. Aber um nicht falsch verstanden zu werden:
      Du kannst den Request nicht verhindern, wie Du das serverseitig verwendest, ist eine andere Sache.

      Gruß
      Mark