Désactiver un bouton submit à l'envoi du formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Désactiver un bouton submit à l'envoi du formulaire

par finipe » 29 août 2006, 05:46

Problème résolu : c'est parce que je m'évertuais à détecter l'envoi du formulaire avec isset($_POST['valid']).

Merci ! : )

par Ryle » 28 août 2006, 16:03

Ah bon? J'ai un doute là, je dirais plutot qu'il vaut mieux utiliser le onsubmit sur le formulaire que le onclick sur le submit, parce qu'en cas de validation par la touche Entrée, le onsubmit sera pris en compte et pas le onclick.
Vi, en effet, mais dans l'exemple il s'agit d'un input de type "button" pour soumettre le formulaire à la place d'un input de type "submit". La touche entrée n'a alors aucun effet sur le formulaire (sauf si le focus est sur le bouton, ce qui déclencherait le onClick de toute façon :))

Il faut juste savoir que la fonction javascript submit() ne déclenche pas l'action onSubmit du formulaire :)
Après, c'est à chacun de voir s'il utilise juste des boutons "submit" ou s'il utilise également du javascript (pour actualiser un formulaire sans perdre de données lors d'un choix dans une combo par exemple)

par Shrell » 28 août 2006, 15:39

L'action onSubmit="" d'un formulaire n'est déclenchée que lors de la soumission du formulaire via un bouton submit ou une image
Ah bon? J'ai un doute là, je dirais plutot qu'il vaut mieux utiliser le onsubmit sur le formulaire que le onclick sur le submit, parce qu'en cas de validation par la touche Entrée, le onsubmit sera pris en compte et pas le onclick.
Pour ton probleme de if(isset($_POST['valid'])), teste un autre champ que tu as rendu obligatoire, ou bien essaie if(is_array($_POST)) (je ne suis pas sur de ca, je dirais que $_POST est un tableau par défaut et qu'il est défini, que des données aient été envoyées ou non... à voir donc)

par finipe » 28 août 2006, 13:32

C'est vrai que je détecte l'envoi du formulaire avec un if(isset($_POST['valid'])) ... Je vais essayer autre chose alors : )

par Ryle » 28 août 2006, 11:08

L'action onSubmit="" d'un formulaire n'est déclenchée que lors de la soumission du formulaire via un bouton submit ou une image. La fonction formulaire.submit() ne l'exécute pas et il te faut donc appeller ta fonction de contrôle avant cette commande (ou la lancer depuis ta fonction de contrôle) :)

Par ailleurs, un champ désactivé n'est pas envoyé. Si tu te bases sur la présence du nom du bouton de soumission pour exécuter ton traitement, il est normal que celui-ci ne se fasse plus :)

par finipe » 28 août 2006, 03:28

Ça fait partie des solutions que j'ai essayé, mais il se produit qqchose que je ne m'explique pas quand je procède comme ça : le formulaire est bien envoyé (quand je réactualise, il m'affiche le message "Cliquez sur Recommencer pour renvoyer les informations etc."), mais je ne récupère pas les valeurs.

De plus, j'ai un javascript qui vérifie que certains champs sont obligatoires, placé sur onSubmit dans la balise <form>, mais quand j'utilise le code ci-dessus, cette vérification ne fonctionne plus (alors qu'avec un bouton de type submit, ça roule tout seul).

Je tourne en bourrique avec ce problème, c'est agaçant :lol:

par albat » 27 août 2006, 16:07

à main levée, sans tester, je te propose quelque chose du genre :

Code : Tout sélectionner

<input type="button" onclick="this.disabled='disabled';form.submit();" />

Désactiver un bouton submit à l'envoi du formulaire

par finipe » 27 août 2006, 15:51

Bonjour,

Tout est dans le titre : j'aimerais pouvoir désactiver un bouton submit une fois qu'il a été cliqué, afin d'éviter notamment des doubles posts.

Je pensais que ce serait simple, mais en fait j'ai essayé pas mal de solutions et rien ne marche. Quelqu'un connaît-il la solution ?

Merci de votre aide !