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

AJAX Discussion :

[AJAX] Récupérer le résultat d'une requête mySql stockée dans un fichier PHP


Sujet :

AJAX

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 10
    Points
    10
    Par défaut [AJAX] Récupérer le résultat d'une requête mySql stockée dans un fichier PHP
    Bonjour,

    Pour développer un module Prestashop ( slider lié à une base mySql ) il me reste une étape que je n'arrive pas à franchir.

    Je souhaite passer une requête Ajax (sans jQuery), qui aille exécuter un fichier PHP contenant une requête mySql. Je voudrais ensuite pouvoir traiter la réponse de cette requête dans le Javascript (informations textuelles uniquement ).

    Voici le code dans mon fichier JS (juste la partie concernée):

    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
    function getXMLHttpRequest() {
    			var xhr = null;
     
    			if (window.XMLHttpRequest || window.ActiveXObject) {
    				if (window.ActiveXObject) {
    					try {
    						xhr = new ActiveXObject("Msxml2.XMLHTTP");
    					} catch(e) {
    						xhr = new ActiveXObject("Microsoft.XMLHTTP");
    					}
    				} else {
    					xhr = new XMLHttpRequest(); 
    				}
    			} else {
    				alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
    				return null;
    			}
     
    			return xhr;
    		}
     
    var xhr = getXMLHttpRequest(); 
    			xhr.open("GET", "ajaxslider.php", true);
    			xhr.send(null);
    Et voici le code de ajaxslider.php :

    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
    <?php
     
    $slides = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
    			SELECT hs.`id_homeslider_slides` as id_slide,
    					   hssl.`image`,
    					   hss.`position`,
    					   hss.`active`,
    					   hssl.`title`,
    					   hssl.`url`,
    					   hssl.`legend`,
    					   hssl.`description`
    			FROM '._DB_PREFIX_.'homeslider hs
    			LEFT JOIN '._DB_PREFIX_.'homeslider_slides hss ON (hs.id_homeslider_slides = hss.id_homeslider_slides)
    			LEFT JOIN '._DB_PREFIX_.'homeslider_slides_lang hssl ON (hss.id_homeslider_slides = hssl.id_homeslider_slides)
    			WHERE (id_shop = '.(int)$id_shop.')
    			AND hssl.id_lang = '.(int)$id_lang.
    			($active ? ' AND hss.`active` = 1' : ' ').'
    			ORDER BY hss.position');
     
     
    		return $slides;
    ?>

    Ensuite, au chargement de la page, je vais dans Firebug qui me dit dans Headers : "status 404", puis dans Réponse, j'ai tout le code de la page d'accueil du site...

    J'ai même essayé en mettant en simple echo dans le fichier ajaxslider.php, mais idem.

    Pour la fonction getXMLHttpRequest, j'ai essayé environ 20 méthodes différentes d'Ajax pour traiter ma réponse, toute me retournent la même réponse.

    Merci d'avance :p

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Rien ne va dans ton code
    1) le php appelé doit n'avoir aucune sortie vers le client.
    il concatenes (y compris avec des "<br />" une variable par exemple
    $reponse et fait un seul echo de cette variable.
    2) dans ces conditions, si par exemple dans ta page tu as
    un DIV ID=toto tu fais ainsi
    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
     
    <script type="text/javascript">
    function maFonctionAjax()
     {
      var MonAjax;
      if (window.XMLHttpRequest){ MonAjax = new XMLHttpRequest();}
      else if (window.ActiveXObject) {MonAjax = new ActiveXObject('Microsoft.XMLHTTP');}
      else {
        alert("Votre navigateur n'est pas adapté pour faire des requêtes AJAX..."); 
        MonAjax = false;   }
      MonAjax.open('POST',"ajaxslider.php",true);
      MonAjax.onreadystatechange = function()
      {
          if (MonAjax.readyState == 4 && MonAjax.status == 200)
          {
              document.getElementById('toto').innerHTML = MonAjax.responseText;}
          }
      }
      MonAjax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
      MonAjax.send();                  
     }
    maFonctionAjax();
    </script>
    Dernière modification par Invité ; 06/02/2013 à 14h25.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 10
    Points
    10
    Par défaut L'erreur est encore la même
    J'ai modifié le fichier php par un simple echo pour tester, mais j'ai toujours l'intégralité de la page d'acceuil de mon site dans le réponse Ajax.

    J'ai aussi relevé que je ne rentre pas dans cette boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (MonAjax.readyState == 4 && MonAjax.status == 200)
          {
              document.getElementById('toto').innerHTML = MonAjax.responseText;}
          }
    *J'ai enlever une accolade sur la ligne au dessus de MonAjax.setRequestHeader, elle était en trop je crois.

    Voici mes fichiers tels qu'ils sont maintenant :

    Fichier JS :
    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
    function maFonctionAjax()
    		{
    			var MonAjax;
    			if (window.XMLHttpRequest){ MonAjax = new XMLHttpRequest();}
    			else if (window.ActiveXObject) {MonAjax = new ActiveXObject('Microsoft.XMLHTTP');}
    			else {
    				alert("Votre navigateur n'est pas adapté pour faire des requêtes AJAX..."); 
    				MonAjax = false;   
    			}
    			MonAjax.open('POST',"ajaxslider.php",true);
    			MonAjax.onreadystatechange = function()
    			{
     
    					document.getElementById('header').innerHTML = MonAjax.responseText;
    					alert(MonAjax.responseText);
     
    			}
     
    		MonAjax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
    		MonAjax.send();                  
    		}
     
    maFonctionAjax();
    ajaxslider.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
     
    echo "TEST AJAX";
     
     
    ?>

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu devrais te poser la question autrement...

    1) Pourquoi je ne rentre pas dans cette partie fondamentale

    Alors que toi tu te dis alors je vire ce truc inutile

    2) Je reçois le code du PHP zut alors ...

    Alors que moi je me dis, il travail en local et son APACHE n'est pas activé,
    donc il renvoie le PHP comme un fichier texte

    Il n'y a pas de miracle en informatique
    Christele

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Apache est activé, je travaille sur un vrai serveur et en local, pour tester les deux.

    Si j'ai enlever la "partie fondamentale" c'est pour tester simplement l'affichage de responseText dans mon header.

    Et si je ne rentre pas dedans, c'est car j'ai "404 not found" dans le status.

    Des questions je crois que je m'en suis posé un tas, c'est après avoir ramé une journée complète que j'ai décidé de venir ici.

    J'ai aussi oublié de préciser que les deux fichiers sont bien situés dans le même dossier (donc en théorie le path ne pose pas de soucis)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ah mais voilà qui est curieux,
    Tu me dis erreur 404 donc il ne trouve pas ajaxslider.php
    ors tu dis par ailleurs qu'il en affiche le code PHP

    Nous ne devons pas être loin de trouver ou ça bug !
    Peux-tu par exemple mettre (même si ce n'est pas la peine)
    le chemin complet
    "MonAjax.open('POST',"http//xxx/ccc/ajaxslider.php",true);"

    D'autre part Ajax respecte la case par exemple
    ajaxslider.php n'est pas AjaxSlider.php

    bref je dis cela pour tout envisager !

    Tiens-moi au courant
    Christele

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    C'est un site Prestashop avec une arborescence à rallonge.

    Mais en gros dans mon dossier Source Files j'ai un sous-dossier Module, mon module se trouve dedans.

    Source Files/modules/homeslider/js/ajaxslider.php

    et pour le fichier JS :

    Source Files/modules/homeslider/js/bxSlider.js


    ==> Oui, la casse j'y ai bien fait attention.

    En réalité la réponse que j'ai dans la console Firebug c'est le code de la page actuelle sur laquelle je me trouve (le code JS du slider, celui avec l'appel ajax, a lieu sur la page d'acceuil du site, et c'est le code HTML de cette page que j'ai dans la réponse o0)

    J'ai volontairement mis le fichier PHP dans le dossier JS car il est conçu pour n'être appelé que par Ajax au sein du module.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Désolée, mais tu part dans tout les sens, c'est le contraire de l'analyse
    d'un probléme
    Tu avais eu un trés bon réflexe en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    echo "TEST AJAX";
    ?>
    En particiler sans un seul espace ... cela générerais deux echo (header)
    gardes cela pour le moment puis prends un PHP
    monphp.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
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    <HTML><BODY>
    <?php
    //=====pour le principe
    ?>
    <script type="text/javascript">
    function maFonctionAjax()
     {
      var MonAjax;
      if (window.XMLHttpRequest){ MonAjax = new XMLHttpRequest();}
      else if (window.ActiveXObject) {MonAjax = new ActiveXObject('Microsoft.XMLHTTP');}
      else {
        alert("Votre navigateur n'est pas adapté pour faire des requêtes AJAX..."); 
        MonAjax = false;   }
      MonAjax.open('POST',"ajaxslider.php",true);
      MonAjax.onreadystatechange = function()
      {
          if (MonAjax.readyState == 4 && MonAjax.status == 200)
          {
              document.getElementById('toto').innerHTML = MonAjax.responseText;}
          }
      }
      MonAjax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
      MonAjax.send();                  
     }
    maFonctionAjax();
    </script>
    <DIV ID=toto ></DIV>
    </BODY></HTML>
    Si ça marche nous n'auront plus qu'a finaliser ton vrais probléme.
    Christele

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Ca ne fonctionne pas.

    Je ne vois qu'une seule chose qui pourrait faire qu'il ne trouve pas mon fichier, c'est le chemin que je lui donne en POST, pourtant ils sont dans le même dossier et j'ai écrit :

    MonAjax.open('POST',"ajaxslider.php",true);

    Ce qui est vraiment frustrant, c'est que l'Ajax j'en fais régulièrement, et c'est la première fois que j'ai ce genre de problème.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Oui Oui, AJAX n'y est pour rien, c'est pour cela que je t'avais demmandé de mettre le chemin complet http etc...
    Par ailleur, en FTP tu trouves bien le nom en minuscules ?
    Christele

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Trouvé !

    Et c'est une erreur qui vient du fichier de routing de Prestashop en réalité.

    Le fichier JS n'était pas interprété en tant que fichier mais "inséré" dans la page d'accueil du site, qui la redistribue aux pages qui en ont besoin.

    En gros, le chemin que je lui donnait n'était pas bon, car le fichier JS utilisé était une "copie" située dans une autre page.

    J'ai du changé le path pour "/modules/homeslider/js/ajaxslider.php".

    J'ai trouvé en faisant un alert du code HTML de la page en cours. Je me suis rendu compte qu'il ne me donnait pas le code de la page dans laquelle je me situais. Du coup je suis reparti du répertoire de la page en question.

    En gros, c'est pas cool de prendre un projet prestashop en cours de route sans savoir ce genre de particularité :p

    Merci de m'avoir aidé

  12. #12
    Invité
    Invité(e)
    Par défaut
    Super !!

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

Discussions similaires

  1. [MySQL] Récupérer le résultat d'une requête mysql dans un tableau
    Par gahmed dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/01/2017, 10h51
  2. Réponses: 10
    Dernier message: 13/09/2011, 17h24
  3. Afficher le résultat d'une requête MySQL comme dans phpMyAdmin
    Par mathieu dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 0
    Dernier message: 14/02/2011, 18h48
  4. récupérer le résultat d'une requête mysql dans un tableau en java
    Par RouRa22 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 08/01/2011, 22h36
  5. Réponses: 7
    Dernier message: 30/06/2005, 10h06

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