IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

barre d'avancement html ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Avril 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 10
    Par défaut barre d'avancement html ?
    Bonjour,

    Je voulais créer une barre d'avancement pour que l'utilisateur de mon site sache où en est son import de fichier dans la base (un gros fichier texte extrait d'une base de données que j'injecte dans ma base de données). Un besoin plutôt classique auquel je ne pense pas être le seul à avoir pensé. j'ai créé la barre avec une div comme suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<div class=\"avancement\">Avancement <input name=\"pourcent\" type=\"text\" class=\"percent\" readonly size=\"4\" value=\"0%\"></div>";
    et je prévoyais d'envoyer de nouveaux pourcentages au fil de ma fonction à l'aide de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<script language=\"javascript\">document.getElementById('pourcent').value=\"3%\";</script>";
    Et puis je me suis demandé : comment puis-je envoyer des pourcentages mis à jour qui s'affichent sur le client ? Bonne question, non ? Le script php est plutot fait pour faire des calculs et envoyer une page en une fois, point barre, n'est-ce pas ?

    Est-il possible d'envoyer en php des morceaux de code html qui s'affichent sur le navigateur du client au fur et à mesure au lieu d'afficher une page d'un seul coup ?

  2. #2
    Membre Expert
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Par défaut
    bonjour,

    tu as une librairie PEAR qui fait ca tres bien
    http://pear.php.net/package/HTML_Progress
    pour php5
    http://pear.php.net/package/HTML_Progress2

  3. #3
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    oui, c'est possible, de cette maniere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    set_time_limit(0); // par defaut, un script php est limité a 30 secondes d'execution... cette commande enleve cette limite, est-il besoin de préciser que ca ne marche pas sur les hebergeurs gratuits ?
     
    for($i=0; $i<100; $i++) {
    echo '.'; flush();
    sleep(1); // tu fait un traitement qui dure 1 seconde
    }
    ?>
    Ce morceau de code va afficher un point (.) toutes les secondes pendant 100 secondes.
    Si tu veux faire un truc plus joli, rien ne t'empeche d'afficher une image d'une barre verticale d'un, deux ou trois pixels.

    Par contre, une fois que le traitement est arrivé au bout, tu ne peux pas faire une redirection php avec un header puisque du code a été envoyé. Mais tu peux afficher un lien, ou utiliser une redirection javascript.

  4. #4
    Membre éclairé Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Par défaut
    Moi j'ai utilisé une solution qui n'est certes pas la meilleure mais bon...

    quand je clique sur le bouton ca m'ouvre un popup qui contient la barre d'avancement

    dans mon code d'import/export a chaque étape importante j'ecris le numero correspondant dans un fichier texte.

    sur mon popup je mets un refresh toutes les secondes. le popup lui se contente de lire le chiffre qui est dans le fichier texte et d'afficher une phrase et une image correspondante, l'image matérialisant la barre d'avancement...
    Par exemple si j'ai un import ou j'ai deocupé 6 étapes je découpe ma barre d'avancement en 6 images...

    Certes l'import d'images peut etre lourd mais si tu fais pas un truc super designé tu t'en tire avec des images de moins de 20ko et alors la il n'y a plus aucun probleme.

  5. #5
    Membre habitué
    Inscrit en
    Avril 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 10
    Par défaut
    Super, merci à tous pour vos réponses variées !

    Perso j'ai choisi d'utiliser flush(), qui est idéale pour mon cas et très simple !!

    Ca répond à une question que je me posais dpeuis un moment en plus !

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Barre d'avancement boucle DO
    Par agaillot dans le forum Fortran
    Réponses: 28
    Dernier message: 10/04/2017, 12h28
  2. Afficher une barre d'avancement dans une fenêtre
    Par Olivier.p dans le forum VBScript
    Réponses: 8
    Dernier message: 05/08/2010, 17h01
  3. Creer une barre d'avancement avec FORMS
    Par bm_oracliste dans le forum Forms
    Réponses: 3
    Dernier message: 19/11/2007, 13h47
  4. Barre d'avancement d'une tâche
    Par Wolfgang31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/09/2007, 18h05
  5. barre d'avancement pour la lecture d'un mp3 : Pb onChange!
    Par avogadro dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/12/2006, 20h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo