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 19/08/2011, 17h03   #1
Invité de passage
 
Inscription : septembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 3
Points : 1
Points : 1
Par défaut PHP et requete Sql

Bonjour à tous,

Je rencontre actuellement un problème...

Je dispose de deux tables :
Compétence : id_competence, image_active, image_inactive
Contact : id_contact, etc...

Concernant les images, l'image active affiche une icone noire correspondant à la compétence et l'image inactive est en fait la meme image mais grisée...

Un contact possede 1 a N compétences et une compétence peut avoir de 0 a n contacts !
Cela donne donc lieu à la création d'une 3eme table avec les clefs étrangères adéquates...
Cette table s'appelle Lien...

Ma requete sql permet de retrouver toutes les compétences que possede un contact, de ce point de vue pas de probleme.
J'affiche ensuite l'image active adéquate.

Le problème concerne la requete inverse, consistant à aller chercher les compétences qu'il n'a pas et ainsi d'afficher l'image inactive.

Je récupere l'identifiant du contact
$identifiant=$_GET['id'];
$res = mysql_query( 'SELECT id_competence FROM competence ORDER BY id_competence' );

while($data = mysql_fetch_assoc($res))
{
Ici la requete qui n'affiche que les compétences que possede le contact
$res2 = mysql_query( 'SELECT p.image_active as imagea, p.id_competence FROM lien l, contacts c, competence p WHERE l.id_contact = c.id_contact AND l.id_competence = p.id_competence AND p.id_competence="'.$data['id_competence'].'" AND c.id_contact="'.$identifiant.'"' );

$data1 = mysql_fetch_assoc($res2);
if($data1)
{
echo '<img src="'.$data1['imagea'].'"/>';
}
else
{
Et ici la requete affichée s'il n'a pas la compétence en question...
$res3 = mysql_query( 'SELECT p.image_inactive as imagen FROM lien l, contacts c, competence p WHERE l.id_contact = c.id_contact AND l.id_competence = p.id_competence AND p.id_competence<>"'.$data['id_competence'].'" AND c.id_contact="'.$identifiant.'"' );
$data2 = mysql_fetch_assoc($res3);

if($data2)
{
echo '<img src="'.$data2['imagen'].'"/>';
}
else
{

}
}
}


Voila, en piece jointe l'allure des résultats que j'obtiens...
J'ai bien les compétences en question en image noire mais la 2 eme requete censée faire le contraire me met toujours la meme image...
Cette requete doit être repensée mais comment ??

Je suis ouvert à toutes les critiques et éventuelles demandes d'info supplémentaires et surtout à une solution =)

Merci d'avance =)
Images attachées
Type de fichier : png prob.png (14,4 Ko, 2 affichages)
guillaume007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 17h24   #2
Membre éclairé
 
Avatar de Nowwis
 
Homme
Développeur Web
Inscription : juin 2009
Messages : 363
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2009
Messages : 363
Points : 365
Points : 365
Bonjour,

Tu pourrais simplement faire :

Code :
1
2
3
4
5
6
7
8
SELECT de toutes les compétences
Tant que t'as des résultat
    stocker l'id de la compétence en cours
    Si cette compétence est dans la relation lien avec l'id_membre concerné
        Affichage de l'image normal
    Sinon
        Affichage de l'image grisé
Fin tant que
A moins que j'ai mal compris ?
Nowwis est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/08/2011, 17h25   #3
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour,
à moins d'une erreur, cette écriture est plus lisible (et évite les erreurs de " ' )
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
<?php
// image_active
$sql2 = "SELECT p.image_active as imagea, p.id_competence 
	FROM lien l
	INNER JOIN contacts c 
		ON l.id_contact = c.id_contact
	INNER JOIN competence p 
		ON l.id_competence = p.id_competence
	WHERE p.id_competence = '".$data['id_competence']."' 
	AND c.id_contact = '".$identifiant."';"
	;
$res2 = mysql_query($sql2);
 
// image_inactive
$sql3 = "SELECT p.image_inactive as imagen 
	FROM lien l
	OUTER JOIN contacts c 
		ON l.id_contact = c.id_contact
	OUTER JOIN competence p 
		ON l.id_competence = p.id_competence
	WHERE p.id_competence != '".$data['id_competence']."' 
	AND c.id_contact = '".$identifiant."';"
	;
$res3 = mysql_query($sql3);
?>
Remarquer les INNER JOIN et OUTER JOIN.
Voir : http://sqlpro.developpez.com/cours/s...ointures/#LIII
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/08/2011, 21h13   #4
Invité de passage
 
Inscription : septembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 3
Points : 1
Points : 1
Par défaut Re

Bonsoir,

Merci pour vos réponses !

Je regarde tout cela de plus pres et vous tiens au courant !
guillaume007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 21h41   #5
Invité de passage
 
Inscription : septembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 3
Points : 1
Points : 1
Par défaut Intégration

J'ai intégré tes 2 requetes utilisant ces fameux Outer et Inner JOIN et j'ai un probleme dans la 2eme requete !! La premiere faisant bien son boulot :p

Voici le code erreur renvoyé par Wamp =>
( ! ) Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\appli_free\fiche-contact.php on line 58

Je ne maitrise pas encore tres bien cette notion de jointure et m'en remets à tes explications ! =)

Quant à un echo mysql_error() =>
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 'OUTER JOIN contacts c ON l.id_contact = c.id_contact OUTER JOIN competence' at line 3

EDIT :
Je me sens un peu bete mais bon :p
Je vous remets mon code en optimisé et surtout qui marche !!!!

$identifiant=$_GET['id'];
$res = mysql_query( 'SELECT id_competence, image_inactive FROM competence ORDER BY id_competence' );

// On boucle et on affiche chaque enregistrement
while($data = mysql_fetch_assoc($res))
{

// image_active
$sql2 = "SELECT p.image_active as imagea, p.id_competence
FROM lien l
INNER JOIN contacts c
ON l.id_contact = c.id_contact
INNER JOIN competence p
ON l.id_competence = p.id_competence
WHERE p.id_competence = '".$data['id_competence']."'
AND c.id_contact = '".$identifiant."';"
;
$res2 = mysql_query($sql2);
// On affiche les informations de l'enregistrement en cours
$data1 = mysql_fetch_assoc($res2);

if($data1)
{
echo '<img src="'.$data1['imagea'].'"/>';
}
else
{
echo '<img src="'.$data['image_inactive'].'"/>';
}

}
?>

Merci encore à vous =)
guillaume007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h28.


 
 
 
 
Partenaires

Hébergement Web