Empêcher le submit par [F5]

Le traitement PHP d’un formulaire peut nécessiter la vérification que l’utilisateur n’a pas pressé la touche [F5] pour soumettre le formulaire à nouveau. En effet, si le fait de soumettre un formulaire provoque une requête à la base de données insert into, vous préféreriez que l’insertion n’aie pas lieu 2 fois.

Le principe pour contrer les [F5] est d’utiliser un champ hidden (appelé “process” dans mon exemple) contenant le Unix timestamp du moment de la génération du formulaire par le serveur (microtime(true) en PHP). Ensuite, il reste à créer une fonction qui va :

  • comparer la valeur de process postée avec une variable Session appelée “process”. Si la valeur de la variable process postée est égale à la valeur stockée dans la variable Session, la fonction renvoie l’erreur : “Veuillez utiliser le bouton Submit”
  • si ces valeurs sont différentes, le formulaire est traité, la base de données modifiée au besoin, puis stockez la valeur de la variable process postée dans la variable Session ($_SESSION["process"]).

Preventing [F5] submission

Form handling may require the script to identify if the user has first submitted the form or if he has pressed the key [F5] to submit the form again. Indeed, if form submission triggers an insert into database query, you may want the insertion not to happen twice.

Basically, the only thing to do is to post a hidden field (called “process” in my example) containing the Unix timestamp of the time when the form was generated (microtime(true) in PHP). Then write a short PHP function that will

  • compare the posted process value with a Session variable called “process”. If the posted process variable equals the Session value, trigger the error : “Please use submit button”
  • if it doesn’t, process form, then store the posted process time in a Session variable ($_SESSION["process"]).