Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/12/2006, 10h53   #1
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
Par défaut page d'attente ou désactivation formulaire?

bonjour tout le monde,

j'ai dans ma page index.php un formulaire avec un champs file et un bouton submit. quand on clique sur le bouton, une page traitement.php traite le fichier uploadé.

En fait j'ai deux questions :
- je souhaite empêcher l'utilisateur après avoir choisi un fichier de cliquer deux fois ou plus sur le bouton submit, une seule fois suffise. Alors soit une page d'attente soit une désactivation de la page ou quoi que se soit. Je suis preneur à toutes vos propositions mais j'aimerai bien éviter javascript au cas où l'utilisateur la désactive

- je souhaite que la page d'attente si c'est ce que vous préférez se lance juste après le clique car si je l'introduit dans traitement.php, elle ne sera affichée qu'après l'upload du fichier, ce qui laisse un temps à l'utilisateur à cliquer une dizaine de fois (plantage du serveur assuré)

mon message est un peu lent mais je crois qu'il est assez compréhensible
je vous remercie tous d'avance
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2006, 11h08   #2
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
Hello ,

a part le javascript ..... idem pour une barre de progression y en a une en libre mais c est du javacript....
__________________
Pas de questions techniques en MP please

Mon site perso
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2006, 14h44   #3
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
le fait d'empêcher l'envoi d'un formulaire plus qu'une fois est quelque chose de très essentiel dans bcp de domaines comme les banques, les site d'achats sur Internet... et même les sites les plus basiques

Alors ne me dis pas que ces sites se basent sur quelque chose qui peut être désactivé en une seconde par un client (je parle de javascript)!! il y a sûrement d'autres solutions!

je reste convaincu qu'on peut faire des choses avec les sessions, mais pour moi il reste encore des zones d'ombre en php que je maîtrise pas trop, alors je vais tester et creuser de cet coté. En attendant si quelqu’un a une idée quelconque, surtout qu'il n'hésite pas
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2006, 15h26   #4
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Bonjour,

A mon avis la meilleur solution est la page d'attente. Ce n'est pas non plus la meilleure car rien n'empèche de faire précédent ou F5.

Il faut coupler cette méthode avec un genre de fil d'attente des actions par utilisateurs au niveau du php. Cette partie requierant bien entendu l'tulisation des sessions.

Mais les sessions se basent également sur un élément modifiable/supprimable facilement : un vulgaire cookie

Après, il faut compte également avec le bon comportement de l'interanute.
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2006, 20h42   #5
Membre confirmé
 
Homme Emmanuel Thierry
Ingénieur systèmes et réseaux
Inscription : décembre 2003
Messages : 216
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Thierry
Âge : 24
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : décembre 2003
Messages : 216
Points : 219
Points : 219
Tu peux t'assurer qu'il ne poste pas 2 fois le même formulaire en placant une id unique en champ hidden dans le formulaire, c'est une première protection, mais contournable.
La seconde est de stocker l'IP et le Via Forwarding (me souvient plus exactement du nom) pour t'assurer qu'un même pc ne poste pas 2 fois de suite...
Sékiltoyai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 10h24   #6
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
je vous remercie vraiment pour vos idées, mais de la jusqu'à les mettre en place, c'est une autre histoire (en tout cas pour moi )

bon j'ai de la motivation, je suis bien partant sur l'idée d'une page d'attente
alors soit je parte sur un principe de
Code :
1
2
3
4
5
6
7
8
9
10
<?php
  session_start();
 
  echo("please wait...");
 
  sleep(15); //remplace ici le traitement
 
  $sid = strip_tags(SID);
  echo("<META http-equiv=\"refresh\" content=\"0; URL=index.php?$sid&page=result\">");
?>
dans ce cas, j'ai l'echo qui s'affiche apres les 15 secondes et non avant??? et en plus l'affichage n'est pas vraiment top puisque je passe pas par la page index

la deuxieme solution que j'aimerai bien mettre en place est de creer une page wait.php et comme ca mon code sera plutot de cette forme
Code :
1
2
3
4
5
6
7
8
9
<?php
  session_start();
 
  echo("<META http-equiv=\"refresh\" content=\"0; URL=index.php?$sid&page=wait\">");
 
  sleep(15);
 
  echo("<META http-equiv=\"refresh\" content=\"0; URL=index.php?$sid&page=convert\">");
?>
mais quand je fais ca, l'affichage de la page d'attente se fait apres un certain moment et puis rien?
franchement je m'en fou de la methode que j'utiliserai selement il faut que ca fonctionne
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 14h25   #7
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Citation:
Envoyé par SegmentationFault
le fait d'empêcher l'envoi d'un formulaire plus qu'une fois est quelque chose de très essentiel dans bcp de domaines comme les banques, les site d'achats sur Internet... et même les sites les plus basiques

Alors ne me dis pas que ces sites se basent sur quelque chose qui peut être désactivé en une seconde par un client (je parle de javascript)!! il y a sûrement d'autres solutions!

