Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2011, 21h52   #1
Invité régulier
 
Benjamin Navet
Inscription : décembre 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : Benjamin Navet

Informations forums :
Inscription : décembre 2010
Messages : 20
Points : 5
Points : 5
Par défaut Problème requete sur plusieurs table

Bonsoir, tout le monde!!!

Je viens vous demandez votre aide car j'ai un soucis avec une requête....

Pour vous présentez un petit peu le contexte...Je cherche à afficher une liste de publication dans un tableau avec le nom de ces auteurs...pour celà, je cherche a récupérer le nom et le prénom du ou des auteurs dans la table utilisateur et son équipe dans la table équipe..

Mais voilà, j'arrive a récupérer les informations sur la publi ( Titre, description...), mais pas sur ces auteurs :

J'ai l'erreur suivante :

Citation:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-5.3.3\www\liste_publication.php on line 57
Citation:
Notice: Undefined variable: auteur in C:\Program Files (x86)\EasyPHP-5.3.3\www\liste_publication.php on line 76
Je n'ai toujours pas trouver ma réponse en naviguant sur plusieurs sites...

Voici mon code si cela peut vous aidez :

Code :
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
 
<?php 
 include('Projet.php');
 include('connexionMysql.php');
 ?>
    <!-- Le corps -->
   <div  id="corps">
 
 
 
<?php
echo"
	  <h1>Publication</h1>
	   <p>
Résultat obtenue : ";
 
$recup_liste_publication = "SELECT * FROM publication";
$result= mysql_query($recup_liste_publication);
 
 
echo "<br />";
echo " <table >";
// Préparation du tableau d'affichage des résultats.
echo " <caption> Liste des publications <br /> <br /> </caption>
 <tr>
		 <th> Id </th>
		 <th> Titre </th>
		 <th> Auteur(s) </th>
 
 
		 <th> Commentaire </th> 
		 <th> Domaine </th>
		 <th> Télécharger </th>
 
  </tr>";
 
while ($data = mysql_fetch_array($result))  // Parcourt des résultats de la requête SELECT * FROM publication
{ 
echo " <tr>";
echo"	     <td> ".$data['id_publi']." </td>";  // Affichage de l'identifiant de la publication
$id_publi="".$data['id_publi']."";
echo"		 <td> ".$data['nom_publi']." </td>"; // Affichage du nom de la publication
 
//Requete de récupération des données auteurs
 
 
//Premier essai de requete n'ayant pas fonctionner!!!
		//$recup_id_user= "SELECT id_user, nom, prenom  FROM utilisateur WHERE utilisateur.id_user=liste_publi.id_user AND liste_publi.id_publi=publication.id_publi AND publication.id_publi ='".$id_publi."'  ;";
 
// J'ai essayer de refaire la requete avec INNER JOIN...
 
			$recup_id_user= "SELECT id_user, utilisateur.nom, prenom  FROM utilisateur INNER JOIN liste_publi ON utilisateur.id_user=liste_publi.id_user INNER JOIN publication ON liste_publi.id_publi=publication.id_publi WHERE publication.id_publi ='".$id_publi."'  ;";
 
 
		// Sélectionne les informations des auteurs et les ajoutent dans le tableau sous la forme de auteur1, auteur2...
		$result2= mysql_query($recup_id_user);
				$i=0;
					while ($data2 = mysql_fetch_array($result2)) 
					{ 
								// Condition permettant de créer la chaine à afficher dans la case auteur.
								if($i<1)
								{
								$auteur="".$data2['nom']." ".$data2['prenom']."";
								}
								else if($i>=1)
								{
								$auteur2=$auteur.", ".$data2['nom']." ".$data2['prenom'];
								$auteur="$auteur2";
								}
								else
								{
								echo "probleme";
								}
								$i++;
					}
 
echo"	     <td> ".$auteur." </td>";
//echo"		 <td> ".$data['nom_equipe']." </td>";
echo"		 <td> ".$data['commentaire']." </td>";
echo"		 <td> ".$data['domaine']." </td>";
$pdf="".$data['chemin']."";
echo " <td> <a href=download.php?file=".$pdf." > <img src=pdf.gif alt=Télécharger </a> </td>" ;
 
}
 
echo"   </tr>";
echo" </table> ";
echo " <br />";
 
 
?>
</div>
Si quelqu'un avait une idée, une piste ou une solution pour mon problème, je le remercie d'avance pour sa réponse!!
benjin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 22h01   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Dans la FAQ :
http://php.developpez.com/faq/index....ysql_ressource

Code :
1
2
3
4
5
6
if($i<1)
else if($i>=1)
else
   {
    echo "probleme";
}
A ca c'est sur que si tu es dans le cas "else" tu as un gros problème.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 22h10   #3
Invité régulier
 
Benjamin Navet
Inscription : décembre 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : Benjamin Navet

Informations forums :
Inscription : décembre 2010
Messages : 20
Points : 5
Points : 5
J'ai déjà consulter cette FAQ et n'ai pas trouver ma réponse...

Le problème vient apparament de ma deuxieme requete SQL...mais je ne vois pas pourquoi...

