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

PHP & Base de données Discussion :

Il me manque un détail sur les interactions PHP/HTML


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut Il me manque un détail sur les interactions PHP/HTML
    Bonjour à tous.

    Je risque encore de me faire remonter les bretelles avec mes usines à gaz, mais j'y vais quand-même.

    Je travaille sur un projet de gestion d'une base de données depuis une navigateur Internet. Bien entendu, tout ce qui touche à la base de données se passe en PHP/MySQL, et tout ce qui touche aux échanges avec l'utilisateur, en HTML.

    A un certain moment, je dois lire un fichier, décoder son contenu et exécuter des "INCLUDE" MySQL, et il peut y en avoir beaucoup, donc un long temps sans que rien ne bouge sur l'écran de l'utilisateur : c'est embêtant.

    J'imagine d'inclure dans ma boucle de traitement PHP une ligne
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     echo("<script>afficher($Noligne);</script>");
    où "afficher" irait écrire son argument dans une zone de l'écran, pour que l'utilisateur voie que "ça tourne". Mais je ne suis pas sûr que ça marche : je ne sais pas comment se synchronisent le déroulement du PHP, l'envoi des données au client, et l'exécution des appels javascript par rapport au flux HTTP.

    Et en plus je ne sais même pas si je suis assez clair pour me faire comprendre.

    Mais si par hasard je l'étais, merci de vos réponses.

    AMIcalement.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par L'AMI Yves Voir le message
    ...Et en plus je ne sais même pas si je suis assez clair pour me faire comprendre....
    "INCLUDE" MySQL, echo("<script>..... : bonjour le délire..........

    Je doute surtout que tu comprennes toi-même ce que tu veux faire !
    Avec des "explications" pareils, je ne vois pas quoi répondre...

    Parle-nous d'un VRAI exemple SIMPLE mais CONCRET.

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Bonjour.

    Où as-tu vu "INCLUDE" ? Tu as l'air d'être tellement sûr que je vais dire une bêtise qu'au besoin, tu l'inventes...

    Au moment d'écrire mon premier post, je n'avais le code que dans ma tête : difficile de copier/coller vers l'écran. Voici donc ce que j'ai codé :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
    //boursorama-5.php : Tests divers
    ?>
            <br /><h1>Téléchargement d'un fichier.</h1>
        <script>
          function affiche(c)
          {
            document.getElementById('roue').innerHTML=c;
          }
        </script>
    		<table>
            <tr><td>Fichier ici :</td><td><?php echo($_FILES["fichier"]["tmp_name"])?></td></tr>
            <tr><td>Fichier là-bas:</td><td><?php echo($_FILES["fichier"]["name"])?></td> </tr>
            <tr><td>Taille du fichier :</td><td><?php echo($_FILES["fichier"]["size"])?></td></tr>
            <tr><td>Type du fichier :</td><td><?php echo($_FILES["fichier"]["type"])?></td></tr>
            <tr><td>Est-ce que ça tourne ? :</td><td id='roue'> </td></tr>
        </table>
        <br />
    <?php
        set_time_limit(300);
    		$roue = array('|','/','-','\\');
        $temps=time() ;
        while(true)
        {  if($temps!=time())
          {
            $temps=time();
            echo("<script>affiche('".$roue[$temps % 4]."');</script>");
          }
        }
        Retour("../bienvenue.php");
     exit;
    Et, comme je le craignais, ça ne marche pas : la partie "HTML" générée par le php ne s'affiche qu'après que le "time-limit" s'est déclenché, en affichant effectivement quelque chose (ici, "-") dans mon champ "roue".

    J'essayais sans doute de faire un truc pas correct, mais quand-même pas au point que tu dis...

    Mais - si, maintenant tu as compris ce que je voulais faire - je repose ma question : est-ce possible ?

    AMIcalement.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Toujours pas......

    1- Soyons clairs :
    • PHP agit coté serveur, donc AVANT envoi des données au navigateur
    • JavaScript agit coté client, donc APRÈS affichage sur le navigateur
    • Si tu veux faire un traitement PHP sur une action du client, il faut utiliser JavaScript/Ajax.

    En l'occurrence, si c'est le traitement PHP qui prend du temps, ce sera forcément AVANT envoi des données au navigateur.
    Donc, quoi que tu écrives dans ton code, ça n'y chagera rien.

    2- Une solution pourrait être :
    • afficher la page, SANS ces traitements PHP longs (de lecture de fichiers,...)
    • avec un fonction JavaScript et grâce à Ajax, appeler un fichier PHP externe, qui fera ces traitements longs, et renverra les données traitées à la page via Ajax.



    3- Quant à "INCLUDE" MySQL, non je ne l'ai pas inventé.
    Relis ton 1er message :

    ...A un certain moment, je dois lire un fichier, décoder son contenu et exécuter des "INCLUDE" MySQL,...

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    587
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 587
    Par défaut
    Ah pardon ! C'est de ces INCLUDE là que tu parlais. Mais cette partie fonctionne parfaitement depuis longtemps (comme je l'ai déjà dit dans des posts antérieurs). J'ai cru que tu t'étais trompé sur ma phrase 'j'imagine inclure dans ma boucle...).

    Pour ce qui est des sempiternelles considérations sur le côté où s'exécutent PHP et le navigateur, merci, j'ai passé ce stade depuis quelques temps déjà.

    Le "détail" qui me manquait dans le titre de mon post, c'est précisément l'asynchronisme entre l'exécution d'une instruction php (en l'occurrence "echo") et le moment où le résultat arrive sur le poste : il n'est pas du tout évident (à mes yeux, en tout cas) qu'il soit impossible que le serveur exécute dans deux threads différents, d'un côté le lecture du fichier et les traitements qui vont avec, et de l'autre, l'expédition en ligne des données envoyées par "echo". D'ailleurs, n'y a-t-il pas une directive php concernant le "flush" ? Dans ce cas, les données arriveraient "au compte-goutte" sur le poste client, mais pourquoi ne pourrait-il pas les traiter "au fil de l'eau" ?

    C'est sur ces questions que mes connaissances sont un peu légères, d'où mon post...

    AMIcalement.

  6. #6
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        while(true)
        {  if($temps!=time())
          {
            $temps=time();
            echo("<script>affiche('".$roue[$temps % 4]."');</script>");
          }
        }
    C'est une boucle infinie ça ?

    Je me trompe ou bien tu essaies de faire une barre de progression pour faire patienter le client ?
    Si c'est cela, c'est en javascript, et il y a un script ici :
    https://javascript.developpez.com/ac...-parametrable/

    ou bien avec une librairie de base comme jqueryui

    https://jqueryui.com/progressbar/
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/05/2007, 19h32
  2. Détails sur les Conversions
    Par Fred2209 dans le forum Visual C++
    Réponses: 5
    Dernier message: 27/12/2006, 14h25
  3. Détails sur les progress Bar
    Par nbeligh dans le forum MFC
    Réponses: 2
    Dernier message: 11/09/2006, 11h10

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