PHP - Savoir si utilisateur est connecté

Résolu/Fermé
bobox87 Messages postés 32 Date d'inscription lundi 6 septembre 2010 Statut Membre Dernière intervention 25 juillet 2011 - Modifié par bobox87 le 12/09/2010 à 22:44
bobox87 Messages postés 32 Date d'inscription lundi 6 septembre 2010 Statut Membre Dernière intervention 25 juillet 2011 - 13 sept. 2010 à 12:02
Bonjour,

Voilà j'ai un problème que je n'arrive pas à résoudre. J'essaie de créer un script qui lorsque on arrive sur la page de consultation du profil d'un membre affiche s'il est connecté ou pas.

A chaque fois qu'un utilisateur arrive sur le site il est ajouté dans ma table whosonline avec les infos suivantes. Si c'est un visiteur le online_id vaut 0. Quand il se connecte il est remplacé par l'id du membre.

online_id online_time online_ip
28 1284322261 -1062731259
27 1284322326 2130706433

Tout ce système marche bien mais quand un membre se connecte et qu'il veut consulter son profil il apparait hors ligne. Si un 2ème utilisateur se connecte, le 1er membre apparait connecté et pas le second et ainsi de suite.

Pour savoir si l'utilisateur est connecté j'exécute ce code sur la page ou on consulte le profil du membre

//On affiche si le membre est en ligne     
$sql = mysql_query('SELECT online_id FROM whosonline ORDER BY online_id');      
$membres_connectes = mysql_fetch_array($sql); // liste de tous les connectés $membre_id = $_GET['id'];// id du membre dont on consulte le profile     
if (in_array($membre_id, $membres_connectes)){     
echo "en ligne";
}     
else echo "hors ligne";


Je comprends vraiment pas ce qui foire, j'ai utilisé la même technique pour empêcher un membre d'ouvrir deux connexions simultanées et ça marche parfaitement.

6 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
13 sept. 2010 à 10:25
et comme ça:

$sql = "SELECT online_id FROM whosonline WHERE online_id='".mysql_real_escape_string($_GET['id'])."'";
$result=mysql_query($sql);
$data=mysql_fetch_assoc($result);

if ($data['online_id']!=0){     
    echo "en ligne";
}     
else{
     echo "hors ligne";
}
0
bobox87 Messages postés 32 Date d'inscription lundi 6 septembre 2010 Statut Membre Dernière intervention 25 juillet 2011 1
Modifié par bobox87 le 13/09/2010 à 11:16
Bon sang je suis d'un côté hyper content car ton code marche à la perfection et je te remercie vraiment, car là il ne me restait plus beaucoup de cheveux à force de me les arracher^^

Et d'un autre côté je ne comprend pas du tout pourquoi celui la marche et pas le mien. L'idée de comparer l'identifiant du membre qu'on visite avec la liste des identifiants de tous les membres me paraissait logique aussi...

Je ne voudrais pas trop en demander mais si tu as des éléments d'explications je suis tout ouïe.

Mais déjà un grand merci pour ton code !
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
13 sept. 2010 à 11:37
c'est plus logique de demander à mysql de faire déja le tri par rapport à l'id

ensuite esayes ça avec ton code:
$sql = mysql_query('SELECT online_id FROM whosonline ORDER BY online_id');      
$membres_connectes = mysql_fetch_array($sql); // liste de tous les connectés
//pour voir la guelle de ton array
//ce que tu recherche est dans la valeur ou dans la clef ?
echo '<pre>';
print_r($membres_connectes);
echo '</pre>';
0
bobox87 Messages postés 32 Date d'inscription lundi 6 septembre 2010 Statut Membre Dernière intervention 25 juillet 2011 1
Modifié par bobox87 le 13/09/2010 à 11:53
Pour le membre qui l'id 27

Array 
( 
    [0] => 27 
    [online_id] => 27 
)


Moi ce que je cherche est dans la valeur. Tu veux dire que mon erreur était de comparer la clé de l'Array avec le $_GET['id'] ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
13 sept. 2010 à 11:58
non l'id était bien dans la valeur

mais en fait ton erreur est de sortir tous les online_id dans l'array qu'ils soient à 0 ou pas
0
bobox87 Messages postés 32 Date d'inscription lundi 6 septembre 2010 Statut Membre Dernière intervention 25 juillet 2011 1
13 sept. 2010 à 12:02
J'avais essayé de rajouter une condition dans ma requête WHERE id_online > 0 mais ça ne marchait pas bien non plus s'il n' y avait aucun membre connecté et juste des visiteurs.

En tout cas ta méthode marche quoi qu'il arrive donc MERCI!

Sujet résolu !
0