Paul: meta refresh mit Anker

Hallo allerseits.

Bei mir tritt ständig ein Problem auf, wenn ich mit einem Skript eine Form abschicke, dann die Daten auswerte, will ich die Seite neu laden, um "per Zufall" das erneute Absenden der Form zu vermeiden. Dabei wird die Position mitgesendet, wo die Form sich befindet (Um das Scrollen zu ersparen, falls die Form ganz ganz unten ist). Leider kann ich keine Javascript Lösung benutzen, da die Seite auch ohne Javascript laufen sollte. PHP fällt auch aus, da ich vor dem header-Aufruf schon einiges tue. Also wollte ich mit <meta refresh> auskommen.
 D.h. nach dem Auswerten der Form wird folgendes dem Browser ausgegeben:
<meta http-equiv="refresh" content="0; URL=index.html?#a10">

Die Anker-Id's waren zuerst nur Zahlen, dann hab die mit Buchstaben ergänzt (Falls ein Id unbedingt mit einem Buchstabe beginnen sollte). Letztendlich klappt es...aber nur manchmal. Ich hab es unter verschiedenen Browsern getestet, überall das Gleiche. Manchmal wird die Seite neugeladen, manchmal auch nicht. Wobei die Ankern sind da, der Aufruf stimmt auch.

Oder kennt vielleicht jemand eine andere Lösung, wie man eine Form für Browser "deaktivieren" kann. D.h. wenn ich etwas sende, und beim Drücken von F5 wird die Form nicht noch mal gesendet.

Danke voraus.

  1. Hy,

    Eine Lösung deines Problems kenne ich nicht, habe jedoch einen anderen Lösungsansatz, wodurch das zweimalige Senden eines Formulars weder unabsichtlich noch willkürlich geschehen kann.

    vor dem Formular generierst du ein Hash-wert:

      
    $_SESSION['gbookform_antispam'] = md5(time().$_SERVER['REMOTE_ADDR']);  
    
    

    im Formular machst du versteckte Felder:

      
    <input type="hidden" name="gbookform_antispam" value="<? echo $_SESSION['gbookform_antispam']; ?>" /><input type="hidden" name="<? echo session_name(); ?>" value="<? echo session_id(); ?>" />  
    
    

    und bei der Verarbeitung der Eingaben überprüfst du noch

      
    if(!isset($_POST['gbookform_antispam']) || !isset($_SESSION['gbookform_antispam']) || $_SESSION['gbookform_antispam'] != $_POST['gbookform_antispam']){  
     // wenn nun ein Fehler auftritt dann mach irgendwas...  
    }  
    
    
    1. Erstens danke.
      Deine Lösung geht in meinem Fall leider nicht. Die Doppel-Auswertung ist in dem Fall kein Problem. Das Problem machen die Browsern. Und zwar:
      wenn ich ein Formular abschicke, dann auswerte, wird in einigen Fällen ein Popup aufgemacht (oder auch Frame) in dem man dann weiter etwas macht. Beim Schliessen von geöffnetem Fenster wird die erste Seite neugeladen. Und da kommt die Meldung vom Browser (genau dasgleiche, wenn man F5 drückt), ob der Formular nochmal abgesendet werden muss. Wenn man das nicht zulässt, wird die Seite nicht erneuert.
       Das Problem stellt besonders die Aufförderung etwas zu akzeptieren (nochmal senden), viele Leute verstehen das überhaupt nicht, drücken abbrechen, und dann sieht alles beim alten aus. Wie gesagt, das mit dem Neuladen klappt. Ohne '#' Zeichen immer. Wenn ich aber '#' mitausgebe, funktioniert es nicht immer.