Page 1 sur 1

Comment permettre d'appuyer qu'une seule fois sur un bouton

Posté : 12 janv. 2007, 12:03
par Batista
Bonjour à tous, dans une de mes pages j'ai un formulaire de saisie avec un bouton qui insert dans une base SQL.
Quand on clic sur le bouton UNE SEULE FOIS : pas de pb nous avons qu'un seul enregistrement.
Mais si on reclic 2,3 ou 10 fois dessus (car on a largement le temps de le faire avec que l'insert soit terminé et que la redirection vers la page d'accueil ne se fasse) et bien dans ma base j'ai autant d'enregistrement que de clic sur le bouton.
Comment desactiver le bouton envoyé après un clic dessus ?

voici un extrait de ma page :
$insertGoTo = "../vente.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];

Posté : 12 janv. 2007, 12:09
par Ryle
Le plus simple est probablement de désactiver le bouton en javascript dès que l'utilisateur a cliqué dessus...

Code : Tout sélectionner

<input type="submit" value="Go" onClick="this.disabled = true;" />

Posté : 12 janv. 2007, 12:11
par Batista
Ok je vais eesayer ça

Posté : 12 janv. 2007, 12:14
par Batista
Le plus simple est probablement de désactiver le bouton en javascript dès que l'utilisateur a cliqué dessus...

Code : Tout sélectionner

<input type="submit" value="Go" onClick="this.disabled = true;" />
Mais n'y aurait il pas une solution en PHP ? car je voulais eviter le javascript dans mes pages ?
En plus c'est pas vraiment un submit mais un insert que j'ai tapé en php.
Merci d'avance

Posté : 12 janv. 2007, 12:21
par iclo
Lors de la première insertion, tu initialises une variable de session à une certaines valeur (par exemple à un)
Et avant de réaliser l'insertion tu testes cette variables, si elle est égale à la valeur, tu ne fais pas l'insertion. Comme ça, l'insertion n'est réalisée que la première fois.

Posté : 12 janv. 2007, 12:38
par Ryle
Bah ensuite, ça dépend de l'importance et du type de tes données...

Tu peux gérer les sessions comme le suggère iclo (mais faut trouver une solution pour shooter le flag afin qu'il puisse éventuellement en faire une nouvelle ensuite), tu peux aussi contrôler si des données identiques n'ont pas déjà été insérées, ou encore stocker et controller l'heure à laquelle a eu lieu l'insertion et imposer un délai minimum entre deux insertions, etc.

Posté : 12 janv. 2007, 15:59
par Batista
Lors de la première insertion, tu initialises une variable de session à une certaines valeur (par exemple à un)
Et avant de réaliser l'insertion tu testes cette variables, si elle est égale à la valeur, tu ne fais pas l'insertion. Comme ça, l'insertion n'est réalisée que la première fois.
Alors le probleme c'est que c'est une caisse informatique en faite donc il est possible que je vende un ballon en espece plusieurs fois . Il y a des ligne ds ma base qui seront identiques. Je ne veus pas non plus mettre un delai entre les enregistrements car la base est sur un intranet multi acces... Enfin j'ai oublié de vous dire que sur chaque pages ya un Start Session() pour l'authentification. Je veus juste desactiver le bouton une fois qu'on clicquer dessus. et sans javascript.
Impossible vous croyez ?
Merci d'avance.

Posté : 12 janv. 2007, 16:09
par Ryle
Tu peux essayer de bricoler un truc du genre générer un id unique (genre la date du jour avec heure minute seconde : date('YmdHis') ) que tu glisses en champ hidden lorsque tu affiches ton formulaire.

Lorsque tu récupères les données à insérer tu vérifies si l'id est en session :
- si non : tu le colles dans un tableau de ta session et tu fais l'insertion
- si oui : tu ne fais pas l'insertion, le formulaire a déjà été envoyé

:)