Menu

Afficher la liste de amis PDO [Résolu]

carterj 18 Messages postés lundi 4 septembre 2017Date d'inscription 23 septembre 2017 Dernière intervention - 4 sept. 2017 à 19:32 - Dernière réponse : carterj 18 Messages postés lundi 4 septembre 2017Date d'inscription 23 septembre 2017 Dernière intervention
- 13 sept. 2017 à 19:49
Bonjour,
voila je chercher depuis sans résultat comment afficher la liste d'amis des users help ! please
Afficher la suite 

Votre réponse

12 réponses

yg_be 5551 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 18 mai 2018 Dernière intervention - 4 sept. 2017 à 20:24
0
Utile
bonsoir, peux-tu décrire la structure de ta base de données?
carterj 18 Messages postés lundi 4 septembre 2017Date d'inscription 23 septembre 2017 Dernière intervention - 11 sept. 2017 à 21:21
bonjour j'ai une table users avec des users ^^ et une table des amies friends_relationship ( user_id1, user_id2, status, created_at), merci d'avance
yg_be 5551 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 18 mai 2018 Dernière intervention > carterj 18 Messages postés lundi 4 septembre 2017Date d'inscription 23 septembre 2017 Dernière intervention - 11 sept. 2017 à 21:29
si jamais tu voulais de l'aide, n'hésite pas à expliquer la signification de chacun des champ, ou même à donner un exemple.
Commenter la réponse de yg_be
jordane45 21033 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 18 mai 2018 Dernière intervention - 11 sept. 2017 à 23:50
0
Utile
Bonjour,

Nous ne sommes pas là pour faire le travail à votre place ni pour remplacer votre moteur de recherches...

Merci de nous décrire précisément votre problème ainsi que le code déjà réalisé.

Merci également de lire ceci :
Cliquez ici pour des conseils d'écriture des messages.

NB : Pour poster votre code, merci de penser à utiliser la coloration syntaxique.
Commenter la réponse de jordane45
carterj 18 Messages postés lundi 4 septembre 2017Date d'inscription 23 septembre 2017 Dernière intervention - 12 sept. 2017 à 08:29
0
Utile
Merci pour vos réponse voila le code déjà réaliser
<?php
// recupere les info daans la bdd
$dox = $db->prepare('SELECT (user_id1 + user_id2 - :id) AS user_id2 FROM friends_relationships LEFT JOIN users ON id = (user_id1 + user_id2 - :id) WHERE (user_id1 = :id OR user_id1 = :id) AND status = :1 ');
$dox->bindValue(':id',$id,PDO::PARAM_INT);
$dox->bindValue(':1','1',PDO::PARAM_STR);
$dox->execute();
// si le user n'a pas dami on lui affiche une echo...
if($dox->rowCount() == 0){
echo "Vous n'avez pas d'ami(es) pour l'instat merci dans ajoutez";
}
// Affichage de nombre d'amies avec while
while ($data = $dox->fetch(PDO::FETCH_ASSOC)){ ?>
<img src="<?= $data->avatar ? $data->avatar : get_avatar_url($data->email) ?>"
class="avatar-xs" style="width: 50px; height: 50px;">  <?php echo htmlspecialchars(trim($data['pseudo'])); ?>
<?php
}
?>

le champ user_id1 = l'id du membre
le champs user_id2 = l'id de l'amie..

l’erreur elle afffiche toujour "Vous n'avez pas d'ami(es) pour l'instat merci dans ajoutez" alors que l'utilisateur a des amies
yg_be 5551 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 18 mai 2018 Dernière intervention - 12 sept. 2017 à 09:39
peut-être ainsi:
SELECT  user_id2   FROM friends_relationships  WHERE user_id1 = :id  AND status = :1 
UNION
SELECT  user_id1   FROM friends_relationships  WHERE user_id2 = :id  AND status = :1

ou bien
SELECT  user_id2, avatar, email   FROM friends_relationships, users  WHERE user_id1 = :id  AND status = :1 AND id = user_id2 
UNION
SELECT  user_id1, avatar, email    FROM friends_relationships, users  WHERE user_id2 = :id  AND status = :1 AND id = user_id1
carterj 18 Messages postés lundi 4 septembre 2017Date d'inscription 23 septembre 2017 Dernière intervention > yg_be 5551 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 18 mai 2018 Dernière intervention - 12 sept. 2017 à 16:43
merci !! mais se toujours la même erreur qui s'affiche :(