je reste convaincu qu'on peut faire des choses avec les sessions, mais pour moi il reste encore des zones d'ombre en php que je maîtrise pas trop, alors je vais tester et creuser de cet coté. En attendant si quelqu’un a une idée quelconque, surtout qu'il n'hésite pas
Je fais un petit hors-sujet, mais je crois que c'est la raison pour laquelle les banques et les sites d'achats en ligne ne s'appuient pas sur php. Il est parfois un peu limité du fait de sa simplicité.

Malgré tout, j'aime bien ce langage et je pense que ta demande est faisable. Mais pas forcément simple.
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 14h44   #8
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
Citation:
Envoyé par jml94
Je fais un petit hors-sujet, mais je crois que c'est la raison pour laquelle les banques et les sites d'achats en ligne ne s'appuient pas sur php. Il est parfois un peu limité du fait de sa simplicité
oui, j'en ai bien peur

en fait, je suis entrain de raffiner mon problème et je vais vous dire où est ce que j'en suis:
je crois que je vais quand meme utiliser javascript : j'ajoute cette ligne sur le bouton submit
Code :
onClick="this.form.submit(); this.disabled=true; this.value='Patientez...'"
ce bout de code désactive le bouton dés le premier clique ce qui m'évite déja les erreurs des utilisateurs innocents qui cliquent deux fois parce qu'ils croyent que n'avaient pas cliquer.

Ils me restent les petits malins : je peux tester que javascript est activé sinon erreur.
mais parce qu'il y a tjs un mais, si jamais l'internaute telecharge la page chez lui, il supprime la ligne dessus du code source de la page, et il active javascript, dans ce cas je suis mort... reste à trouver une solution pour ça aussi

FCYPBA avait dit :
Citation:
il faut compte également avec le bon comportement de l'interanute
je respecte ton point de vue, mais crois tu sincerement qu'il faut faire confiance à l'internaute???!!!
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 18h44   #9
Membre confirmé
 
Homme Emmanuel Thierry
Ingénieur systèmes et réseaux
Inscription : décembre 2003
Messages : 216
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Thierry
Âge : 24
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : décembre 2003
Messages : 216
Points : 219
Points : 219
Toute solution en js est à bannir car contournable, les protections se font côté serveur.
Tu peux faire ce que tu veux côté client, il restera toujours la possibilité à ceux qui s'y connaissent d'envoyer directement les informations au serveur sans passer par leur navigateur...
Sékiltoyai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2006, 15h50   #10
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
je suis tout à fait d'accord. En fait j'ai une idee, au lieu qu'à partir de la page principale je lance traitement.php, bein je lance plutot attente.php et c'est dans cette derniere que j'affiche le message d'attente et je lance traitement.php
j'espere que je me suis fait comprendre! en gros, dans traitement.php je fais ca:
Code :
1
2
header('Location: traitement.php?'.strip_tags(SID));
echo 'Veuillez patienter...';
mais bon ca ne marche pas trop : j'ai bien un affichage de message mais le traitement ne se lance pas (header + echo = erreur)
à part header, comment lancer une page php à partir d'une autre sans cliquer sur quoi que se soit
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2006, 16h29   #11
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
c bon je l'ai trouvé : nouvelle format de mon attente.php
Code :
1
2
echo 'Veuillez patienter...';
echo('<META HTTP-EQUIV="Refresh" CONTENT="0;URL=traitement.php?'.strip_tags(SID).'">');
et ca fonctionne tres bien, il reste le probleme de "precedent" et "F5"!!! mais bon si vous avez des idée
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2006, 16h36   #12
Membre confirmé
 
Homme Emmanuel Thierry
Ingénieur systèmes et réseaux
Inscription : décembre 2003
Messages : 216
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Thierry
Âge : 24
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : décembre 2003
Messages : 216
Points : 219
Points : 219
Je t'ai déjà donné une solution incontournable utilisant les IP, mais bon, vu que tu n'as pas l'air de vouloir l'utiliser...
Sékiltoyai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 11h11   #13
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
Citation:
Envoyé par Sékiltoyai
Je t'ai déjà donné une solution incontournable utilisant les IP, mais bon, vu que tu n'as pas l'air de vouloir l'utiliser...
j'ai jamais dis que ce n'est pas une tres bonne solution, mais dans mon cas precis ca peut etre un handicape : mon site traite un fichier uploadé, alors je ne veux pas empecher l'utilisateur d'ouvrir deux fois le site et lancer le formulaire des deux instances, ce que je veux c'est l'empecher de valider deux fois le meme (sur la meme page)! car ca arrete l'execution d'un script alors qu'il a deja lancé des exe...

Autre chose, je prend tous les messages en consideration et je vous en remercie tous d'ailleur, mais parfois ce n'est pas qu'ils ne sont pas interessants mais que je ne sais pas mettre la stratégie proposée en place
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 12h27   #14
Membre confirmé
 
Homme Emmanuel Thierry
Ingénieur systèmes et réseaux
Inscription : décembre 2003
Messages : 216
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Thierry
Âge : 24
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : décembre 2003
Messages : 216
Points : 219
Points : 219
bah si c'est juste pour empécher l'arrêt du script, tu utilises
Code :
exec("php script.php");
Sékiltoyai est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h08.


 
 
 
 
Partenaires

Hébergement Web