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 :

Problème blocage du navigateur


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2011
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Points : 31
    Points
    31
    Par défaut Problème blocage du navigateur
    Bonjour,

    Je travaille actuellement sur une interface PHP qui communique avec une BDD en SQL. J'ai une page php qui fait appel à plusieurs procédures stockées qui demande en général 1 à 2 mins d’exécution.

    J'aimerai simplement faire un petit message qui dit a l'utilisateur chargement en cours ou un gif animé qui montre le chargement de la page, mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <SCRIPT LANGUAGE="JavaScript">
    window.open ('chargement.php', 'Chargement en cour', config='height=100, width=400, toolbar=no, menubar=no, scrollbars=no, resizable=yes, location=no, directories=no, status=no')
    </SCRIPT>
    <?php
    lancement des procédures SQL...
    ?>
    Seulement l'orque l'utilisateur arrive sur la page le navigateur ce "bloque" et le popup de chargement ne se lance pas une fois les procédures SQl terminées tout se passe bien mais comment faire apparaître un message à l'utilisateur pendant que PHP/SQL travaille derrière.

    Merci

  2. #2
    Membre actif
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Points : 286
    Points
    286
    Par défaut
    j'aurais fais une requete ajax plutot, un exemple pour que tu comprenne l'algorithme (l'exemple est fait avec jQuery, je ne sais plus faire du javaScript normal ....) :

    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
     
     
    <script type="text/javascript">
     
    function ajax_avec_message_d_attente() {
        // on affiche le message d'attente, par exemple le gif animé
        $("#div_attente").show();
     
        $.ajax({
             url : 'url_de_mon_script.php',   // l'URL ou s'exécute ton script qui dure une minute
             success : function(resp) {
                    // fonction s'exécutant quand le requete est finie
     
                   // on cache le message d'attente
                   $("#div_attente").hide();
     
                   // on traite la réponse (ici, j'insère la réponse à la fin de la page)
                   $(resp).appendTo($("body"))
     
             }
        });
    }
     
    </script>
    En faisant ca ton navigateur attend la réponse du serveur, sans bloquer l'utilisateur !

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Sépare le code responsable de l’exécution des procédures de celui qui produit la page et fait un appel asynchrone (avec Ajax) via JavaScript comme montré plus haut.

    Attention: si les appels de procédure sont susceptibles de dépasser le temps maximal alloué à PHP, il serait judicieux d'élever le max execution time de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    set_time_limit(0); // l'histoire sans fin
     
    sleep(24 * 3600 * 10); // allez hop, 10 jours de vacances !
     
    echo "Quel long someil...",
    @ticroch ton code est juste, j'ajouterai juste ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $(function () {
      $.ajax({
        url : 'processing.php',
        dataType: 'html',
        beforeSend: function () { $('#loading').show() },
        complete: function () { $('#loading').hide() },
        success: function (data) { $('#result').html( data ) },
        error: function () { $('#result').html('-- ERROR --') }
      });
    });

  4. #4
    Membre actif
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Points : 286
    Points
    286
    Par défaut
    ah je connaissais pas les beforesend et complete, c'est vrai que c'est plus propre que ce que j'ai fait :p

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    T'as l'option context qui est bien pratique aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $(function () {
      $.ajax({
        url : 'processing.php',
        dataType: 'html',
        context: $('#result'),
        beforeSend: function () { $('#loading').show() },
        complete: function () { $('#loading').hide() },
        success: function (data) { $(this).html( data ) },
        error: function () { $(this).html('-- ERROR --') }
      });
    });
    Pour tout le reste, y'a la doc.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2011
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Merci pour la réponse effectivement Ajax semble être la meilleur solution parcontre Jquery je ne maîtrise pas mais alors pas du tout je vai voir si je trouve un truck Ajax/JS.

  7. #7
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Tu ira plus vite avec jQuery (même si tu connais pas et que tu découvres) que si tu dois tout apprendre de JavaScript. Tu trouvera tous les tutos qu'il te faut sur jQuery par ici: http://javascript.developpez.com/cours/

Discussions similaires

  1. Problème Vista et navigateurs (IE7, Firefox3, Chrome)
    Par copin dans le forum Windows Vista
    Réponses: 3
    Dernier message: 23/01/2009, 17h14
  2. [AJAX] Blocage du navigateur avec ajax
    Par Gallay dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/10/2008, 15h27
  3. Problème ouvrir le navigateur web
    Par dan_lizhot dans le forum Web & réseau
    Réponses: 0
    Dernier message: 02/02/2008, 04h41
  4. Réponses: 2
    Dernier message: 03/04/2007, 16h31
  5. [HTML][CSS] Problèmes affichage suivant navigateur
    Par chillansky dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 14/04/2006, 17h49

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