$dox = $db->prepare("SELECT  user_id2, avatar, email   FROM friends_relationships, users  WHERE user_id1 = :id  AND status = :1 AND id = user_id2 
      UNION
      SELECT  user_id1, avatar, email    FROM friends_relationships, users  WHERE user_id2 = :id  AND status = :1 AND id = user_id1");
Commenter la réponse de carterj
jordane45 21033 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 18 mai 2018 Dernière intervention - Modifié par jordane45 le 12/09/2017 à 17:13
0
Utile
Bonjour,

Avant tout .. j'espère que tu as activé la gestion des erreurs PDO.
Voir ici comment faire :
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Ensuite,
- On place ses requêtes dans des blocs TRY/CATCH
- On n'utilise pas ROWCOUNT en PDO ! A la place on fera un fetchAll (avec si besoin, un count sur l'array $result ))
- On évite d'ouvrir/fermer des balises php à tout va.... A la place on génèrera le html dans des echo.

Bref... ton code remis en forme devrait ressembler à ceci :
(tu remarqueras que j'ai refait la requête .... mais sans connaitre la structure exacte de tes tables difficiles de savoir si elle marchera du premier coup. )

<?php
   // recupere les info daans la bdd 
   
   $sql = 'SELECT FR.user_id1
     ,U1.id as id_user1
                 ,U1.avatar as avatar1
     ,U1.email  as email1
     ,U1.pseudo as pseudo1
     ,FR.user_id2
     ,U2.id as id_usr2
     ,U2.avatar as avatar2
     ,U2.email  as email2
     ,U2.pseudo as pseudo2
           FROM friends_relationships FR
     LEFT JOIN users U1 ON U1.id = user_id1 
     LEFT JOIN users U2 ON U2.id = user_id2
     WHERE (user_id1 = :id OR user_id1 = :id) AND status = :1 '
   try{
    $dox = $db->prepare($sql);
    $dox->bindValue(':id',$id,PDO::PARAM_INT);       
    $dox->bindValue(':1','1',PDO::PARAM_STR);
    $dox->execute();
 //on stocke le resultat dans un array
 $result = $dox->fetchAll();
   }catch(Exception $e){
    echo "Erreur dans la requête " .$sql;
    echo "<br>".$e->getMessage();
   }
      
   if(!empty($result)){
      //on boucle sur le resultat
      foreach($result as $R){
  echo "<img src='". $R['avatar2'] ? $R['avatar2'] : get_avatar_url($R['email2']) ."' 
             class='avatar-xs' style='width: 50px; height: 50px;'
       alt='avatar'>";
  echo htmlspecialchars(trim($R['pseudo2']));
   }
   }else{
   // si le user n'a pas dami on lui affiche une echo... 
   echo "Vous n'avez pas d'ami(es) pour l'instat merci dans ajoutez";
   }   
?>


Cordialement, 
Jordane                                                                 
carterj 18 Messages postés lundi 4 septembre 2017Date d'inscription 23 septembre 2017 Dernière intervention - 13 sept. 2017 à 19:32
Merci bcp pour votre aide ce toujours pas resolu je trouve vraiment pas l'erreur est dû a quoi voici l'erreur en question

Notice: Undefined variable: id in C:\xampp\htdocs\friendme\friends\friends_count.php on line 20
Vous n'avez pas d'ami(es) pour l'instat merci dans ajoutez

la line 20 en question
$dox->bindValue(':id' ,$id,PDO::PARAM_INT);

quand je mi genre
$id = "" ;
l'erreur s'affiche pas mais le
 echo "Vous n'avez pas d'ami(es) pour l'instat merci dans ajoutez";
yg_be 5551 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 18 mai 2018 Dernière intervention > carterj 18 Messages postés lundi 4 septembre 2017Date d'inscription 23 septembre 2017 Dernière intervention - 13 sept. 2017 à 19:36
comment obtiens-tu l'identité de la personne connectée, celle dont tu cherches les amis?
est-ce ton premier exercice?
carterj 18 Messages postés lundi 4 septembre 2017Date d'inscription 23 septembre 2017 Dernière intervention > yg_be 5551 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 18 mai 2018 Dernière intervention - 13 sept. 2017 à 19:43
sois avec le
$_GET['id'] 
ou une function que j'ai créé
find_user_by_id('user_id');
Commenter la réponse de jordane45
carterj 18 Messages postés lundi 4 septembre 2017Date d'inscription 23 septembre 2017 Dernière intervention - 13 sept. 2017 à 19:49
0
Utile
:) sa marcher merci a vous tous. @Jordane Big up respect, @yg_be t'avais raison "l'identité de la personne connectée, "
Commenter la réponse de carterj