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 :

Temporisation echo PHP


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut Temporisation echo PHP
    Bonjour à tous,


    mon code "proc_import_csv.php" est fonctionnel en ce sens que les enregistrements sont bien faits. Le voici :

    Code : 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
    <?php
    ...
         $affectedRows = $pdo->exec("
         LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
         FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
         LINES TERMINATED BY ".$pdo->quote($lineseparator));
     
         ?>  <div id="info">Enregistré un total de </div>
     
         <?php
     
         $affectedRows . "lignes à partir du fichier : " . $csvfile;
     
         ?>
     
         <script language='javascript'>
                    temp=document.getElementById('info');
    	        setTimeout('temp.style.display="none"',10000);
     
         </script>
     
         <?php
     
     
         //fclose($file);
        }
     
        header('location:index.php');
    ?>
    Dans le but de pouvoir contrôler le nombre d'enregistrements réalisés par rapport au nombre de lignes du fichier .csv, je désire afficher un message qui doit pouvoir être lu pendant n secondes. Si je n'utilise pas la fonction header('location:index.php'), mais un href index.php, l'utilisateur doit cliquer sur "Retourner à la page d'accueil", ce que j'aimerais éviter en utilisant la possibilité de re-direction.

    La partie qui me pose souci, car l'affichage temporisé ne fonctionne pas est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
         ?>  <div id="info">Enregistré un total de </div>
     
         <?php
     
         $affectedRows . "lignes à partir du fichier : " . $csvfile;
     
         ?>
     
         <script language='javascript'>
                    temp=document.getElementById('info');
    	        setTimeout('temp.style.display="none"',10000);
     
         </script>
    Comment puis-je régler mon problème ?

    Merci d'avance pour votre aide.

    Cordialement
    Pascal

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 694
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 694
    Par défaut
    pendant que le traitement se fait coté serveur, vous souhaitez montrer à l'utilisateur la progression de ce traitement, c'est bien ça ?

    pour cela vous pouvez utiliser ajax comme dans ce module par exemple qui affiche la progression de l'upload d'un fichier :
    https://abciweb.developpez.com/module-upload-ajax-php/

  3. #3
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Bonjour mathieu,

    non, ce n'est pas la progression qui m'intéresse, mais l'affichage du résultat stocké dans la variable "$affectedRows" à la fin du traitement. J'utilise ce script java pour confirmer la connexion à la bdd et je pensais pouvoir l'utiliser dans cette procédure.

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 694
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 694
    Par défaut
    s'il s'agit d'afficher le nombre final d'enregistrements importés, il va y avoir une 1re page avec le bouton qui lance le traitement et une 2e page qui affiche le résultat.
    je ne comprend pas à quel moment vous avez besoin d'une temporisation ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Il y a en fait 3 pages :

    1 - Index.php avec un menu de sélection qui suite au choix ouvre :
    2 - import_csv.php qui permet de choisir le fichier csv à importer
    3 - proc_import_csv.php


    Code import_csv.php :

    Code html : 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
    <!DOCTYPE html>
    <html>
        <head>
                <title>Catalogue</title>
                <meta charset="utf-8">
                <link rel="stylesheet" href="css/style_csv.css"/>
        </head>
     
        <body>
            <h3>Ajout par lot</h3>
     
     
            <form enctype="multipart/form-data" action="proc_import_csv.php" method="POST">
            <div class="container">
                 <input name="file" type="file" />
                 <p><input type="submit" value="Envoyez le fichier" /></p>
            </div>
            </form>
        </body>
    </html>

    Le code proc_import_csv.php :

    Code : 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
    <?php
     
    require_once('connect.php');
     
    $db = $pdo->prepare("INSERT INTO trainset_prov (pays, repertoire, materiel, genre, simulateur, commentaire) VALUES(?,?,?,?,?,?)");
     
         $affectedRows = $pdo->exec("
         LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
         FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
         LINES TERMINATED BY ".$pdo->quote($lineseparator));
         $affectedRows . "lignes à partir du fichier : " . $csvfile;
     
        // C'est cet affichage qui doit durer une dizaine de secondes avant que index.php soit appelé
     
         //fclose($file);
     
        }
     
        header('location:index.php');
    ?>


  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 694
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 694
    Par défaut
    donc vous voulez afficher un message à l'utilisateur pour lui dire de patienter pendant que le traitement est en cours ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    non, ça n'a pas de sens dans mon cas, car temps de traitement est très court. Les volumes à traiter dépasseront rarement les 1000 lignes.

    une fois le traitement terminé, le programme affiche $affectedRows . "lignes à partir du fichier : " . $csvfile;, c-à-d en clair ça :

    Enregistré un total de 350 lignes à partir du fichier : Liste/Liste.csv.
    Retour à la page d'accueil
    La temporisation de cet affichage permettrait d'éviter de devoir cliquer sur "Retour à la page d'accueil" par l'utilisation de header('Location;index.php').

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 341
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 341
    Billets dans le blog
    17
    Par défaut
    C'est une redirection à échéance.

    Pas besoin de header(), sur ta 3e page, tu peux mettre dans ton <head> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="refresh" content="5; url=https://ton-site.net/une-page.php">
    => Tu seras redirigé vers https://ton-site.net/une-page.php au bout de 5 secondes

    Cependant il faut savoir qu'il s'agit d'une pratique pas spécialement recommandée, et que la meta refresh est dépréciée par le W3C.

  9. #9
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Bonjour,

    merci seb.

    Comme la meta refresh est dépréciée par le W3C, c'est délicat quand-même.

  10. #10
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 341
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 341
    Billets dans le blog
    17
    Par défaut
    Changer de page sans que l'utilisateur n'ait rien demandé est délicat également, alors l'un dans l'autre

    Même combat avec l'en-tête HTTP Refresh => header('Refresh: 5;url=https://site.com/page.php'); non standardisée

    Sinon tu peux aussi faire un JS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script>
    window.setTimeout(
        function() { location.href = "/page.php" }, 
        5000
    );
    </script>

  11. #11
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    C'est justement l'objet de ma demande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      $affectedRows = $pdo->exec
      (
        "LOAD DATA LOCAL INFILE "
        .$pdo->quote($csvfile)
        ." INTO TABLE `$databasetable` FIELDS TERMINATED BY "
        .$pdo->quote($fieldseparator)
        ."LINES TERMINATED BY "
        .$pdo->quote($lineseparator)
      );
     
      echo "Enregistré un total de $affectedRows lignes à partir du fichier : $csvfile.\n";
     
         exit;
    Dans le module de connexion, j'utilise ce script java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	  ?>  <div id="info">Connecté à la base de données avec succès.</div>
    	  <script language='javascript'>
     
                    temp=document.getElementById('info');
    	        setTimeout('temp.style.display="none"',5000);
     
    	  </script>
     
    	  <?php
    que j'ai essayé d'appliquer pour temporiser " echo "Enregistré un total de $affectedRows lignes à partir du fichier : $csvfile.\n";", mais sans succès.

    Changer de page sans que l'utilisateur n'ait rien demandé est délicat également, alors l'un dans l'autre
    C'est pas faux non-plus, mais avec un peu de pédagogie on peut l'avertir. En fait, la temporisation n'est là que pour s'assurer que le nombre d'enregistrements correspond aux nombre de lignes du .csv. A ce stade, j'hésite entre donner ou prendre la main à l'utilisateur.

  12. #12
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 694
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 694
    Par défaut
    le souci est que si l'utilisateur n'est pas attentif à son écran à ce moment, il va louper le message. c'est pour ça que ce n'est pas recommandé de faire disparaitre le message tant que l'utilisateur n'a pas confirmé qu'il l'a bien lu.

    pour gagner du temps de chargement, au lieu de faire une page intermédiaire vous pouvez afficher la page d'accueil avec un bandeau "Enregistré un total de 84 lignes à partir du fichier".

  13. #13
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    C'est effectivement une possibilité. Je suis en train de me compliquer la vie. Je vais tout simplement laisser la main à l'utilisateur. Ce sera plus poli !

    Grand merci à tous pour votre aide.

    Cordialement
    Pascal

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

Discussions similaires

  1. Javascript dans un echo PHP de fonctionne pas
    Par Ed la poignee dans le forum Langage
    Réponses: 1
    Dernier message: 24/03/2009, 16h31
  2. Balise HTML dans echo PHP
    Par ju0123456789 dans le forum Langage
    Réponses: 7
    Dernier message: 24/11/2008, 14h42
  3. récupérer un echo php dans swf avec as3
    Par sanatou dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 05/06/2008, 15h25
  4. propriété width zappée dans un echo php
    Par skyangel20 dans le forum Langage
    Réponses: 2
    Dernier message: 15/10/2007, 11h30
  5. [Mail] Temporisation en PHP
    Par Ylias dans le forum Langage
    Réponses: 4
    Dernier message: 11/02/2006, 22h39

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