Récupérer le pseudo et le commentaire poste par un membre

Ce topic a été résolu
Mardy_Dev

Mardy_Dev Le 4 octobre 2019 à 06:57 (Édité le 21 octobre 2019 à 20:35)

 
Bonjour Bonsoir!
 
Je retourne  à mon blog pour l'améliorer.
 
Je voulais autoriser seulement un membre a poster un commentaire sur un article,pour cela j'ai ->
 1) ajouté un champ nomme id_membre dans la table commentaire
2) vérifié si l'utilisateur est connecte (Existence des variables $_SESSION) avant le post d'un commentaire.
 Jusque-là  c'est OK.

 Maintenant je veux écrire la requête de jointure entre les tables membre et commentaire pour récupérer le Pseudo du membre et Son commentaire.
J’ai
lus le chapitre sur les jointures entres les tables, mais je n'arrive pas à construire la requête.Je  compte sur vos aides  .Merci d'avance.

@Mardy_Dev
Profil introuvable

Profil introuvable Le 4 octobre 2019 à 16:55

Hello @Mardy_Dev,

Petite question : quel est le chapitre ou tu as lu les jointures entre les tables ?
Mardy_Dev

Mardy_Dev Le 4 octobre 2019 à 18:25

Salut!
 @Jerem971
Alors l'idée c'est de relier les  deux tables : Table commentaire & Table membre (✅)

Voici la structure des deux tables (Les champs):

T_commentaire 

Id
Id_membre
Id_article
commentaire

T_membre

id
pseudo
pass
mail

Maitenant je veux récupérer le Pseudo d'un membre ainsi que le commentaire posté par ce dernier.
Je sais pas comment faire la requête de récupération.
Mardy_Dev

Mardy_Dev Le 4 octobre 2019 à 18:30 (Édité le 4 octobre 2019 à 18:38)

Concernant le chapitre sur les jointures,source: @Concevez votre site web avec PHP et MSQL de @Mateo21 ET le channel de @PrimFx 
Le chapitre : Jointure Avec SQL
Darkstevy

Darkstevy Le 4 octobre 2019 à 20:31

donne nous tes deux table
Mardy_Dev

Mardy_Dev Le 12 octobre 2019 à 04:02 (Édité le 12 octobre 2019 à 04:04)

Bonjour/Bonsoir 

J'ai réussi à construire la requête qui récupère  le pseudo du membre ainsi que son commentaire sur un article.Voici comment j'ai procédé:

$req=" SELECT m.pseudo AS pseudonyme,c.commentaire AS commentaire
FROM membres AS m INNER JOIN commentaire AS c ON m.id=id_membre";

// Une boucle pour afficher les résultats
While($resultat=$req->fetch()){

Echo $resultat['pseudonyme'];
Echo $resultat['commentaire'];

}

Jusque-là OK.Mais le problème est que quand j'ajoute un order by id desc( Histoire d'afficher le dernier comment aire en premier)  à la requête ça plante.Je sais pas ou peut être je ne comprend pas le pourquoi de ce plantage.

Alors je compte je sur vos aides et explications.@Mardy_Dev
Darkstevy

Darkstevy Le 12 octobre 2019 à 14:58 (Édité le 12 octobre 2019 à 15:08)

Salut @Mardy_Dev

essaie ceci, je te laisse le soin de remplacer ' * ' et je te conseille de créé un id-user dans ta table commentaire qui sera lié a l'id du membre comme ceci : 
$req = "SELECT * FROM MaTableMembres INNER JOIN MaTableCommentaire ON MaTableMembre.id = MaTableCommentaire.id_user  ORDER BY id DESC";
Mardy_Dev

Mardy_Dev Le 12 octobre 2019 à 20:58 (Édité le 12 octobre 2019 à 20:59)

Merci @Darkstevy

J'ai essayé ton code mais ça m'affiche  seulement un commentaire mais pas tous les commentaires et les pseudo.

Voici ce que j'ai ajouté après ton code pour l'affichage des commentaires et du pseudo des membres:

$résultat=$req->fetch();
Echo $résultat['Pseudonyme']; // Ici le champ Pseudonyme de la table membre

Echo $résultat['commentaire']; // Ici le champ commentaire de la table commentaire

Alors ça me liste pas tous les commentaires.Qu'est-ce-qui ne va pas?
Darkstevy

Darkstevy Le 13 octobre 2019 à 14:15 (Édité le 13 octobre 2019 à 14:25)

Normal il n'y a aucune boucle
while($r = $req->fetch()) { ?>
   <div><?=$r=['ColoneTablePseudo']; ?><div><br>
   <div><?=$r=['ColoneTableCommentaire']; ?><div>
<?php
}
?>

ou
while($r = $req->fetch()) { 
   echo $r=['ColoneTablePseudo'];
   echo $r=['ColoneTableCommentaire'];
}
Mardy_Dev

Mardy_Dev Le 20 octobre 2019 à 22:47

Bonjour,Bonsoir

@Darkstevy j'ai essayé mais ça enlève les commentaires.En fait je pense qu'on peut pas faire un ORDER BY id dans cette requête puisque selon ma logique, MYSQL ne sait pas si elle doit faire un ORDER BY de L' Id  qui se trouve dans la table commentaire OU de L'Id qui se trouve dans la table membre.Mais si y'a un autre moyen de  régler cela alors je ne l'ai pas encore trouvé.
Darkstevy

Darkstevy Le 21 octobre 2019 à 11:18

@Mardy_Dev et si tu écrivais ORDER BY MaTableMembre.id ? 
Mardy_Dev

Mardy_Dev Le 21 octobre 2019 à 16:30

Yes! C'était une bonne idée! 
En fait au lieu de ORDER BY MatableMembre.id  J'ai fais un ORDER BY Matablecommentaire.id, et la magie, ça a marché😀

Alors @Darkstevy  je te remercie pour ton idée,mais avant que je clique sur Résolu! Une dernière question un peu curieuse:

Je constate que quand j'ouvre deux comptes dans mon navigateur alors chacun des  comptes dans un onglet -> Compte 1 | Compte 2 ,quand je déconnecte le compte 1 et  ensuite je me rend sur le compte 2 dans l'autre onglet,Je rafraîchis la page alors le compte 2 est lui aussi déconnecté.Est-ce normal ça? 
Darkstevy

Darkstevy Le 21 octobre 2019 à 16:41

@Mardy_Dev  si je ne me trompe pas, c'est normal car quand tu détruit la Session on ne peux savoir de quel session tu parle. D'ailleurs ce ne serait pas bon de pouvoir se connecter sur plusieurs session du même site sur un même navigateur. Pour tes test je te propose donc de te connecter sur session 1 avec par exemple Chrome et session 2 avec par exemple Edge et comme ça tout fonctionnera. 

Et prend habitude dans tes requête comme celle ci de nommer ta table suivi de la colonne pour rester précis et éviter des erreurs.
Mardy_Dev

Mardy_Dev Le 21 octobre 2019 à 20:35

D'accord merci @Darkstevy !
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte