Bonsoir !
Hééé oui ! C'est encore moi avec mon tas de questions ! Je tiens tout d'abord à m'excuser mais c'est mon tout premier site que je crée (afin de pratiquer au maximum) et ce forum étant bourré de réponses et de gens prêts à aider, j'en profite comme je peux ! :)
Je vous explique mon problème, j'ai réussi à créer un système d'évaluation.
Le principe est simple. Après une commande, un client peut venir sur le profil de la personne avec qui il a fait des affaires et laisser une évaluation négative, neutre ou positive.
J'aimerai pouvoir gérer depuis mon panel admin chaque avis déposé afin de pouvoir gérer le contenu posté sur le site et éviter des évaluations contenant des propos qui peuvent porter à préjudice (comme des insultes, etc).
Dans mon panel admin, j'affiche les évaluations 1 par 1 dans un tableau (HTML) et j'aimerai qu'il y ai affiché la date à laquelle l'avis a été déposé, le pseudo de la personne qui a déposé l'avis, le pseudo de la personne qui reçoit l'avis, le message et des boutons Accepter et Refuser.
Pour ce qui est des pseudo, je fais une jointure entre la table "membres" et la table "avis".
Ce code fonctionne :
<?php
$req = $bdd->prepare('SELECT avis.*, membres.* FROM avis INNER JOIN membres ON avis.id_destinateur = membres.id WHERE avis.valide = FALSE ORDER BY avis.date_avis ASC');
$req->execute();
Avec ce code, j'obtiens uniquement le pseudo de la personne qui a déposé l'avis.
Par contre, dès que je veux récupérer le nom de la personne qui reçoit l'avis, ça ne fonctionne plus :
$req = $bdd->prepare('SELECT avis.*, membres.* FROM avis INNER JOIN membres ON avis.id_destinateur = membres.id AND avis.id_destinataire = membres.id WHERE avis.valide = FALSE ORDER BY avis.date_avis ASC');
$req->execute();
Aucun message d'erreur. Il ne m'affiche simplement plus mon tableau..
J'ai déjà cherché longuement sur Google (croyez-le ou non :p) mais je n'ai pas réussi à trouver la réponse à mon problème ou alors ce qui me paraissait enfin être ce dont je cherche, il s'agissait de code mysql_query, etc dont je ne comprends pas grand chose :(
Avez-vous une idée de comment récupérer les pseudos pour le destinateur et le destinataire ?
Je vous remercie de votre réponse (et désolé du pavé),
Amicalement,
Boris95098
Bonsoir Boris,
Comme tu utilises la même table "membres" pour l'évaluateur et le destinataire, il faut utiliser deux fois la table membre avec deux alias différents.
SELECT avis.*, DEST.* , EVAL.* FROM avis INNER JOIN membres EVAL ON avis.id_destinateur = EVAL.id INNER JOIN membre DEST ON avis.id_destinataire = DEST.id WHERE avis.valide = FALSE ORDER BY avis.date_avis ASC
Je suis pas sur que tu ais bien utilisé la jointure. Tu as mis un "AND", je penses que tu devrais essayer avec ça:
$req = $bdd->prepare('SELECT avis.*, membres.* FROM avis INNER JOIN membres ON avis.id_destinateur = membres.id INNER JOIN avis.id_destinataire ON membres.id WHERE avis.valide = FALSE ORDER BY avis.date_avis ASC');
Salut ! Merci de ta réponse mais ce n'est pas ça ! Mon tableau reste vide.. :/ J'ai essayé en modifiant le deuxième ON par un égal car ça me paraissait plus logique mais ça ne fonctionne pas non plus... :(
Ah mais oui ! Les alias ! Pourquoi je n'y ai pas pensé ? :O
Je te remercie de ta réponse ! Je test ça ce soir et je te dis quoi ! Merci !! :)
Super ! Ca a fonctionné Huggy ! Merci beaucoup, beaucoup !! Je n'avais jamais vraiment trouvé une utilité aux alias donc je les avaient un peu sortis de ma tête :D Comme quoi.. :p
Pour l'affichage, je me suis retrouvé un peu coincé donc, me rendant compte qu'en fait, je n'avais besoin que des colonnes id et pseudo de la table membres, j'ai modifié mon code un peu à ma manière en utilisant les alias partout où je pouvais et j'ai réussi à avoir un résultat PLUS que satisfaisant !! :)
Voici le code de la jointure comme tu me l'as proposé et modifié à ma manière ainsi que l'affichage pour le tableau (je n'ai pas copié/collé toutes les balises) :
<tbody>
<?php
$req = $bdd->prepare('SELECT avis.*, DEST.id AS destinataire_id, DEST.pseudo AS destinataire_pseudo, EVAL.id AS destinateur_id, EVAL.pseudo AS destinateur_pseudo FROM avis INNER JOIN membres EVAL ON avis.id_destinateur = EVAL.id INNER JOIN membres DEST ON avis.id_destinataire = DEST.id WHERE valide = ? ORDER BY avis.date_avis ASC');
$req->execute(array('FALSE'));
while($resultat = $req->fetch())
{
?>
<tr>
<td> <?php if($resultat['type_avis'] == 2) { echo '<img src="/img/avis-plus-min.png" alt="" />'; }elseif($resultat['type_avis'] == 1) { echo '<img src="/img/avis-neutre-min.png" alt="" />'; }elseif($resultat['type_avis'] == 0) { echo '<img src="/img/avis-moins-min.png" alt="" />'; } ?></td>
<td><?php echo date("d/m/Y à H:i:s", strtotime($resultat['date_avis'])); ?></td>
<td><a href="/profil/membres.php?id=<?php echo $resultat['destinateur_id']; ?>"><?php echo $resultat['destinateur_pseudo']; ?></a></td>
<td><a href="/profil/membres.php?id=<?php echo $resultat['destinataire_id']; ?>"><?php echo $resultat['destinataire_pseudo']; ?></a></td>
<td><?php echo $resultat['message']; ?></td>
<td><div class="btn-group"><center>
<a href="?id_add=<?php echo $resultat['id_avis']; ?>" class="btn btn-success">Accepter</a>
<a href="?id_del=<?php echo $resultat['id_avis']; ?>" class="btn btn-danger">Refuser</a>
</center></div></td>
</tr>
<?php
}
?>
</tbody>
En tout cas, tout mon script est fonctionnel (même si le code doit être assez lourd mais je l'optimiserai quand je me serai amélioré) et je te remercie encore ! MERCI ! :)
Je te souhaite une bonne soirée,
Boris95098