Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3451 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Faire patienter le surfeur...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Faire patienter le surfeur...

n°1358997
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 03-05-2006 à 18:42:58  profilanswer
 

Voilà, je suis sur un projet qui affiche un résultat de requête qui peut grimper haut en temps de génération, de l'ordre de plusieurs secondes.
 
Donc, pensant toujours à mes petits utilisateurs impatients, j'ai voulu leur laisser un message pour qu'ils patientent un peu, j'ai donc penser que cette technique marcherait.
 
L'utilisateur appelle mapage.php :

Code :
  1. (...) un script d'appel à la base de données, tout ça.
  2. ob_start();
  3. if (!isset($_GET['continue'])) { ?>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head>
  7. <title>MaPage</title>
  8. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  9. </head>
  10. <body>
  11. Patientez s.v.p.
  12. <?php
  13. ob_end_flush();
  14. $redir='mapage.php?continue=1';
  15. header('location:'.$redir);
  16. die('');
  17. }


 
Bon, pour ceux qui n'aurait pas compris, ma page fonctionne selon ce principe :
L'utilisateur appelle mapage.php, mon script ne trouve pas le $_get['continue'] donc il devrait afficher un message "patientez..." et je fais une redirection sur ma page en rajoutant le fameux continue=1, comme ça mon script passera sur cette condition au second appel.
 
Jusque là, ça me semble logique, sauf que ça ne fonctionne pas, ma page reste blanche tant que la page n'est pas générée sans afficher de message patientez... :/

mood
Publicité
Posté le 03-05-2006 à 18:42:58  profilanswer
 

n°1359003
omega2
Posté le 03-05-2006 à 18:57:15  profilanswer
 

Dit moi, c'est normal l'abscence de "else" entre le "if" et la partie censé être exécuté quand la condition est fausse?
En plus, tel que tu as écrit ton code, si "$_GET['continue']" n'existe pas, ca t'affiche le message d'attente ce qui est l'inverse de ce que t'indique.
 
PS : Vu que le header de redirection est situé juste aprés l'envoie de texte au navigateur faut de "else" dans ton code, la redirection n'a aucune chance de fonctionner. (une fois du texte envoyé au navigateur, aucun envoie d'header ou de cookie n'est possible)

n°1359007
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 03-05-2006 à 19:05:51  profilanswer
 

omega2 a écrit :

Dit moi, c'est normal l'abscence de "else" entre le "if" et la partie censé être exécuté quand la condition est fausse?
En plus, tel que tu as écrit ton code, si "$_GET['continue']" n'existe pas, ca t'affiche le message d'attente ce qui est l'inverse de ce que t'indique.
 
PS : Vu que le header de redirection est situé juste aprés l'envoie de texte au navigateur faut de "else" dans ton code, la redirection n'a aucune chance de fonctionner. (une fois du texte envoyé au navigateur, aucun envoie d'header ou de cookie n'est possible)


Oui, je me suis trompé, c'est quand le "continue" n'existe pas que le message de patientez devrait s'afficher, enfin, tu as compris le principe.
 
Autrement, le else ne sert à rien dans le sens ou si le $_GET continue n'existe pas, la condition n'est pas rempli, il passe à la suite autrement, il vide le buffet (il devrait l'afficher, c'est mon problème) et lance sa redirection.
 
Pour le header tu as raison, bizarre que je n'ai pas eu de message d'erreur.
 
Mais bon, j'ai corrigé :  

Code :
  1. header('location:'.$redir,100);
  2. ob_end_flush();
  3. die('');


Je lance un header temporisé, je vide mon buffet et je tue le script.
Mais ça ne fonctionne toujours pas.
Effectivement, une fois l'header envoyé, même temporisé, la cloture de mon buffet ne risque pas d'envoyer grand chose. :/
 
Zut, comment faire ? :/

n°1359008
Sve@r
Posté le 03-05-2006 à 19:06:02  profilanswer
 

The-Shadow a écrit :

Voilà, je suis sur un projet qui affiche un résultat de requête qui peut grimper haut en temps de génération, de l'ordre de plusieurs secondes.
 
Donc, pensant toujours à mes petits utilisateurs impatients, j'ai voulu leur laisser un message pour qu'ils patientent un peu, j'ai donc penser que cette technique marcherait.
 
L'utilisateur appelle mapage.php :

