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 :

Affichage de l'id et pseudo de deux membres dans leur conversation


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Points : 6
    Points
    6
    Par défaut Affichage de l'id et pseudo de deux membres dans leur conversation
    Bonjour,

    Je suis en train de faire un système de mps
    Comment gérer l'affichage des iD et pseudo dans la boucle ? Je suis un peu perdu...
    $obj->id : Doit corresponde à l'id de l'expéditeur ou du destinataire
    $obj->username : Doit corresponde au pseudo de l'expéditeur ou du destinataire

    Voici le code complet :
    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
    <?php
     
            $query = $this->db->query('
            SELECT
                M.*, membres.username
            FROM
                mps M
            LEFT JOIN membres U ON U.id = M.id_expediteur
            LEFT JOIN membres U2 ON U.id = M.id_destinataire
            WHERE
                (M.id_destinataire = '.$this->session->userdata('user_id').' AND M.id_expediteur = '.$idmembre.')
                OR (M.id_destinataire = '.$idmembre.' AND M.id_expediteur = '.$this->session->userdata('user_id').')
            ORDER BY
                M.id_message DESC');
            foreach ($query->result() as $obj)
            {
             echo "Id membre: ".$obj->id." - Pseudo : ".$obj->username." - Message : ".$obj->content."<br>";
            }
     
    ?>

    Merci beaucoup

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Compartimente tes problématiques;
    Détecte d'abord si tu as un souci avec ta requête SQL.
    Tu testes la chose suivante, tu copies colles ce qu'il t'affiche comme SQL, et tu vas tester ça dans ton interface SQL, genre phpmyadmin.
    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
        $sql='SELECT
    		M.*, membres.username
    	FROM
    		mps M
    	LEFT JOIN membres U ON U.id = M.id_expediteur
    	LEFT JOIN membres U2 ON U.id = M.id_destinataire
    	WHERE
    		(M.id_destinataire = '.$this->session->userdata('user_id').' AND M.id_expediteur = '.$idmembre.')
    		OR (M.id_destinataire = '.$idmembre.' AND M.id_expediteur = '.$this->session->userdata('user_id').')
    	ORDER BY
    		M.id_message DESC';
    	echo '<pre>'.$sql.'</pre>';
       /*$query = $this->db->query($sql);
    	foreach ($query->result() as $obj)
    	{
    	 echo "Id membre: ".$obj->id." - Pseudo : ".$obj->username." - Message : ".$obj->content."<br>";
    	}
    	*/
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Points : 6
    Points
    6
    Par défaut
    Avec la requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT M . * , U.username AS exp_username, U2.username AS dest_username
    FROM mps M
    LEFT JOIN membres U ON U.id = M.id_expediteur
    LEFT JOIN membres U2 ON U2.id = M.id_destinataire
    WHERE (
    M.id_destinataire =1
    AND M.id_expediteur =2
    )
    OR (
    M.id_destinataire =2
    AND M.id_expediteur =1
    )
    ORDER BY M.id_message DESC 
    LIMIT 0 , 30

    ça m'affiche bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    id_message	id_destinataire	id_expediteur	content	created	lu	remove_from	exp_username	dest_username
    2	1	2	Hey !	2013-06-04 20:57:20	NULL	1	Lareth	Admin
    1	2	1	bonjour monsieur	2013-06-04 17:49:51	NULL	1	Admin	Lareth
    Mais maintenant le soucis se trouve au niveau de l'affichage..

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Ok, très bonne nouvelle alors, le plus dur est fait.
    Maintenant, pour que l'on t'aide, il faut que l'on sache ce que chaque objet a dans le ventre.
    Peux-tu lancer cela et nous copier coller le résultat, tu verras mieux ce que tu dois faire :
    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
      $sql='SELECT
    		M.*, membres.username
    	FROM
    		mps M
    	LEFT JOIN membres U ON U.id = M.id_expediteur
    	LEFT JOIN membres U2 ON U.id = M.id_destinataire
    	WHERE
    		(M.id_destinataire = '.$this->session->userdata('user_id').' AND M.id_expediteur = '.$idmembre.')
    		OR (M.id_destinataire = '.$idmembre.' AND M.id_expediteur = '.$this->session->userdata('user_id').')
    	ORDER BY
    		M.id_message DESC';
    	echo '<pre>'.$sql.'</pre>';
       $query = $this->db->query($sql);
    	foreach ($query->result() as $obj)
    	{
    	 echo '<pre>';
    	 print_r($obj);
    	 echo '</pre>';
    	}
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Points : 6
    Points
    6
    Par défaut
    J'ai modifié un peu la requete

    Code sql : 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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    SELECT
    		M.* , U.username AS exp_username, U2.username AS dest_username
    	FROM
    		mps M
    	LEFT JOIN membres U ON U.id = M.id_expediteur
    	LEFT JOIN membres U2 ON U2.id = M.id_destinataire
    	WHERE
    		(M.id_destinataire = 1 AND M.id_expediteur = 2)
    		OR (M.id_destinataire = 2 AND M.id_expediteur = 1)
    	ORDER BY
    		M.id_message DESC
    stdClass Object
    (
        [id_message] => 2
        [id_destinataire] => 1
        [id_expediteur] => 2
        [content] => Hey ! 
        [created] => 2013-06-04 20:57:20
        [lu] => 
        [remove_from] => 1
        [exp_username] => Lareth
        [dest_username] => Admin
    )
    stdClass Object
    (
        [id_message] => 1
        [id_destinataire] => 2
        [id_expediteur] => 1
        [content] => bonjour monsieur 
        [created] => 2013-06-04 17:49:51
        [lu] => 
        [remove_from] => 1
        [exp_username] => Admin
        [dest_username] => Lareth
    )

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    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
    $query = $this->db->query($sql);
    /*
       [id_message] => 2
        [id_destinataire] => 1
        [id_expediteur] => 2
        [content] => Hey ! 
        [created] => 2013-06-04 20:57:20
        [lu] => 
        [remove_from] => 1
        [exp_username] => Lareth
        [dest_username] => Admin
    */
    foreach ($query->result() as $obj){
       echo "Id dest : ".$obj->id_destinataire." - Pseudo : ".$obj->dest_username." - Message : ".$obj->content."<br>";
       echo "Id exp: ".$obj->id_expediteur." - Pseudo : ".$obj->exp_username." - Message : ".$obj->content."<br>";
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Points : 6
    Points
    6
    Par défaut
    J'avais déjà essaie mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Id dest : 1 - Pseudo : Admin - Message : Hey ! 
    Id exp: 2 - Pseudo : Lareth - Message : Hey ! 
    Id dest : 2 - Pseudo : Lareth - Message : bonjour monsieur 
    Id exp: 1 - Pseudo : Admin - Message : bonjour monsieur

  8. #8
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    ben oui bien sûr, vu que c'est ce qu'il y a dans ta requête.
    Et que veux-tu au juste, dans ta requête ? Tu peux tester ça ? J'ai surtout changé tes renommages de table pour y voir plus clair... et plus important, tes jointures.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
    		M.* , exp.username AS exp_username, dest.username AS dest_username
    	FROM
    		mps M
    	inner JOIN membres exp ON exp.id = M.id_expediteur
    	inner JOIN membres dest ON dest.id = M.id_destinataire
    	WHERE
    		(M.id_destinataire = 1 AND M.id_expediteur = 2)
    		OR (M.id_destinataire = 2 AND M.id_expediteur = 1)
    	ORDER BY
    		M.id_message DESC
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Points : 6
    Points
    6
    Par défaut
    Par exemple que dans la boucle
    $obj->id : Doit corresponde à l'id de l'expéditeur ou du destinataire
    $obj->username : Doit corresponde au pseudo de l'expéditeur ou du destinataire

  10. #10
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Oui alors tu peux tester ma requête, c'est à priori bon. Ton left join qui revient à un left outer te retournait trop de trucs. Il te fallait un inner join.
    D'ailleurs si tu filtres les id, autant les filtrer dès la jointure...
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
    		M.* , exp.username AS exp_username, dest.username AS dest_username
    	FROM
    		mps M
    	inner JOIN membres exp ON exp.id = M.id_expediteur and M.id_expediteur in(1,2)
            inner JOIN membres dest ON dest.id = M.id_expediteur and M.id_expediteur in(1,2)
    	ORDER BY
    		M.id_message DESC
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Points : 6
    Points
    6
    Par défaut
    C'est pire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT
    		M.* , exp.username AS exp_username, dest.username AS dest_username
    	FROM
    		mps M
    	INNER JOIN membres exp ON exp.id = M.id_expediteur AND M.id_expediteur IN(1,2)
            INNER JOIN membres dest ON dest.id = M.id_expediteur AND M.id_expediteur IN(1,2)
    	ORDER BY
    		M.id_message DESC
    Id dest : 3 - Pseudo : Admin - Message : Coucou ! Ça va ? 
    Id exp: 1 - Pseudo : Admin - Message : Coucou ! Ça va ? 
    Id dest : 1 - Pseudo : Lareth - Message : Hey ! 
    Id exp: 2 - Pseudo : Lareth - Message : Hey ! 
    Id dest : 2 - Pseudo : Admin - Message : bonjour monsieur 
    Id exp: 1 - Pseudo : Admin - Message : bonjour monsieur

  12. #12
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Meuh non c'est pas pire ! Il est probable que ton SQL soit calé.
    Faut juste que tu règles l'affichage différemment (t'es un peu perdu là il me semble).
    Une ligne dorénavant : c'est un exp, un dest, et un message...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($query->result() as $obj){
       echo "Id exp : ".$obj->id_expediteur." - Pseudo : ".$obj->exp_username." - Message : ".$obj->content. "Id dest: ".$obj->id_dest." - Pseudo : ".$obj->dest_username."<br>";
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Points : 6
    Points
    6
    Par défaut
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INNER JOIN membres dest ON dest.id = M.id_expediteur AND M.id_expediteur IN(1,2)

    c'est pas plutôt
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INNER JOIN membres dest ON dest.id = M.id_destinataire AND M.id_destinataire IN(1,2)

    ?

  14. #14
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Voui bien sûr. Mais tu avais rectifié de toi-même. Alors ? ça gazouille ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Points : 6
    Points
    6
    Par défaut
    Ça fonctionne (ça a toujours fonctionné^^ la requête a simplement été raccourcis sans le WHERE)
    Le but était simplement de savoir si il était possible de se servir d'une variable pour les ID et une pour les Pseudo, soit deux variables au lieu de quatre actuellement.
    Par contre peux-tu m'expliquer le IN dans le JOIN et plus de WHERE ?

  16. #16
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Ça fonctionne (ça a toujours fonctionné^^ la requête a simplement été raccourcis sans le WHERE)
    Non, l'essentiel était de changer le left join en inner join.

    Le but était simplement de savoir si il était possible de se servir d'une variable pour les ID et une pour les Pseudo, soit deux variables au lieu de quatre actuellement.
    Je ne comprends pas. Tu peux claquer ce que ça te retourne actuellement ?
    Par contre peux-tu m'expliquer le IN dans le JOIN et plus de WHERE ?
    Ca, c'est un détail, ton résultat reste le même.
    Le principe est que le filtre s'applique dès le départ au moment de la jointure ou bien on fait d'abord la jointure et on élimine après. Ca m'a paru plus logique de filtrer dès la jointure.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Points : 6
    Points
    6
    Par défaut
    Je ne savais même pas qu'on pouvait mettre un filtre ici^^

Discussions similaires

  1. Comparer deux fichiers dans leur intégralités
    Par jejeapollo dans le forum VBScript
    Réponses: 2
    Dernier message: 25/06/2013, 14h11
  2. Réponses: 2
    Dernier message: 14/02/2008, 15h01
  3. Réponses: 3
    Dernier message: 23/06/2007, 15h07
  4. affichage d'une valeur en relation avec deux tables
    Par mealtone dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 04/08/2006, 13h52
  5. Problème d'affichage d'image depuis une pseudo-frames
    Par kriss_87 dans le forum Langage
    Réponses: 2
    Dernier message: 24/05/2006, 22h39

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