PRATIQUE PHP 
Eviter la validation multiple d'un même formulaire
 
"Si un utilisateur clique deux fois sur le bouton Submit, ses données sont enregistrées deux fois dans la base de données. Comment puis-je prévenir ce type de comportement ?" (21/11/2005)
  Forum

Réagissez dans les forums de JDN Développeurs

Qui n'a jamais cliqué plusieurs fois sur le bouton de soumission d'un formulaire ? Si le script PHP n'a pas été conçu pour gérer le cas de figure, la base de données risque fort de s'alourdir de plusieurs doublons, discernables uniquement par leur id.

Il existe deux solutions possibles. La première consiste à utiliser JavaScript pour bloquer le bouton d'envoi, dès que celui-ci a été cliqué (lire notre article du 02/02/03). Mais cette méthode suppose que l'internaute dispose d'un navigateur reconnaissant JavaScript. Reste la solution côté serveur, avec PHP.

L'idée est ici de générer pour chaque formulaire un identifiant unique, placé dans un champ caché du formulaire, et d'enregistrer cet identifiant dans la base avec le reste des informations données par l'utilisateur. Quand un formulaire est validé, on commence par chercher dans la base si cet identifiant s'y trouve. Si c'est le cas, les données ne sont pas enregistrées, et si l'identifiant n'existe pas déjà, les données sont bien stockées dans la base.

L'identifiant peut être généré de plusieurs manières, mais idéalement en prenant pour base de référence l'instant présent :

<?php
$uid = uniqid(microtime(), 1);
?>
<form>
  <input type="hidden" name="uid" value="<?=$uid;?>" />
  ...
</form>
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page