Code :
  1. (...) un script d'appel à la base de données, tout ça.
  2. ob_start();
  3. if (!isset($_GET['continue'])) { ?>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head>
  7. <title>MaPage</title>
  8. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  9. </head>
  10. <body>
  11. Patientez s.v.p.
  12. <?php
  13. ob_end_flush();
  14. $redir='mapage.php?continue=1';
  15. header('location:'.$redir);
  16. die('');
  17. }


 
Bon, pour ceux qui n'aurait pas compris, ma page fonctionne selon ce principe :
L'utilisateur appelle mapage.php, mon script ne trouve pas le $_get['continue'] donc il devrait afficher un message "patientez..." et je fais une redirection sur ma page en rajoutant le fameux continue=1, comme ça mon script passera sur cette condition au second appel.
 
Jusque là, ça me semble logique, sauf que ça ne fonctionne pas, ma page reste blanche tant que la page n'est pas générée sans afficher de message patientez... :/


 
Je suis impressionné par l'ingéniosité de ce script (bon, comme l'a dit qqun un jour, vu mon "faible" niveau en php il n'en faut pas beaucoup pour m'impressionner :) )
Cependant j'y vois 2 pb
1) si continue n'existe pas, tu regénères un en-tête HTML. Mais cet en-tête n'est pas déjà présent au début de ta page ? => bon, pas très grave car le vrai pb est en 2
2) le principe de php est qu'il est appelé par un module d'Apache. Ce module traite tout le code et, [u]quand il a finit, rend la main à Apache qui renvoie le HTML au client (sauf en cas de "die" où là, tout s'arrête).
CLIENT -demande-> Apache -Envoi script-> Module PHP
 
ModulePHP -EnvoiRésultatHTML-> Apache -Affiche HTML-> CLIENT          
 
                                                         
Toi, tu cherches à faire une espèce de "va-et-vient" incessant du style
- j'affiche "Patientez" (chez le client)
- en-même temps, je calcule mon résultat (du coté du module PHP) et je reboucle
Ingénieux... mais impossible. Désolé


Message édité par Sve@r le 03-05-2006 à 19:10:14

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1359009
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 03-05-2006 à 19:11:20  profilanswer
 

Bon bah je vais compenser par une redirection hteumeuleu, tant pis. :D

n°1359012
Sve@r
Posté le 03-05-2006 à 19:13:04  profilanswer
 

The-Shadow a écrit :

Zut, comment faire ? :/


Pourquoi ne pas générer une 2° page HTML en javascript avant le long calcul ?
Tu indiques dans cette 2° page que le remplissage de la 1° peut-être assez long...
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1359015
The-Shadow
Développeur
T'as été voir dans ton profil?
Posté le 03-05-2006 à 19:18:00  profilanswer
 

Sve@r a écrit :

Pourquoi ne pas générer une 2° page HTML en javascript avant le long calcul ?
Tu indiques dans cette 2° page que le remplissage de la 1° peut-être assez long...


Parce que je veux éviter au maximum le js quand ce n'est pas indispensable.
 
C'est bon, j'ai résolu mon problème, si continue n'existe pas, je fais un  

Code :
  1. <?php
  2. $redir='mapage.php?continue=1';
  3. ?> <meta http-equiv="Refresh" CONTENT="0;URL=<?php echo $redir; ?>">


 
C'est moins "propre" qu'une redirection en php, mais ça fonctionne impeccable comme ça. :D


Message édité par The-Shadow le 03-05-2006 à 19:18:27
n°1359131
Djebel1
Nul professionnel
Posté le 04-05-2006 à 02:08:32  profilanswer
 

Le js dans ton cas est une solution tout à fait acceptable. Ca ne nuit pas du tout à l'accessibilité, ça rajoute simplement une ptite fonctionnalité que un bon 90% de tes utilisateurs pourront avoir. Franchement, y a carrément pas de soucis.
 
J'irai même juste qu'à dire que c'est mieux, car y a pas un chargement de page inutile.


Message édité par Djebel1 le 04-05-2006 à 02:09:04

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Faire patienter le surfeur...

 

Sujets relatifs
patienter pendant l'upload d'une imageFenêtre pour patienter pendant traitement
[VB6] Comment faire patienter l'utilisateur ?[flash5] comment faire patienter pendant le chagement d'une animation?
[PHP] Recuperer l'ip du surfeur 
Plus de sujets relatifs à : Faire patienter le surfeur...


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)