Basti86: Kontaktformular: Reload verhindern

Hallo,
ich habe ein Kontaktformular das per PHP ausgewertet wird.
Bei korrekter Eingabe kommt eine Meldung in der Art "Vielen Dank. Daten gesendet" - nun ist allerdings das Problem, dass wenn man die Seite per Browser reloaded die Daten noch einmal gesendet werden - also könnte man die Seiten theoretisch recht leicht zuspamen.

Nun, mein erster Versuch das zu unterbinden, war einen header zu setzen, also eine automatische Weiterleitung.
Dies klappt allerdings nicht.
(Fehlermeldung: Warning: Cannot modify header information - headers already sent by...).

Nun meine Frage: Gibt es noch andere Möglichkeiten eine automatische Weiterleitung zu bewerkstelligen, und damit direkte Reloads (und damit das doppelte Versenden der Daten) zu unterbinden?

Oder gibt es eventuell noch andere Wege dieses Problem zu beheben?

  1. Hallo Basti86!

    Dein Ansatz mit der Weiterleitung ist schon richtig. Nu musst Du dies natürlich tun, bevor du irgendwelche Daten an den browser gesendet hast. Also.
    1. Auswertung des Formulars
    2. Versenden des Inhalts.
    3. setzen einer Sessionvariable
    4. redirect
    5. Ausgabe des Textes je nach Variableninhalt.

    Natürlich nur ein Weg....

    Schönen Gruß

    Afra

    1. Hallo Basti86!

      Dein Ansatz mit der Weiterleitung ist schon richtig. Nu musst Du dies natürlich tun, bevor du irgendwelche Daten an den browser gesendet hast. Also.

      1. Auswertung des Formulars
      2. Versenden des Inhalts.
      3. setzen einer Sessionvariable
      4. redirect
      5. Ausgabe des Textes je nach Variableninhalt.

      Naja, das Problem ist, dass der redirect prinzipiell nicht funktioniert:
      Das PHP-Script ist in html eingebettet, daher kann kein header gesetzt werden (wenn ich das richtig verstanden habe).

      <html>
      <?php
      // Dies funktioniert nicht. Beachten Sie die
      // obige Ausgabe noch vor dem header()-Aufruf
      header('Location: http://www.example.com/');
      ?>
      (php.net)

      Kann man das irgendwie umgehen?

      1. Hallo Basti86!

        Nenne immer allen relevanten Code, sonst rät man sich einen zurecht.

        Du könntest den redirect ja auch mit Javascript und location.replace(url); lösen, die wenigen die kein JS an haben, könnten dann noch reloaden, oder Du setzt in ein txt File, oder in einer DB einen Flag in dem Du IP und Zeit speicherst und erst nach 10 Min oder so wieder ein Absenden zulässt.

        Du kannst natürlich auch Dein Script abändern und die Ausgabe des Headers wie von mir am Anfang beschrieben ganz am Anfang der Datei erfolgen lassen. Es ist ja völlig egal wo der PHP Code auf dem Server ausgeführt wird. Die geparste Datei sollte eine valide HTML Datei sein.

        Schönen Gruß

        Afra

      2. Hi Basti86,

        Naja, das Problem ist, dass der redirect prinzipiell nicht funktioniert:
        Das PHP-Script ist in html eingebettet, daher kann kein header gesetzt werden (wenn ich das richtig verstanden habe).

        <html>
        <?php
        // Dies funktioniert nicht. Beachten Sie die
        // obige Ausgabe noch vor dem header()-Aufruf
        header('Location: http://www.example.com/');
        ?>
        (php.net)

        Kann man das irgendwie umgehen?

        Ändere einfach die Reihenfolge ab:

        <?php  
        header("Location: http://www.example.org");  
        ?>  
        [code lang=html]<html>  
        <!-- Hier der Rest deiner Seite -->  
        </html>
        ~~~[/code]  
          
          
        MfG, Dennis.
        
        -- 
        Mein SelfCode: [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:# ss:) de:\] js:| ch:{ sh:| mo:} zu:|](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%23+ss%3A%29+de%3A%5D+js%3A%7C+ch%3A%7B+sh%3A%7C+mo%3A%7D+zu%3A%7C)  
          
        [.htpasswd Datei mit PHP erzeugen](http://tutorial.riehle-web.com/scripts/?check#md5crypt)  
        Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet! (Anita Berres)