forcer execution script PHP ou empecher fermeture fenetre? - PHP - Programmation
Marsh Posté le 17-10-2003 à 14:03:43
oua lors empecher de fermer la fenetre tant que les données de la fenetre ne ce sont pas affiché entièrement et qu'il n'a pas cliqué sur un bouton "fermé"
Marsh Posté le 17-10-2003 à 15:32:09
Pour plus d'info , mon problème:
Certain utilisateurs de l'entreprise valideont des produits sur l'intranet , mais si il ferme la fenetre avant que le cahregement soit terminé , l'ajout des produits , et les differentes etapes risuqes de se faire a moitié . Ce qui peut etre un tres gros pb.
Je veuxtrouvé un moyen pour que tout soit fait dès que l'on clique sur le bouton ajouté.
soit en demandnat au PHP de continuer meme si la fenetre est fermé , sois en empechnat la fermeture de la fenetre.
Si vous avez une autre idée n'hésitez pas
merci
Marsh Posté le 17-10-2003 à 15:45:31
En fait tu devrais rediriger l'utilisateur sur une page de confirmation quand ton operation est finie comme ça il n'y a plus de pb. Il suffit d'indiquer que tant que la page de validation n'est pas affichée l'utilisateur ne doit pas fermer le browser. Tu peux aussi utiliser des transactions si tes données sont stockées dans une BD pour eviter de mettre a jour ta BD quand le script ne se termine pas correctement.
Marsh Posté le 17-10-2003 à 15:51:29
impulse a écrit : En fait tu devrais rediriger l'utilisateur sur une page de confirmation quand ton operation est finie comme ça il n'y a plus de pb. Il suffit d'indiquer que tant que la page de validation n'est pas affichée l'utilisateur ne doit pas fermer le browser. Tu peux aussi utiliser des transactions si tes données sont stockées dans une BD pour eviter de mettre a jour ta BD quand le script ne se termine pas correctement. |
l'idée d'indiquer aux utilisateurs de ne pas fermé la fenetre tant que l'execution n'est pas terminé n'est pas possible , car il y a aura toujours des personnes qui fermeront quand meme , sans faire expres ou non ;o)
Meme si l'utilisateur confirme il devra quand meme a un moment donné allé sur une page qui execute du PHP etsuavegarde dans des bases et donc il y a toujours le meme probleme non?
c'est quoi cette histoire de transaction? tu appelles quoi par transaction?
meme si je crée des tables temporaires , il y a aura toujours un moment ou il faudra copier les enregistrement dasn les vrais tables et donc : execution d'une page et donc risuqe d'etre fermé ;o)
mais peut etre que j'ai mal compris
Marsh Posté le 17-10-2003 à 16:01:51
Saxgard a écrit : Voila |
Oui/Non ! (par défaut, c'est Oui...)
C'est à toi de choisir : http://fr.php.net/manual/fr/featur [...] ndling.php
Marsh Posté le 17-10-2003 à 16:02:28
Citation : l'idée d'indiquer aux utilisateurs de ne pas fermé la fenetre tant que l'execution n'est pas terminé n'est pas possible , car il y a aura toujours des personnes qui fermeront quand meme , sans faire expres ou non ;o) |
Tu as le meme probleme sur n'importe quel site de vente en ligne si l'utilisateur ferme la fenetre pendant que le site est en train de joindre la banque par exemple. Si les differentes etapes sont clairement indiquées et que l'utilisateur a un QI normal ça ne devrait pas poser de probleme. De toute façon tu pourras pas empecher un utilisateur de fermer l'appli si il/elle veut absolument le faire : au pire il pourra tirer le cable d'alim du PC.
Pour les transactions je te laisse lire la doc de MySQL par exemple => http://www.mysql.com/doc/en/Transa [...] mands.html
Marsh Posté le 17-10-2003 à 16:03:55
Mara's dad a écrit : |
je te remercie , ca me parait tres intressant.
Marsh Posté le 17-10-2003 à 16:04:40
impulse a écrit :
|
merci merci ;o)
Marsh Posté le 17-10-2003 à 16:05:18
Citation : Oui/Non ! (par défaut, c'est Oui...) |
Ah oui, c'est pas mal ça tiens. Enfin bon, il vaut mieux eduquer les utilisateurs pour qu'ils utilisent l'appli correctement plutot que d'avoir recours a cette solution "extreme".
Marsh Posté le 17-10-2003 à 16:07:24
Y'a aussi des modems qui coupent la com, ou des pannes de courrant... Si c'est possible, çà arrivera, et si c'est impossible çà arrivera quand même. Donc faut le gérer
Marsh Posté le 17-10-2003 à 16:09:57
impulse a écrit : cette solution "extreme". |
C'est pas extrème.
Si ton appli en a besoin, y'a pas de problème...
Faut juste vérifier que le client est toujours là avant de faire un echo()... Ou bien utiliser la bufferisation en sortie.
Marsh Posté le 17-10-2003 à 16:10:32
impulse a écrit :
|
oauis mais malheuresement il ya des utilisateurs qui n'aime pas l'informatique , etc.. et qui sont pas tres malin et qui saves meme pas lire ou faire les choses dans l'ordre
Puis mon chef veut que je prevoit tt se qui est possible de prévoire
Marsh Posté le 17-10-2003 à 16:26:13
impulse a écrit :
|
je vient d'aller voir pour les transactions. ca al'air excelent mais la pour l'instant je travail avec un MySql plus vieux que la version 4 et donc ca ne prend pas en compte les transactions (et c'ets bien dommmage)
c'est quoi ces tables de type innoDB?
Marsh Posté le 17-10-2003 à 16:58:00
si je met ca :
Code :
|
au debut de mon code , je ne risuqe pas de me retrouver un serveur bloquer par une mauvaise boucle infini?
j'aurais bine mon script PHP qui continuera meme si onferme la fenetre mais qui s'arretera au bout de 60s d'activité?
Parceque j'aimerai pouvoir empecher le blocage des serveurs a cause d'une mauvaise boucle ou requete ;o)
Marsh Posté le 17-10-2003 à 17:00:56
C'est bon.
T'as essayé la déconnexion ?
Marsh Posté le 17-10-2003 à 17:05:20
Mara's dad a écrit : C'est bon. |
euh non ;o)
mais comment ca marche
Code :
|
je n'ai pas bien compris l'idée de base de cette fonction ;o)
PS : je suis vraiment degue pour les transactions ca avait l'air vraiment quelquechose de bien , c'est uen bonne sécurité
Marsh Posté le 17-10-2003 à 21:19:39
Yes, mais bon, quand on choisi MySql, on le fait quand même en sachant que c'est pas Oracle
Enfin normalement...
Marsh Posté le 17-10-2003 à 22:00:31
register_shutdown_function( string func )
Cette fonction te permet de demander à PHP d'éxécuter une fonction à toi quand le script normal est terminé.
Ca permet par exemple de mette à jour des stats, fermer des fichiers, des bases de données...
Dans cette fonction, tu ne peux plus envoyer d'info au client car le canal est fermé.
En fait, c'est quasi jamais utilisé.
Cet que tu peux faire pour tester que ton script continue à tourner après la déconnexion de l'utilisateur, c'est un truc du genre :
Code :
|
Tu appelles cette page, et tu ferme vite la fenêtre.
Ensuite, tu fais pointer ton buttineur sur test.txt
Si la dernière ligne est : 'Connexion fermée !', c'est que çà marche.
Si çà marche pas, la dernière ligne est : 'Connexion ouverte'.
Chez moi, çà marche !
Attention, ferme très vite ton buttineur, ou clic sur stop, sinon, le ficher test.txt devient très très vite ENORME
La boucle for sert à ralentir le script, mais bon c'est juste un exemple...
Attention, le script ne détecte la coupure de connexion que si tu essaye d'envoyer quelque-cose au client.
Si tu enlève la ligne echo("Test coupure connexion<br>" ); ton script ne verra rien
Bref, en fait c'est pas évident à utiliser ce truc...
Marsh Posté le 17-10-2003 à 22:29:38
De deux chôse l'une :
ou tout est fait en une seule étape (une seule page web avant confirmation finale) et a ce moment là, on s'en fout que l'utilisateur ai fermé son navigateur vu que le script continuera a être exécuter comme d'habitude.
ou c'est fait en plusieurs étapes et là, les transactions au niveau base de donnée ne serviront à rien.
Marsh Posté le 03-03-2011 à 20:07:37
Mara's dad a écrit : register_shutdown_function( string func )
|
Ca à l'air vraiment très puissant, Je dis bravo et je vais tester de ce pas.
Marsh Posté le 17-10-2003 à 14:00:49
Voila
lorsqu'un uilisateur ouvre une page , j'execute des operations importantes en PHP et il me semble que si l'utilisateur ferme la page alors que l'execution de celle ci n'est pas fini alors l'execution s'arrete la ou ele en était , non?
hors moi j'aimerai forcé l'execution des intructions intégré dans cet page , enfin trouvé un moeyn que l'execution ne soit pas coupé en cours.
merci d'avance.
Message édité par saxgard le 17-10-2003 à 14:54:43