Problème de récupération d'une donnée Php

Résolu
Bonjour,
Voilà mon soucis, j'ai deux table différentes contenant toutes les deux "LIBELLE". Et j'aimerai afficher à un certain endroit l'un, puis à un certain endroit l'autre or je n'y arrive pas.
Voici mon code :

$sql = 	"SELECT * FROM reservation, objet, salarie, motif
								WHERE DATERES=$an$moi$jour && reservation.IDOBJET=objet.IDOBJET && reservation.IDSALARIE=salarie.IDSALARIE && IDTYPEOBJET=2
								ORDER BY HEUREDEB ASC";
		
					//On execute la requête
					mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
					
					//$result prend les valeurs de la requete
					$result=mysql_query($sql);
					
					//creation du tableau
					while ($ligne=mysql_fetch_array($result)){
						echo "<tr>\n<td class=\"salle\">".$ligne['objet.LIBELLE']."</td>\n<td class=\"salarie\">".$ligne['NOM']." ".$ligne['PRENOM']."\n</td>\n<td class=\"heurer\">".$ligne['HEUREDEB']."</td>\n<td>".$ligne['motif.LIBELLE'].'</td>\n<td class=\"heurer\">".$ligne['HEUREFIN']."</td></tr>";


Comme vous pouvez le voir j'ai essayer en préfixant d'un "." mais cela ne fonctionne pas, quelqu'un aurait-il la solution ?

18 réponses

  1. Salut :

    N'utilise pas le * dans le select.
    Ensuite tu executes deux fois ta requete :
    //On execute la requête
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    //$result prend les valeurs de la requete
    $result=mysql_query($sql);

    Pour finir, voici une structure de requete qui devrait te servir :

    Select a.nom, a.prenom, b.ville
    From habitant a, ville b
    Where a.id_ville = b.id
    1. J'ai modifier ma requête par :
      $sql = "SELECT a.NOM, a.PRENOM, a.IDSALARIE, b.IDSALARIE, b.HEUREDEBUT, b.HEUREFIN, b.DATERES, b.IDOBJET, c.LIBELLE, c.IDOBJET, c.IDTYPEOBJET D.LIBELLE FROM salarie a, reservation b, objet c, motif d
      WHERE b.DATERES=$an$moi$jour && b.IDOBJET=c.IDOBJET && b.IDSALARIE=a.IDSALARIE && c.IDTYPEOBJET=2
      ORDER BY b.HEUREDEB ASC";

      et l'affichage par :
      echo "<tr>\n<td class=\"salle\">".$ligne['c.LIBELLE']."</td>\n<td class=\"salarie\">".$ligne['NOM']." ".$ligne['PRENOM']."\n</td>\n<td>".$ligne['d.LIBELLE']."</td>\n<td class=\"heurer\">".$ligne['HEUREDEB']."</td>\n<td class=\"heurer\">".$ligne['HEUREFIN']."</td></tr>";

      or cela ne fonctionne pas :/
      1. Attention :
        Quand tu déclares plusieurs table dans le FROM, il faut que chacune des tables soient "liées"
        C'est à dire que dans ton where, il faut précisé les jointures.

        Je reprend mon exemple :
        Select a.nom, a.prenom, b.ville
        From habitant a, ville b
        Where a.id_ville = b.id
        1. $sql = "SELECT a.NOM, a.PRENOM, a.IDSALARIE, b.IDSALARIE, b.HEUREDEBUT, b.HEUREFIN, b.DATERES, b.IDOBJET, b.IDMOTIF, c.LIBELLE, c.IDOBJET, c.IDTYPEOBJET, d.IDMOTIF, d.LIBELLE D.LIBELLE FROM salarie a, reservation b, objet c, motif d
          WHERE b.DATERES=$an$moi$jour && b.IDOBJET=c.IDOBJET && b.IDSALARIE=a.IDSALARIE && c.IDTYPEOBJET=2 && b.IDMOTIF=d.IDMOTIF
          ORDER BY b.HEUREDEB ASC";

          le problème est que je ne vois pas quelle table n'est pas lié . Ou alors je comprend mal :/
          1. Ok a priori c'est correct.
            Ce qui me gène c'est les &&, essaye avec des AND
            Et puis est-ce que tu as une erreur ? Le die n'affiche rien ?

            Ensuite, essaye :
            while ($ligne=mysql_fetch_array($result)){
            print_r($ligne);
            }

            Et copie colle le résultat :)
            1. Oui j'ai une erreure d'afficher :
              Erreur SQL !SELECT a.NOM, a.PRENOM, a.IDSALARIE, b.IDSALARIE, b.HEUREDEBUT, b.HEUREFIN, b.DATERES, b.IDOBJET, b.IDMOTIF, c.LIBELLE, c.IDOBJET, c.IDTYPEOBJET, d.IDMOTIF, d.LIBELLE D.LIBELLE FROM salarie a, reservation b, objet c, motif d WHERE b.DATERES=20130605 AND b.IDOBJET=c.IDOBJET AND b.IDSALARIE=a.IDSALARIE AND c.IDTYPEOBJET=2 AND b.IDMOTIF=d.IDMOTIF ORDER BY b.HEUREDEB ASC
              You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.LIBELLE FROM salarie a, reservation b, objet c, motif d WHERE b.DATERE' at line 1

              Ensuite si je rajoute :
              while ($ligne=mysql_fetch_array($result)){
              print_r($ligne);
              }

              il ne m'affiche rien. (J'ai ajouté le while que tu m'a donné après mon while)
              1. Ah bah si ya une erreur fallait le dire plus tot ;-)
                [...] d.IDMOTIF, d.LIBELLE D.LIBELLE FROM salarie a, [...]

                Laisse le print_r dans le while
                1. Erreure suivante :

                  Erreur SQL !SELECT a.NOM, a.PRENOM, a.IDSALARIE, b.IDSALARIE, b.HEUREDEBUT, b.HEUREFIN, b.DATERES, b.IDOBJET, b.IDMOTIF, c.LIBELLE, c.IDOBJET, c.IDTYPEOBJET, d.IDMOTIF, d.LIBELLE FROM salarie a, reservation b, objet c, motif d WHERE b.DATERES=20130605 AND b.IDOBJET=c.IDOBJET AND b.IDSALARIE=a.IDSALARIE AND c.IDTYPEOBJET=2 AND b.IDMOTIF=d.IDMOTIF ORDER BY b.HEUREDEB ASC
                  Unknown column 'b.HEUREDEBUT' in 'field list'
                  1. L'erreur est assez explicite non ?
                    Il ne trouve pas heuredébut dans ta table réservation
                    Vérifie l'arthographe
                    1. Alors il ne m'affiche plus d'erreur c'est un bon début, cela étant dit il ne m'affiche rien du tout.

                      affichage :
                      while ($ligne=mysql_fetch_array($result)){
                      echo "<tr>\n<td class=\"salle\">".$ligne['c.LIBELLE']."</td>\n<td class=\"salarie\">".$ligne['a.NOM']." ".$ligne['a.PRENOM']."\n</td>\n<td>".$ligne['d.LIBELLE']."</td>\n<td class=\"heurer\">".$ligne['b.HEUREDEB']."</td>\n<td class=\"heurer\">".$ligne['b.HEUREFIN']."</td></tr>";
                      print_r($ligne);
                      }
                      1. Met juste :

                        affichage :
                        while ($ligne=mysql_fetch_array($result)){
                        echo "<tr><td>";
                        print_r($ligne);
                        echo "</td></tr>";
                        }

                        Si tu n'as rien à l'affichage, c'est que ta requete ne trouve rien
                        1. Donc ma requete ne trouve, il faut maintenant que je trouve pourquoi.

                          (Pfiou la programmation c'est cool, mais ça peut vite donner des mal de crane)
                          1. Si tu as phpmyadmin, il y a un espace pour faire des requetes. Vas y et tape ta requete dedans. Tu peux faire tes test dedans pour voir quelle requete te trouce ce que tu souhaites
                            1. Alors c'est bon dans mon print_r j'ai :

                              Array ( [0] => Alves [NOM] => Alves [1] => Magali [PRENOM] => Magali [2] => 4 [IDSALARIE] => 4 [3] => 4 [4] => 00:15:00 [HEUREDEB] => 00:15:00 [5] => 02:45:00 [HEUREFIN] => 02:45:00 [6] => 2013-01-02 [DATERES] => 2013-01-02 [7] => 4 [IDOBJET] => 4 [8] => 5 [IDMOTIF] => 5 [9] => Salle de test 2 [LIBELLE] => Danse [10] => 4 [11] => 2 [IDTYPEOBJET] => 2 [12] => 5 [13] => Danse )

                              Mais je n'ai rien dans les case de mon tableau, simplement des case avec le fond, mais sans les écritures à l'intérieure.
                              1. Bah tu peux remplir ton tableau avec les infos, tu les as dans $ligne qui correspond au contenu du print_r ;-)

                                Donc si tu veux mettre Alves, c'est echo $ligne['NOM'] ou $ligne[0] ;-)
                                1. Ha et pour le libelle de ma salle je met $ligne[9] et cela fonctionnera quelque soit la salle ?
                                  1. $Ligne['SALLE'] est plus prudent parce qu'en cas de modification du tableau, la ligne 9 ne correspondra plus aux salles..
                                  2. oui mais dans ce que je recoit, le nom de m'a salle m'est donné simplement par [9] et jamais par ['SALLE'].
                                    Le nom dans ma table est LIBELLE, c'est le même que pour les motif (LIBELLE) ....

                                    (A demain je débauche, j'espere résoudre ce soucis demain)
                                2. D'ailleurs il y a des colonnes qui n'ont pas noms, essaye de mettre des AS ;-)
                                  select a.nom as NOM, a.prenom as PRENOM, b.ville as VILLE

                                  Car tu vois tes colonnes 10 12 et 13 n'ont pas nom, donc tu ne peux seulement y accéder par leur numéro
                                  1. Merci encore de ton aide jérémy.s encore un sujet de résolu!
                                    1. Derien :)