<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// je code
}
?>
of je de f5 kan disablen.. hmm volgens mij niet.. maar wanneer je controleert of die hash al in de database staat dan zou je nooit een dubbele record krijgen in principe..
Je kunt niet voorkomen dat een form twee of meer keer gepost wordt. wel kun je inderdaad voor zolang een sessie duurt voorkomen dat je twee keer een query uitvoert.
unset moet je weghalen. je wilt dat je session variabele blijft bestaan.
$http_post_vars kun je beter vervangen voor $_POST['myform_key'] omdat die verouderd zijn
Na het versturen van het formulier kun je via header('Location: ') de bezoeker naar een nieuwe pagina sturen. De formuliergegevens worden dan automatisch gewist (en kunnen niet nogmaals verzonden worden door de pagina te verversen / op F5 te drukken).
Dus nadat het formulier is verzonden en verwerkt, doe je:
Ik vind het vreemd want $_POST['token'] moest gelijk zijn aan $_SESSION['token'] als ik op submit klik en niet gelijk als ik op f5 druk.
NB: als ik op f5 druk, dan is het altijd $_POST['token'] != $_SESSION['token']. Dus dit is goed.(De $_SESSION['token'] verandert en $_SESSION['token'] niet.
Hoe is je opbouw van je script? Genereer je het token helemaal aan het begin? In dat geval is er al een nieuw token aangemaakt voor het gecontroleerd wordt.
Ozzie, je moet wel erbij vertellen dat als je een header in de php code zet dat er geen output boven mag staan. Dat kun je voorkomen door het volgende:
index.php?pagina=formulier (de pagina van je formulier)
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
if (isset($_POST['formulier'])){
// data hier verwerken
header('Location: index.php?pagina=formulier');
exit();
}
}
?>
Precies. Je verandert nu de code elke keer dat je script aangeroepen wordt. Maar daarna controleer je de code pas met wat er in $_POST staat. Omdat inmiddels de $_SESSION is verandert, klopt die code dus niet meer.
Enige wat je hoeft te veranderen is eerst je code te checken en dan pas je sessie aan te passen.
Goede regel is uberhaupt om altijd eerst je hele php logica af te werken en dan pas je html te plaatsen. Volgorde die ik zou nemen is:
- php code, code check tussen POST en SESSION
- SESSION veranderen
- html form opmaken