Problème de récupération d'une donnée Php
Résolu
shishi1906
Messages postés
97
Statut
Membre
-
jeremy.s Messages postés 1248 Statut Membre -
jeremy.s Messages postés 1248 Statut Membre -
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 :
Comme vous pouvez le voir j'ai essayer en préfixant d'un "." mais cela ne fonctionne pas, quelqu'un aurait-il la solution ?
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
-
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
-
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 :/ -
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
-
$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 :/ -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 :)
-
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) -
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
-
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' -
L'erreur est assez explicite non ?
Il ne trouve pas heuredébut dans ta table réservation
Vérifie l'arthographe
-
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);
} -
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
-
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) -
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
-
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. -
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] ;-)
-
Ha et pour le libelle de ma salle je met $ligne[9] et cela fonctionnera quelque soit la salle ?
-
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
-
Merci encore de ton aide jérémy.s encore un sujet de résolu!