picture picture
mars 15, 2007 JavaScript 0 Commentaire

Comment éviter les clics de validations répérées sur un formulaire ?

: pour ne pas enregistrer plusieurs fois les mêmes données dans une base, par exemple, si un utilisateur impatient clique plusieurs fois sur le bouton d’envoi du formulaire …

En fait il y a deux méthodesn à ma connaissance :

La méthode javascript :

On peut insérer dynamiquement un attribut "disabled" du bouton d’envoi.
L’astuce consiste simplement à mettre cet attribut APRES le formulaire … et non pas dans l’en-tête (head), puisque le code est lu de haut en bas par le navigateur.

Ce qui donnera par exemple, ad minima:

<html>
<body>

<form name="form1" action="recup.php" onsubmit="go.disabled=true;">
<input type="text" name="monChamp" onclick="go.disabled=false">
<input type="submit" name="go" value="Envoyer">
</form>

<script language="javaScript">
<!–
document.form1.go.disabled=true;
//–>
</script>

</body>
</html>

Ce qui donne avant le clic:

et après:

 

La méthode PHP :

inutile normalement si les javascripts ne sont pas désactivable… mais hélas indispensable en complément de la précédente.
Trop de navigateurs ont malheureusement bloqués les javascripts à la suite d’une mauvaise manipulation, ou surtout d’un excès de zèle en vue de se protéger d’une éventuelle menace pirate bien improbable.

la solution consiste donc à créer, juste avant le formulaire, un identifiant unique (l’instant présent, par exemple, ou un id autoincrémenté) lors de chaque envoi du formulaire. Cet identifiant est ensuite envoyé dans un champ caché vers le fichier de traitement du formulaire.
Il sera donc enregistré dans une base des données, et avant de procéder au traitement des données envoyées, il suffit de rechercher dans la base s’il n’existe pas déjà.

On peut par exemple utiliser la fonction uniquid , jumelé avec la fonction microtime(), qui "retourne un identifiant préfixé unique, basé sur l’heure courante, en micro-secondes".

Ce qui donnerait :

<?php
$unic = uniqid(microtime(), 1);
?>
<form>
<input type="hidden" name="unic" value="<?php echo $unic; ?>" />
….
</form>

 

8)

 

No Responses to “Comment éviter les clics de validations répérées sur un formulaire ?”

Commentaire

Name

Mail (ne sera pas publié)

Website

Laisser ces deux champs tels quels :
:D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: