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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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é.

  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
    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)

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