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 (type SELECT)


Sujet :

AJAX

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Septembre 2011
    Messages : 13
    Points : 9
    Points
    9
    Par défaut [AJAX] Récupérer le résultat d'une requête (type SELECT)
    Bonjour à tous,

    j'ai beau chercher sur Google depuis ce matin, mais malheureusement, je n'ai pas trouvé mon bonheur.
    Je vous explique mon problème:

    Dans une infoBulle d'une GoogleMap, je dois pouvoir afficher une image, le nom de l'agence, l'adresse, le téléphone ainsi qu'une adresse e-mail.... MAIS aussi, les employés de cette agence !

    Et ce sont les employés qui m'embêtent un peu...

    En effet, je n'arrive pas à récupérer le tableau $hbs que je créer....

    Je vous montre mon code actuel :

    fichier entreprise.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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    function admarker3(location,marker, tel, mail, image, nom, id) {
    	 var contenu='<div id="'+id+'" style="color: #666666; height: 100%; width: 100%;"><div align="center">';
    	 if(image.length>0){
    		contenu+='<img src="images/'+image+'" alt="Image agence" style="max-width: 200px; max-height: 200px;"/><br />';
    	  }
    	  contenu+=nom+'</div>'+location+'<br />';
    	  if(tel.length>0){
    		contenu+='T&eacute;l&eacute;phone : '+tel+'<br />';
    	  }
    	  if(mail.length>0){
    		contenu+='Contact : '+mail;
    	  }
     
     
    	var xhr_object = null;
     
    	if(window.XMLHttpRequest) // Firefox.
    	   xhr_object = new XMLHttpRequest();
    	else{
    		if(window.ActiveXObject) // Internet Explorer.
    			xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    		else{ // XMLHttpRequest non supporté par le navigateur.
    			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    			return;
    		}
    	}
     
    	xhr_object.onreadystatechange  = function(){ 
    		if(xhr_object.readyState  == 4){
    			if(xhr_object.status  == 200){
    				var rep= xhr_object.responseText;
    					alert('Reussite'+rep);
    			}
    			else{ 
    				alert('Erreur : '+xhr_object.status);
    			}
    		}
    	}; 
     
    	var method   = "POST";
    	var filename = "ajax/recupEmploye.php";
    	var requete  = "idAg=" + id;
    	xhr_object.open(method, filename, true);
    	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     
    	xhr_object.send(null);				
     
           contenu+='</div>';
    	 infoBulle = new google.maps.InfoWindow({
    		content: contenu
    	 });
    	  infoBulle.close();
    	   infoBulle.open(map, marker);
    	  }
    Code du fichier recupEmploye.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
    require_once '../../admin/classes/db.class.php';
    	require_once '../../admin/connect.php';
     
    	$db = new db;
     
    	if (!empty($_POST['idAg']) and !empty($_POST['idAg'])) {
    		$idAg = $_POST['idAg'];
     
    		$requete="SELECT * FROM employes WHERE idAgence=".$idAg;
    		//echo $requete;
    		$res=$db->query($requete) or die ('ERREUR SQL : '.mysql_error().' &agrave; la ligne '.__line__.' du fichier '.__file__);
    		$hbs=array();
    		while($tab=mysql_fetch_array($res)){
    			$hbs[]=$tab;
    		}
    		return $hbs;
    	}
    Mon alert('Reussite'+rep); me renvoie une réponse vide...
    En utilisant FireBug, la ligne 'echo $requete' m'a permis de voir que j’exécutais la bonne requête

    Si quelqu'un pouvait m'aider, ca serait vraiment sympa =)
    Merci d'avance aux personnes qui pourrait m'aider =)

  2. #2
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Points : 8 040
    Points
    8 040
    Par défaut
    Bonjour,

    Pourquoi vérifier deux fois ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!empty($_POST['idAg']) and !empty($_POST['idAg'])) {
    Tu n'aurai pas "oublié" de transmettre la valeur de idAg dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xhr_object.send(null);
    xhr_object.send(requete);
    Cordialement,
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Septembre 2011
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Tout d'abord, merci pour ta réponse aussi rapide Torgar =)

    Effectivement, je n'avais pas remarqué que je faisais 2 fois la même vérification... Je voulais d'abord vérifier si $_POST['idAg'] existait et ensuite vérifier qu'il ne soit pas vide...

    Ensuite, même en remplaçant le
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xhr_object.send(requete);
    comme tu me l'as bien fait remarqué, ça me renvoi toujours une réponse vide...

  4. #4
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Points : 8 040
    Points
    8 040
    Par défaut
    Dans ton fichier recupEmploye.php fait un return du POST pour voir si c'est bien envoyé, traité et renvoyé à ton javascript.

    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
    <?php
    require_once '../../admin/classes/db.class.php';
    require_once '../../admin/connect.php';
     
    return $_POST['idAg'];
     
    $db = new db;
     
    if (!empty($_POST['idAg']) and !empty($_POST['idAg'])) {
        $idAg = $_POST['idAg'];
     
        $requete="SELECT * FROM employes WHERE idAgence=".$idAg;
        //echo $requete;
        $res=$db->query($requete) or die ('ERREUR SQL : '.mysql_error().' &agrave; la ligne '.__line__.' du fichier '.__file__);
        $hbs=array();
        while($tab=mysql_fetch_array($res)){
            $hbs[] = $tab; // Est-ce bien ce que tu veux ?
        }
        return $hbs;
    }
    ?>
    J'en profite pour te poser une petite question en commentaire, histoire d'être sûr
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Septembre 2011
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    En faisant un "return $_POST", j'ai une alert qui m'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reussite SELECT * FROM employes WHERE idAgence=2
    Euh.... d'un coup je n'en suis plus si certaine...
    Ce qu'il me faudrait à la fin, c'est un tableau (de tableau ?), où j'aurais toutes les informations pour de tout les employés d'une agence...

    Je me suis peut-être trompée sur ce bout de code....

    EDIT : en regardant d'autres code (qui fonctionne, utilisé dans des fonctions PHP), c'est réellement de cela dont j'ai besoin

  6. #6
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Points : 8 040
    Points
    8 040
    Par défaut
    Autant il aurait été retourné Reussite 2 j'aurai été content, autant là qu'il te retourne la requête avec je le suis moins.

    C'est toi qui à rajouté la requête pour être sûr ?


    Si tu veux retourner un tableau...de tableau il faut faire autrement parce que tu aura des doublons parce que tu utilise mysql_fetch_array(). Voir ici pour plus de détail

    Exemple :
    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
     
    $query = mysql_query('SELECT * FROM ville');
    while ($array = mysql_fetch_array($query)) {
      $output[] = $array;
    }
     
    // donneras un tableau du style :
     
    Array (     
      [0] => Array         (             
                [0] => 1 
                [prod_id] => 1
                [1] => Paris
                [libel_ville] => Paris
      [1] => Array (
                [0] => 2 
                [prod_id] => 2
                [1] => Marseille
                [libel_ville] => Marseille
    )
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Septembre 2011
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Oui désolé, j'avais dé-commenté la ligne 'echo $requete', pour être certaine qu'il exécutait toujours la bonne requête sur la BDD...

    Si on oublie cette petite bourde de ma part, ça me retourne toujours rien xD

    Là je suis un peu perdu avec l'AJAX

    EDIT :
    En discutant avec un autre développeur de la boîte, j'ai déjà vu plusieurs erreurs dans mon code, notamment dans le fichier recupEmploye.php...

    Il faut faire un echo et non un return pour renvoyer un résultat...

    En faisant cela, mon alert me renvoie 'Réussite Array', ce qui est parfaitement normal car $hbs est un tableau...

    Malheureusement, si je récupère le résultat avec xhr.responseText... Je reçois le mot Array et non réellement mon tableau...

    Vient à moi donc deux choix :
    • soit je choisis de passer par un xhr.responseXML... et donc je me débrouille avec le XML
    • OU, je créer dès le début, un tableau à 3 dimensions (oui, ca devient une usine à gaz) en javascript, que je rempli en PHP... mais je risque d'avoir des cellules de tableau vide...


    Merci tout de même pour l'aide que tu m'as apporté Torgar, ca m'a déjà permis d'éclaircir pas mal de point, je considère ce post comme résolu pour moi =)

  8. #8
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Points : 8 040
    Points
    8 040
    Par défaut
    Les habitudes ont la vie dure

    Si tu mets echo au lieu de return ça marcherai pas mieux des fois ?

    Genre :
    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
    <?php
    require_once '../../admin/classes/db.class.php';
    require_once '../../admin/connect.php';
     
    echo $_POST['idAg'];
     
    $db = new db;
     
    if (!empty($_POST['idAg']) and !empty($_POST['idAg'])) {
        $idAg = $_POST['idAg'];
     
        $requete="SELECT * FROM employes WHERE idAgence=".$idAg;
        //echo $requete;
        $res=$db->query($requete) or die ('ERREUR SQL : '.mysql_error().' &agrave; la ligne '.__line__.' du fichier '.__file__);
        $hbs=array();
        while($tab=mysql_fetch_array($res)){
            $hbs[] = $tab;
        }
        // echo $hbs;
    }
    ?>
    Ca devrait te retourner : Reussite 2 (en admettant que tu clic sur le 2 ^^)

    Si ça marche, fait un echo $hbs au lieu d'un return.

    Perso je code de façon à ce que mes retours ajax se fassent avec return en php (j'utilise des fonctions php pour traiter mes requêtes ajax, donc return pour renvoyer et sortir de la fonction). C'est ce qui m'a induit en erreur.
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Septembre 2011
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Je crois qu'on a posté la réponse en même temps ^^
    Je disais exactement la même chose, en éditant mon post du dessus pour éviter les doubles...

    Merci beaucoup pour ton aide =)

  10. #10
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Points : 8 040
    Points
    8 040
    Par défaut
    Avec plaisir

    Une autre solution serais aussi de passer par JSON pour traiter ton tableau php avec facilité en javascript.

    Une autre piste s'ouvre sur l'avenir.

    Bon courage pour la suite
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Septembre 2011
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup !
    Bonne continuation à toi

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

Discussions similaires

  1. Récupérer le résultat d'une requête UNION
    Par brazza dans le forum Requêtes
    Réponses: 5
    Dernier message: 15/01/2007, 21h33
  2. [JTable] Récupérer le résultat d'une requête SQL
    Par malik1982 dans le forum Composants
    Réponses: 10
    Dernier message: 08/07/2006, 19h52
  3. Réponses: 3
    Dernier message: 16/10/2005, 11h53
  4. récupérer le résultat d'une requête sql dans un edit
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2005, 14h07
  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