La partie if...else...fonctionne parfaitement déjà tester sur une autre page avec un autre style de requete...(de plus, en la supprimant ici, celà ne résoud pas le problème...)

benjin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 22h17   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Est-ce que tu as fais ce qui etait indiqué dans la FAQ ?

Pour le if/else je n'ai pas dit qu'il ne fonctionnait pas ; j'ai dit que le cas "else" ne servait a rien.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2011, 22h25   #5
Invité régulier
 
Benjamin Navet
Inscription : décembre 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : Benjamin Navet

Informations forums :
Inscription : décembre 2010
Messages : 20
Points : 5
Points : 5
Ah oki...j'avais pas compris...(c'est ma petit habitude de mettre toujours un else problème...)

Ah, oui je viens de comprendre ce que tu voulais me montrer en regardant la faq (je rechercher bêtement mon erreur)...
J'avais oublié le or die pour la sortie des erreurs...

Donc finalement j'ai :

Code sql :
SELECT id_user, utilisateur.nom, prenom FROM utilisateur INNER JOIN liste_publi ON utilisateur.id_user=liste_publi.id_user INNER JOIN publication ON liste_publi.id_publi=publication.id_publi WHERE publication.id_publi ='30' ;

Champ: 'id_user' dans field list est ambigu

Donc faut que je corrige ça...une modification de champ suffirais??

Je pense que je verrais ça demain...car la je dors debout...

Merci de ton aide^^
benjin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 12h38   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Citation:
Champ: 'id_user' dans field list est ambigu

Donc faut que je corrige ça...une modification de champ suffirais??
Surtout pas malheureux ! Ne va pas toucher à ton modèle de données juste parce que les requêtes passent pas.

Les alias sont fait pour ça:
Code :
1
2
3
4
5
6
// imaginons une table_a ( id , name, surname)
// et table_b (id, ville, departement, table_a_id)
// la requête de selection sur les deux tables est:
SELECT a.id, a.name, a.surname, b.id, b.ville, b.departement
FROM table_a AS a JOIN table_b as b ON (a.id=b.table_a_id);
Plus clair comme ça ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2011, 23h33   #7
Invité régulier
 
Benjamin Navet
Inscription : décembre 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : Benjamin Navet

Informations forums :
Inscription : décembre 2010
Messages : 20
Points : 5
Points : 5
Oui, effectivement c'est plus claire, merci...

Sinon ma requete marche correctement pour cette partie là...

Mais en faites, j'ai un truc plus compliqué derrière...et là paf, ca marche pas...

Alors est ce que la requete est trop lourd, trop complexe....

J'ai comme requete :
Code :
1
2
3
4
 
<?php
$recup_id_user= "SELECT utilisateur.id_user, utilisateur.nom, prenom, equipe.id_equipe, equipe.nom_equipe FROM utilisateur, equipe INNER JOIN liste_publi ON publication.id_publi=liste_publi.id_publi INNER JOIN utilisateur ON liste_publi.id_user=utilisateur.id_user INNER JOIN liste_equipe ON utilisateur.id_user=liste_equipe.id_user INNER JOIN equipe ON liste_equipe.id_equipe=equipe.id_equipe WHERE publication.id_publi ='".$id_publi."' ;";
?>

Et comme message d'erreur :
Citation:
Erreur SQL !
SELECT utilisateur.id_user, utilisateur.nom, prenom, equipe.id_equipe, equipe.nom_equipe FROM utilisateur, equipe INNER JOIN liste_publi ON publication.id_publi=liste_publi.id_publi INNER JOIN utilisateur ON liste_publi.id_user=utilisateur.id_user INNER JOIN liste_equipe ON utilisateur.id_user=liste_equipe.id_user INNER JOIN equipe ON liste_equipe.id_equipe=equipe.id_equipe WHERE publication.id_publi ='31' ;
Table/alias: 'utilisateur' non unique

Je comprend pas le fait de utilisateur non unique...J'ai pourtant bien qu'une seul table utilisateur...

Dois-je faire un distinct??

Si vous aviez une petite idée a me soumettre, je suis preneur...Je commence a ramé...J'ai également vu que dans certains cas, on pouvait remettre un select dans le from...Est ce qu'il faudrait que je fasse comme çà...enfin je suis un peu perdu...

En vous remerciant d'avance pour vos réponses!!
benjin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 08h06   #8
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Il faut faire ce que Benjamin t'a indiqué.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 19h43   #9
Invité régulier
 
Benjamin Navet
Inscription : décembre 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : Benjamin Navet

Informations forums :
Inscription : décembre 2010
Messages : 20
Points : 5
Points : 5
Ben j'ai l'impression d'avoir fais comme il a dit...

JOIN n'est pas le raccourci par défaut d'INNER JOIN?
benjin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 19h45   #10
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Il manque les alias dans ta requete.
Ils sont necessaires puisque tu nommes plusieurs fois les memes tables.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 19h47   #11
Invité régulier
 
Benjamin Navet
Inscription : décembre 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : Benjamin Navet

Informations forums :
Inscription : décembre 2010
Messages : 20
Points : 5
Points : 5
D'accord, j'essaie de suite avec les alias!!!

Je te remercie!!
benjin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h15.


 
 
 
 
Partenaires

Hébergement Web