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 :

Récupérer les amies en ligne uniquement


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    je_suis_tres_gentil
    Invité(e)
    Par défaut Récupérer les amies en ligne uniquement
    bonjour voilà j'ai fais 2 pages une pour liste d'ami et l'autre c'est liste d'ami

    donc pour devenir ami ils dev ront accepté d'étre ami où refusé

    ca je l'ai fais et ça fonctionne

    mais moi qui m'interresse c'est de récupéré l'ami connecté seulement

    donc voilà j'ai fais :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?php
    // Afficher les amis en ligne
    if (isset($_SESSION['pseudo']) == TRUE)
    {
     
     
     
    	$login = $_SESSION['pseudo'];
    	 $autorisation = $_SESSION['level'] ;
     
    	if ($autorisation >= 2)
    	{
    $demande_ami = mysql_result(mysql_query('SELECT COUNT(*) FROM forum_amis 
    WHERE ami_to = '.intval($_SESSION['id']).' AND ami_confirm = "0"'), 0);
    if (empty($demande_ami)) $demande_ami=0;
     
    if ($demande_ami != 0  AND $demande_ami < 2)
    {
    	echo '(1 demande)';
    }
    elseif($demande_ami > 1)
    {
    	echo '(' . $demande_ami . ' demandes)';
    }
     
    echo '</a><br /><br />';
     
     
    $requete = mysql_query("SELECT ami
    FROM (
    	SELECT ami_from AS ami FROM forum_amis WHERE ami_to=1 AND ami_confirm=1
    	UNION
    	SELECT ami_to AS ami FROM forum_amis WHERE ami_from=1 AND ami_confirm=0
    ) ami
    ")or die(mysql_error());
    echo '<h5>Ami en ligne</h5>';
     
    while($data = mysql_fetch_array($requete)){
    if($data) echo $data['membre_pseudo']; else echo 'Aucun amis connecté';
    }
     
     $requete = mysql_query("SELECT ami
    FROM (
    	SELECT ami_from AS ami FROM forum_amis WHERE ami_to=1 AND ami_confirm=1
    	UNION
    	SELECT ami_to AS ami FROM forum_amis WHERE ami_from=1 AND ami_confirm=0
    ) ami
    	JOIN forum_amis_en_ligne
    		ON user_id=ami
    
    ")or die(mysql_error());
     
    echo '-> <a href="./voirprofil.php?m='.$data['ami_id'].'&amp;action=consulter">'.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</a> (en ligne)<br /><br />';
     
     
    }					
     }
    ?>
    donc pour Trouver tous les amis de l'utilisateur avec id=1 devrait ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ami
    FROM (
    	SELECT ami_from AS ami FROM forum_amis WHERE ami_to=1 AND ami_confirm=1
    	UNION
    	SELECT ami_to AS ami FROM forum_amis WHERE ami_from=1 AND ami_confirm=1
    ) ami
    et l'autre ca seras pour Si un membre connecté, c'est une ligne dans la table forum_whosonline; les amis connectés de l'utilisateur 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT ami
    FROM (
    	SELECT ami_from AS ami FROM forum_amis WHERE ami_to=1 AND ami_confirm=1
    	UNION
    	SELECT ami_to AS ami FROM forum_amis WHERE ami_from=1 AND ami_confirm=1
    ) ami
    	JOIN forum_amis_en_ligne
    		ON user_id=ami
    mais le souci c'est que le pseudo de mon ami ne veut pas s'affiché

    si voulez plus d'info dites le moi

    merci de votre aide

    et pour vous aidé j'ai fais 3 tables pour amis enfin si ça vous aides a comprendre comment on peut affiché justes les amis en ligne


    CREATE TABLE IF NOT EXISTS `forum_amis` (
    `ami_from` int(11) NOT NULL,
    `ami_to` int(11) NOT NULL,
    `ami_confirm` enum('0','1') collate latin1_general_ci NOT NULL,
    `ami_date` int(11) NOT NULL,
    PRIMARY KEY (`ami_to`,`ami_from`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;


    CREATE TABLE IF NOT EXISTS `forum_amis_en_ligne` (
    `user_id` int(11) NOT NULL,
    `user_time` int(11) NOT NULL,
    `date_connect` datetime NOT NULL,
    `user_ip` int(15) NOT NULL,
    PRIMARY KEY (`user_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

    CREATE TABLE IF NOT EXISTS `forum_whosonline` (
    `online_id` int(11) NOT NULL,
    `online_time` int(11) NOT NULL,
    `online_ip` int(15) NOT NULL,
    PRIMARY KEY (`online_ip`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci]
    merci de votre aide pour faire fonctionné ce bout de code

  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
    Si j'ai bien suivi ta table, si je suis l'utiliseur 24, mes amis sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ami_to AS ami FROM forum_amis WHERE ami_from=24 AND ami_confirm=1
    Mes amis connectés sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ami_to AS ami FROM forum_amis 
    JOIN forum_whosonline ON ami_to = online_id 
    WHERE ami_from=24 AND ami_confirm=1
    La table forum_amis_en_ligne je ne vois pas a quoi elle sert.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    je_suis_tres_gentil
    Invité(e)
    Par défaut
    re j'ai éssayé de connecté sur mon imode pour voir si le pseudo apparait mais il n'apparaît pas

    donc j'ai mis id 50 de l'autre pseudo pour voir mais il ne fonctionne

    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
    $requete = mysql_query("SELECT ami
    FROM (
    	SELECT ami_to AS ami FROM forum_amis WHERE ami_from=50 AND ami_confirm=1
    	UNION
    	SELECT ami_to AS ami FROM forum_amis WHERE ami_from=50 AND ami_confirm=0
    ) ami
    ")or die(mysql_error());
    echo '<h5>Ami en ligne</h5>';
     
    while($data = mysql_fetch_array($requete)){
    if($data) echo $data['membre_pseudo']; else echo 'Aucun amis connecté';
    }
     
     $requete = mysql_query("SELECT ami
    FROM (
    	SELECT ami_to AS ami FROM forum_amis WHERE ami_from=50 AND ami_confirm=1
    	UNION
    	SELECT ami_to AS ami FROM forum_amis WHERE ami_from=50 AND ami_confirm=0
    ) ami
    	JOIN forum_amis_en_ligne
    		ON user_id=ami
     
    ")or die(mysql_error());
    comment on fait merci de ton aide

  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
    comment on fait merci de ton aide
    as-tu lu ce que j'avais écris ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    je_suis_tres_gentil
    Invité(e)
    Par défaut
    oui j'ai vu quil fallait mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ami_to AS ami FROM forum_amis 
    JOIN forum_whosonline ON ami_to = online_id 
    WHERE ami_from=24 AND ami_confirm=1
    mais ça n'a pas fonctionné donc voilà j'ai bessoin d'aide merci d'avance

  6. #6
    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
    Regarde ce que donnent ces requetes dans phpmyadmin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM forum_amis 
    WHERE ami_from=ton_id AND ami_confirm=1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM forum_whosonline 
    WHERE online_id=id_de_ton_ami_connecté
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    je_suis_tres_gentil
    Invité(e)
    Par défaut
    voilà mes codes :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?php
    // Afficher les amis en ligne
    if (isset($_SESSION['pseudo']) == TRUE)
    {
     
     
     
    	$login = $_SESSION['pseudo'];
    	 $autorisation = $_SESSION['level'] ;
     
    	if ($autorisation >= 2)
    	{
    $demande_ami = mysql_result(mysql_query('SELECT COUNT(*) FROM forum_amis 
    WHERE ami_to = '.intval($_SESSION['id']).' AND ami_confirm = "0"'), 0);
    if (empty($demande_ami)) $demande_ami=0;
     
    if ($demande_ami != 0  AND $demande_ami < 2)
    {
    	echo '(1 demande)';
    }
    elseif($demande_ami > 1)
    {
    	echo '(' . $demande_ami . ' demandes)';
    }
     
    echo '</a><br /><br />';
     
     
    $requete = mysql_query("SELECT ami
    FROM (
    	SELECT ami_from AS ami FROM forum_amis WHERE ami_to=1 AND ami_confirm=1
    	UNION
    	SELECT ami_to AS ami FROM forum_amis WHERE ami_from=1 AND ami_confirm=0
    ) ami
    ")or die(mysql_error());
    echo '<h5>Ami en ligne</h5>';
     
    while($data = mysql_fetch_array($requete)){
    if($data) echo $data['membre_pseudo']; else echo 'Aucun amis connecté';
    }
     
     $requete = mysql_query("SELECT ami
    FROM (
    	SELECT * FROM forum_amis 
    WHERE ami_from=ton_id AND ami_confirm=1
    	UNION
    	SELECT ami_to AS ami FROM forum_amis WHERE ami_from=1 AND ami_confirm=0
    ) ami
    	JOIN forum_amis_en_ligne
    		ON user_id=ami
     
    ")or die(mysql_error());
     
    echo '-> <a href="./voirprofil.php?m='.$data['ami_id'].'&amp;action=consulter">'.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</a> (en ligne)<br /><br />';
     
     
    }					
     }
    ?>
    je comprend le principe c'est de relié la tables liste des membres avec liste des d'amis et répécuperé les pseudos des connécté et les amis

    merci de votre aide car là je suis un peux perdu

  8. #8
    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
    Au lieu de joindre avec forum_amis_en_ligne tu joinds avec forum_whoisonline.

    Dans le code que tu me montres,
    - il y a encore "ton_id".
    -tu as mis "ami_from=1" alors que 1 n'existe pas dans ta base
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    je_suis_tres_gentil
    Invité(e)
    Par défaut
    re j'ai enlenvé ton_id

    mais voilà l'érreur :

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND ami_confirm=1 UNION SELECT ami_to AS ami FROM forum_amis WHERE ami_from=1 ' at line 4
    merci

  10. #10
    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
    Peut-on voir ta requete (pas le code entier que tu nous mets depuis le début) maintenant ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    je_suis_tres_gentil
    Invité(e)
    Par défaut
    merci je vais laissé tombé cette fonction

    merci

  12. #12
    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
    Ce n'est pourtant pas compliqué, il s'agit vraiment d'une simple jointure comme tu l'avais déjà faite.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    je_suis_tres_gentil
    Invité(e)
    Par défaut
    re c'est la dernier chanse car aprés j'arrete à faire cette foncion

    voilà mes requettes :

    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
    $requete = mysql_query("SELECT ami
    FROM (
    	SELECT ami_from AS ami FROM forum_amis WHERE ami_to=1 AND ami_confirm=1
    	UNION
    	SELECT ami_to AS ami FROM forum_amis WHERE ami_from=1 AND ami_confirm=0
    ) ami
    ")or die(mysql_error());
    echo '<h5>Ami en ligne</h5>';
     
    while($data = mysql_fetch_array($requete)){
    if($data) echo $data['membre_pseudo']; else echo 'Aucun amis connecté';
    }
     
     $requete = mysql_query("SELECT ami
    FROM (
    	SELECT * FROM forum_amis 
    WHERE ami_from= AND ami_confirm=1
    	UNION
    	SELECT ami_to AS ami FROM forum_amis WHERE ami_from=1 AND ami_confirm=0
    ) ami
    	JOIN forum_amis_en_ligne
    		ON user_id=ami
     
    ")or die(mysql_error());
     
    echo '-> <a href="./voirprofil.php?m='.$data['ami_id'].'&amp;action=consulter">'.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</a> (en ligne)<br /><br />';
    je ne comprend pas pour il ne met mon echo auncun amis est connecté

  14. #14
    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
    Allez on liste tous les problemes :

    1 - tu as laissé SELECT * au lieu de ami_from as ami
    2 - tu n'as rien en face de ami_from=
    3 - dans la premiere partie de l'UNION le WHERE doit être sur ami_to
    4 - dans la deuxieme partie de l'UNION tu as mis ami_confirm=0
    5 - ton champ ami_confirm est de type ENUM donc la premiere valeur (0) vaut 1 et la deuxieme valeur (1) vaut 2.
    Je te conseille de transformer ton champ en BOOL et de remettre les bonnes valeurs.
    Sinon il faut que tu mettes =2 quand tu veux =1

    plus les points que j'ai déjà indiqué et que tu n'as toujours pas changé
    5 - tu as mis ami_from = 1 alors qu'il n'y pas de 1 dans ta base, il faut faire ton test avec 50 par exemple
    6 - tu fais ta jointure sur forum_amis_en_ligne au lieu de forum_whosonline, il faut egalement modifier le ON avec online_id au lieu de user_id


    Voila, si tu fais tout ca, ca va marcher.
    Et j'espere surtout que ca va t'aider a comprendre pourquoi on le fait comme ca.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    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
    est-ce que tu as converti ton champ confirm en BOOL ou est-ce que tu es resté sur le ENUM ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  16. #16
    je_suis_tres_gentil
    Invité(e)
    Par défaut
    re comment ca converti ton champ confirm en BOOL

    si tu me donnais le bon coe je promet que je comprendrais plus vite que avec des mots lol

  17. #17
    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
    Point numero 5 de mon message de 17h36 ... ca fait plaisir vraiment l'interet que tu portes a ce que j'écris.

    si tu me donnais le bon coe je promet que je comprendrais plus vite
    oui je ne suis pas sourd, j'ai bien compris que tu voulais un code tout frais.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  18. #18
    je_suis_tres_gentil
    Invité(e)
    Par défaut
    st mon amis sabotage

    ton code pour toi est bon mais il n'est pas bon pour moi car j'ai réuissis à le faire marché

    mais là il me reste juste un soucy c'est que le pseudo des amies reste affiché hors il n'est pas connecté

    et là je séche malggrés jai mis un times

    merci

  19. #19
    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
    est-ce que tu retires bien les personnes de la base whosonline quand ils se deconnectent ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  20. #20
    je_suis_tres_gentil
    Invité(e)
    Par défaut
    j'enleve le code
    Dernière modification par je_suis_tres_gentil ; 06/04/2009 à 22h04.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/06/2008, 10h22
  2. [DEBUTANT]Récupérer les x 1er lignes d'une requete
    Par tripper.dim dans le forum Oracle
    Réponses: 1
    Dernier message: 13/08/2007, 13h59
  3. Récupérer les X dernières lignes de mon fichier txt
    Par coincoin22 dans le forum Windows
    Réponses: 0
    Dernier message: 08/08/2007, 14h39
  4. Récupérer les 50 premières lignes du requête
    Par oceanediana dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/08/2006, 11h15
  5. Récupérer les N derniers lignes
    Par arsenik7 dans le forum Oracle
    Réponses: 8
    Dernier message: 12/05/2006, 13h35

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