IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Liste gestion d'ami


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Par défaut Liste gestion d'ami
    Bonjour, j'ai un problème d'affichage de la liste d'amis j'ai créer la table suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE `me_amis` (
      `ami_from` int(11) NOT NULL,
      `ami_to` int(11) NOT NULL,
      `status` int(11) NOT NULL,
      PRIMARY KEY  (`ami_from`,`ami_to`)
    )
    Tous se passe pour le mieux,j'ai juste une petite erreur d'affichage dans la liste des amis, seul le membre qui a poster la demande s'affiche, je m'explique,

    Amis1 demande a Amis2 et Amis2 accepte
    Amis2 voit Amis1 dans sa liste mais Amis1 ne voit pas Amis2 dans sa liste.
    Je ne comprend pas mon erreur,j'ai beau relire mon code dans tous les sens je ne trouve pas.Merci de votre aide.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    $requete = mysql_query("SELECT (ami_from + ami_to - ".intval($_SESSION['id']).") AS ami_id, identifiant 
    FROM me_amis
    LEFT JOIN me_utilisateur ON id = (ami_from + ami_to - ".intval($_SESSION['id']).")
    WHERE (ami_from = '".intval($_SESSION['id'])."' OR ami_to = '".intval($_SESSION['id'])."') AND status = '1' ORDER BY id");
    echo '<table id="utilisateurs" border="0" cellpadding="5" cellspacing="0">
    <tr id="head">
    <td width="20%"> Membre </td> <td width="20%"> Etat </td> <td width="20%"> MP </td>  <td> Supprimer </td>
    </tr>';
    if (mysql_num_rows($requete) == 0)
    {
    echo '<td colspan="4" align="center">Aucun ami dans votre liste pour le moment</td>';
    }
    while ($data = mysql_fetch_assoc($requete))
    {
    echo '<tr><td><a href="index.php?page=profil&membre='.$data['identifiant'].'">'.stripslashes(htmlspecialchars($data['identifiant'])).'</a></td>
    <td><img src="include/images/activer_16.png"></td>
    <td><a href="index.php?page=ecrire-message&destination='.$data['identifiant'].'"><img src="include/images/mp_16.png" /></a></td>
    <td><a href="#'.$data['ami_id'].'"><img src="include/images/supprimer_16.png" /></a></td>';
    echo '</tr>';
    }
    echo '</table>';
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pour la liste d'amis c'est uniquement les ami_to que tu veux.

    Donc une requête comme ça :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ami_to AS ami_id, identifiant FROM me_amis 
    JOIN me_utilisateur ON me_utilisateur.id = ami_to
    WHERE ami_from = 1 AND status = 1
    ORDER BY id

    Il faut bien sur que quand on accepte un ami, cela ajoute une ligne pour chacun.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Par défaut
    Merci sabotage pour ton aide mais le code que tu m'as donné ne fonctionne pas,
    en faite je ne dois pas récupérer uniquement ami_to tout dépend si tu es l'envoyeur ou si tu es le receveur.
    J'ai pensé à mettre un UNION mais le résultat est identique.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    tout dépend si tu es l'envoyeur ou si tu es le receveur
    Comme je t'ai dis, il faut un enregistrement pour chacune des parties ; sinon si l'un des deux supprimer l'ami, il est supprimé pour les deux.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par tison06
    en faite je ne dois pas récupérer uniquement ami_to tout dépend si tu es l'envoyeur ou si tu es le receveur.
    Il me semble que le but de ton code est justement de récupérer les amis pour 1 personne, non ?
    De plus, on voit $_SESSION['id'], qui comme ça, serait l'ID de la personne, de ami_from, non ?
    Sinon, comment ce fait il que ton code ne prévoit pas de savoir à qui on a affaire, qui est l'envoyeur ou le receveur.
    Sinon, question : A quoi, ou à qui correspond $_SESSION['id'] ?

    Si c'est le cas, théoriquement on rechercherait les ami_to correspondant à ami_from, de $_SESSION['id'] :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT a.ami_to
    FROM me_amis a
    JOIN me_utilisateur u ON id = a.ami_from
    WHERE a.ami_from = $_SESSION['id']
    AND STATUS = 1
    Aussi, je remarque un autre nom de champ "identifiant", qui serait dans "me_utilisateur".
    Quel différence il y a t-il entre le champ "id" et ce champ "identifiant" ?

    Puis faudrait expliquer le pourquoi tu effectue des additions et soustractions sur des IDs, ça ma parais vraiment étrange.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Sinon, comment ce fait il que ton code ne prévoit pas de savoir à qui on a affaire, qui est l'envoyeur ou le receveur.
    C'est là ou je veux en venir je m'explique:
    j'ai créer deux tables me_amis et me_utilisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE `me_amis` (
      `ami_from` int(11) NOT NULL,
      `ami_to` int(11) NOT NULL,
      `status` int(11) NOT NULL,
      PRIMARY KEY  (`ami_from`,`ami_to`)
    )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    CREATE TABLE `me_utilisateur` (
      `id` int(10) NOT NULL auto_increment,
      `cle` varchar(32) NOT NULL,
      `identifiant` varchar(250) NOT NULL,
      `email` text NOT NULL,
      `passe` varchar(250) NOT NULL,
      `nom` varchar(255) NOT NULL,
      `prenom` varchar(255) NOT NULL,
      `etat` int(1) NOT NULL default '1',
      `niveau` int(5) NOT NULL,
      `newsletter` int(1) NOT NULL,
      `afficher_email` int(1) NOT NULL,
      `avatar` text NOT NULL,
      `tavatar` varchar(100) NOT NULL,
      `date` varchar(100) NOT NULL,
      `heure` varchar(100) NOT NULL,
      `ddate` varchar(100) NOT NULL,
      `dheure` varchar(100) NOT NULL,
      `site` text NOT NULL,
      `cat_id` varchar(1) NOT NULL,
      `cat_libelle` text NOT NULL,
      `description` text NOT NULL,
      `motcles` text NOT NULL,
      `commentaire` text NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
    Chaque utilisateur qui est inscrit à la possibilité d'ajouter ou valider des amis.
    Si Amis1 demande à Amis2 alors l'id de Amis1 sera insérer dans ami_from et l'id de Amis2 sera insérer dans Amis_to et vice versa, comment obtenir la liste des amis une fois connecter à son compte !

    Citation Envoyé par RunCodePhp Voir le message
    Quel différence il y a t-il entre le champ "id" et ce champ "identifiant" ?
    Le champ id c'est l'id de me_utilisateur et identifiant c'est le pseudo !

  7. #7
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Le champ id c'est l'id de me_utilisateur et identifiant c'est le pseudo !
    Son nom est vachement trompeur, pas très explicite, tu ne trouve pas?
    Un identifiant coté SQL signifie un ID, un nombre, un entier unique, alors que là, aucun rapport.
    Pourquoi ne pas utiliser "pseudo" comme nom ?
    Remarque comme ça, on est d'accord

    Si Amis1 demande à Amis2 alors l'id de Amis1 sera insérer dans ami_from et l'id de Amis2 sera insérer dans Amis_to et vice versa, comment obtenir la liste des amis une fois connecter à son compte !
    C'est $_SESSION['id'] qui contient l'id de la personne quant il se log, non ?
    Du coup, cette personne est connue.
    Je ne vois pas où est le problème.
    En tout cas, faut répondre aux questions, comme : à qui correspond $_SESSION['id'] ?

    D'ailleurs, comment fait tu pour insérer un ami, quelle donnée correspond à ami_from, et quelle donnée correspond à ami_to ?
    Théoriquement, c'est à ami_from que correspondrait à $_SESSION['id'], non ?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    C'est $_SESSION['id'] qui contient l'id de la personne quant il se log, non ?
    Exactement
    Je ne suis pas pro c'est pour cela que je solicite votre aide et comprendre où je vais.

  9. #9
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par tison06
    Exactement
    Je ne suis pas pro c'est pour cela que je solicite votre aide et comprendre où je vais.
    Moi non plus je ne suis pas pro, mais il me semble qu'on t'as donné quellques explications, et la requête surtout, je ne vois quoi faire de plus.

    En jetant un oeil à ce tuto, je remarque qu'il comporte pas mal d'erreurs, et malgré les interventions de certain membres, ces erreur ne seraient pas corrigées.
    Faudra éviter de prendre texto tout le code, faut le comprendre, et corriger les erreurs.

    D'ailleurs, son astuce pour éviter de récupérer soit même comme ami me semble tordu.
    Si la Bdd exprime qu'on a soit même comme ami, ça veut dire que la valeur du ami_from serait la même que le ami_to.
    Certes, c'est possible, mais la logique veut qu'avant de créer un ami, on aura pris soin d'éviter de s'insérer soit même, donc de vérifier que les 2 IDs (ami_from/ami_to) soient différents.
    Je dirais même qu'on évitera de proposer soit même comme ami.

    Vois tu mieux ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Par défaut
    Salut j'ai revu mon code et modifié quelques lignes le tuto date de 2006 et effectivement il n'est pas corrigé, j'ai inséré ton code qui fonctionne très bien et à présent les amis s'affiche correctement mais j'ai un petit souci, l'admin a la possibilité d'activer ou désactiver un membre.
    Dans la table me_utilisateur se trouve une colonne "Etat" et je voudrais savoir:
    Dois-je créer une autre jointure avec etat="1" ou peux t-on l'intégrer dans la jointure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     JOIN me_utilisateur u ON id = a.ami_from
    A l'heure actuel les amis s'affiche même si l'admin en a désactivés.

    Merci d'avance et un GRAND merci pour l'aide que tu m'as apporté.

  11. #11
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Dois-je créer une autre jointure avec etat="1" ou peux t-on l'intégrer dans la jointure [code] JOIN me_utilisateur u ON id = a.ami_from
    Si tu veux les exclure, et bien faut le rajouter.
    Mais ce n'est pas une jointure, c'est une condition.

    C'est pour cela quelle ce trouve dans le WHERE (en Français -> Sélectionner ... blablabla ... Où le etat vaut 1)

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Par défaut
    Je sais que vous ne donnez pas de code tout fait mais je galère vraiment j'ai bien compris le fonctionnement et le pourquoi de mes erreurs, j'ai beau essayer de mettre etat='1' dans le where mais il ne semble pas le prendre en compte.
    cela fait trois jours que j'essaie sans aucun résultats les membres désactivés reste visible dans la liste d'ami,il ne me reste plus que ce problème à régler et mon module sera distribuer gratuitement a toute un communauté.
    Vous pouvez voir le rendu ci dessous
    http://membris.hebergratuit.com/
    Encore merci de votre aide
    a bientôt

  13. #13
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Je sais que vous ne donnez pas de code tout fait
    C'est que dans la majorité des cas il est plus judicieux et fructueux que ce soit celui qui rencontre un problème post son code (que l'inverse), car c'est en constatant l'erreur qu'on voit où elle se situe.
    Puis il me parais plus simple de partir sur un code de la personne.
    Donc post ton code que tu as actuellement.


    Il est évident que pour tester ça convenablement il faut que tu ait des enregistrements dont certains ont le "etat" à 1, et d'autre à 0.
    Puis si la requête liste par exemple les amis d'une personne donnée, il faut que parmi ses amis certains aient des "etat" à 1 et 0.
    Il faut donc au niveau de la requête faire la différence entre le "etat" de de la personne donnée et ceux des amis.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 10
    Par défaut
    Voilà mon code actuel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = mysql_query("SELECT ami_id, a.ami_to
    FROM me_amis a
    JOIN me_utilisateur u ON identifiant = a.ami_from
    WHERE etat = 1 AND a.ami_from = '".$_SESSION['identifiant']."' ORDER BY id") or die(mysql_error());

  15. #15
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    J'ai surement fais une erreur d'inattention plus haut, code que tu t'est basé, mais théoriquement la jointure devrait se faire sur "ami_to" car c'est eux qu'on souhaite récupérer.
    D'ailleurs, n'as tu pas remarqué une anomalie sur les données récupérées précédemment en le faisant sur le "ami_from" ?

    Tu fais une jointure ça le champ "identifiant", ça n'a aucun sens, ces données contiennent des pseudos, et non des IDs d'utilisateurs.
    Idem pour le $_SESSION['identifiant'].
    Que vient faire les pseudos la dedans ?
    Puis la requête contient un champ inexistant -> ami_id, ça devrait provoquer une erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $sql = mysql_query("SELECT u.id, a.ami_to, u.nom, u.prenom
    FROM me_amis a
    JOIN me_utilisateur u ON u.id = a.ami_to
    WHERE u.etat = 1
    AND a.ami_from = '".$_SESSION['id']."'
    ORDER BY u.id") or die(mysql_error());
    J'ai rajouté le champ "id", théoriquement c'est inutile car ça doit être identique à ami_to, mais c'est justement pour que tu puisse les voir et les comparer. Si c'est pas les mêmes, alors ça va pas.

    Puis quand tu fais l'essai, il faut que parmi tes enregistrement il y aient des amis désactivés par rapport à la personne (etat à 0), sinon tu ne remarqueras pas.
    Est ce que ta Bdd représente ça au moins pour 1 personne ?

Discussions similaires

  1. [MySQL] Gestion d'amis
    Par taha221 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/08/2014, 11h58
  2. [Turbo Pascal] Unité Lists : Gestion de listes chaînées d'objets quelconques
    Par Eric Sigoillot dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 07/04/2014, 20h18
  3. [MCD] Gestion des amis
    Par Chromozome dans le forum Schéma
    Réponses: 2
    Dernier message: 16/08/2009, 22h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo