Afficher icone selon statut ONLINE/OFFLINE

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Afficher icone selon statut ONLINE/OFFLINE

Re: Afficher icone selon statut ONLINE/OFFLINE

par to175 » 05 déc. 2011, 00:42

Bonsoir,
j'aimerais bien moi aussi affiché une icone bleue pour un connecté et rouge pour un déconnecté... vu la date je pense que vous avez dû réussir, dans ce cas pouvez vous poster vos résultats? :priere:
merci

par Tyrese » 07 août 2007, 23:12

Oki jvais bosser sur ça alors Sékiltoyai =) Merci pour ces infos
Tu as donc bien un endroit où tu vérifie que le membre qui demande une page est connecté ?
En fait j'utilise les sessions,
if (!$_SESSION["dpteam"]) {
pour savoir si un membre est connecté sur le site.

Et si jdois utilisé ceci, que dois je mettre derriere ?

[EDIT] C'est good, j'ai mis ça sur ma page d'index et c'est nickel :)
if ($_SESSION["dpteam"]) {  mysql_query("UPDATE dp_utilisater SET lastquerytime = 'time()' WHERE pseudo= '$login'") or die(mysql_error());  }
?>
Sinon, j'ai aussi adapté ce code pour la déconnexion donc quand un utilisateur appuie sur la touche "deconnexion", son statut change en offline :D
Cependant, y-a-t'il une astuce pour ne pas attendre 5 minutes et mettre un utilisateur automatiquement déconnecté lorsqu'il ferme son navigateur ou s'il part sur autre site sans appuyer sur la touche déconnexion?

par Sékiltoyai » 07 août 2007, 22:42

Sinon pour le champ status, je n'arrive pas à poursuivre la requete après lastquerytime < SUBDATE( NOW(), INTERVAL 5 MINUTE ) pour afficher l'image etc :/
Bah, ya pas de problème, je te dis qu'à chaque fois que tu demande statut, tu remplaces par lastquerytime < SUBDATE( NOW(), INTERVAL 5 MINUTE ), avec éventuellement un alias statut si ca te facilite la récupération des données.
Si tu fais la requète :

Code : Tout sélectionner

SELECT pseudo, statut FROM table WHERE truc-'machin'
tu remplaces par

Code : Tout sélectionner

SELECT pseudo, lastquerytime < SUBDATE( NOW(), INTERVAL 5 MINUTE ) AS statut FROM table WHERE truc-'machin'
Si tu fais

Code : Tout sélectionner

SELECT pseudo, machin, truc FROM table WHERE statut='online'
tu fais

Code : Tout sélectionner

SELECT pseudo, machin, truc FROM table WHERE lastquerytime < SUBDATE( NOW(), INTERVAL 5 MINUTE ) AS statut
Je ne vois pas où tu peux avoir du mal à continuer la requète, c'est juste un remplacement.

par zeus » 07 août 2007, 22:41

si je ne m'abuse, tu acceptes des membres connecté sur ton site.

Tu as donc bien un endroit où tu vérifie que le membre qui demande une page est connecté ? C'est à cet endroit que je te conseille de mettre la mise à jour ...

C'est un trou à performance mais je ne vois pas d'autres solutions ;)

par Tyrese » 07 août 2007, 22:26

Il ne faut donc pas mémoriser la date de dernière connexion mais la date de la dernière visite, c'est à dire la dernière fois que ce membre à afficher une page ;)
Petite question, comment mémoriser la dernière visite ? :p Parce que la derniere connexion, c'est simple, je la mémorise lors du login de la personne, mais la dernière visite, je vois pas mis à part un cookie mais je dois surement par chercher au bon endroit :) Pourrais tu eclairer ma lanterne par un exemple ? =)

Sinon pour le champ status, je n'arrive pas à poursuivre la requete après lastquerytime < SUBDATE( NOW(), INTERVAL 5 MINUTE ) pour afficher l'image etc :/

par Sékiltoyai » 07 août 2007, 16:32

Et je t'ai dit d'abandonner l'idée d'un champ status qui est inutile. Le statut, tu l'as avec le test

Code : Tout sélectionner

lastquerytime < SUBDATE( NOW(), INTERVAL 5 MINUTE )
Partout où tu as besoin du statut dans une requète, tu remplace par le test.
Je ne vois pas pourquoi tu veux te compliquer avec un champ supplémentaire inutile.

par zeus » 07 août 2007, 15:16

Il ne faut donc pas mémoriser la date de dernière connexion mais la date de la dernière visite, c'est à dire la dernière fois que ce membre à afficher une page ;)

Du coup, à chaque fois qu'il affiche une page, son compteur repart pour 5mn ;)

par Tyrese » 07 août 2007, 14:46

Bon alors j'ai étudié le probleme sous différente couture, et je suis revenu à l'idée de créer une colonne status dans ma table d'utilisateurs.

Alors voilà pourquoi :
$query1 = "UPDATE dp_utilisater SET lastquerytime=NOW(), status='online' WHERE pseudo='$pseudo'"; //On l'écrit dans la table
  mysql_query($query1);
Lors de la connection d'un utilisateur, l'heure est enregistré, de meme que son statut.

Dans la page membre, voilà ce que j'ai introduit pour obtenir l'image "online" ou "offline".
$query = ("SELECT * FROM $db_prefix"._utilisater." WHERE squad='$id'") or die(mysql_error()); 
$result = mysql_query($query);

$tr = 1;
while( $ligne = mysql_fetch_array($result))
{
extract($ligne);
$userstatus = $ligne["status"];
$userid = $ligne["id"];
if($ligne[status] == "") { $status = ""; }
else { $status = "Status : $ligne[status]<br>"; }

$ligne[info] = stripslashes($ligne[info]);
$imglink = "admin/uploads/members/$ligne[pseudo].jpg";
if(file_exists($imglink)){$img = $imglink; $link="1";}
else{
 $img = "admin/uploads/members/nopic.jpg"; $link="0";
}
$ligne[grade] = stripslashes($ligne[grade]);
if($ligne[grade] == "") { $grade = ""; }
else { $grade = "Grade : $ligne[grade]<br>"; }

echo "
<tr>
  <td class='leftb'><img src='admin/uploads/flags/$ligne[pays].gif'></td>
  <td width='150' class='leftb'><a href='?p=equipe&action=view&id=$userid'><B>$ligne[pseudo]</b></a></td>
  <td width='150' class='leftb'><i>$ligne[grade]</i></td>
  <td class='leftb' width='50'><center><img src=img/$ligne[status].gif></center></td>
  </tr>
   <tr>
     <th class='breakline' height='100%' colspan='6'></th>
 </tr>
";
}
Ensuite, sur ma page index.php, je souhaiterais que la personne soit offline au bout de 5 minutes. J'ai donc mis ça :
$query7 = ("UPDATE dp_utilisater SET status='offline' WHERE lastquerytime < SUBDATE( NOW(), INTERVAL 5 MINUTE )"); //On l'écrit dans la table
mysql_query($query7);


Jusque là, pas de probleme, mes statuts sont mis à jour lorsque les gens se connectent, et 5 minutes après, ils sont mis offline.

Miantenant, j'ai une interrrogation. J'aimerais que, tant que les utilisateurs sont sur leur session et donc connectés avec leur login, que leur timestamp soit rafraichit.
Est-il possible de mettre à jour le timestamp si l'utilisateur est toujours connecté au site ? Si oui, comment vu que la personne n'est jamais déconnecté d'elle meme, mais au bout de 5 minutes meme si elle est toujours présente sur le site ?[/b]

par Tyrese » 07 août 2007, 08:20

Alors en fait les utilisateurs de cette page sont les joueurs de plusieurs équipes de jeux en réseau.
Toutes ces personnes auront cette image à coté de leur pseudo sur cette page et uniquement sur cette page. C'est juste une page php. Donc c'est pour ça, j'aurais tendance à dire qu'il suffit de récupérer la liste de tous les membres (de ces équipes et au delà car on sait jamais, je risque de faire un bloc de tous les membres connectés au site, à part de cette page) et de leur attribuer l'image appropriée (on line ou offline) à coté de leur pseudo.
J'espere t'avoir éclairé sur ma création =)

par Sékiltoyai » 07 août 2007, 03:06

Est ce que tu pourrais m'expliquer dans quel cadre les utilisateurs auront cette image à côté de leur pseudo ? C'est quand on va voir leur profil ? Ou bien quand on voit leurs contributions (post, commentaire), par exemple pour un forum ou un blog ?
Parce que j'aurais tendance à te dire que récupérer la liste des connectés et dire s'il doit y avoir telle ou telle image à côté d'un pseudo, ce sont deux requètes différentes. On peut regroupper les deux en une requètes avec un code php approprié, mais s'il n'y a que l'un ou l'autre à récupérer, par exemple, les 2 requètes sont différentes.

par Tyrese » 07 août 2007, 01:07

en fait je bloque après cela :
$query1 = ("SELECT pseudo, lastquerytime > SUBDATE( NOW(), INTERVAL 5 MINUTE ) AS online FROM dp_utilisater") or die(mysql_error()); //Tous ceux qui ont fait un truc y a moins de 5min
$resultat = mysql_query($query);
while( $online = mysql_fetch_array($resultat))
{
J'ai donc ecrit ce code sur tes conseils, j'ai donc selectionné tous les utilisateurs en ligne depuis moins de 5 mnutes et ceux ci sont considérés online. Cependant, je n'arrive pas à aller plus loin en spécifiant que ces utilisateurs devront avoir une image à coté de leur pseudo.
De plus je ne sais meme pas si mon code est bon :/ je galère sévère, c'est dur le php quand on approfondit lol :p

par Sékiltoyai » 06 août 2007, 23:47

Cette requète te donne la liste des membres, avec dans l'alias online, s'ils sont en ligne ou non. Tu n'as plus qu'à faire un test sur cette variable pour afficher telle ou telle image. Et si tu veux sélectionner des membres précis, tu spécifies ta condition dans le WHERE, et tu auras ces membres, avec en plus, dans l'alias online, s'ils sont connectés ou non. C'est plus clair ?
Dans le cas contraire, il va falloir me dire où tu bloques…

par Tyrese » 06 août 2007, 21:32

J'ai du mal je t'avouerais lol

je ne comprends pas très bien ta fonction mais surtout où mettre le WHERE.
SELECT pseudo, lastquerytime > SUBDATE( NOW(), INTERVAL 5 MINUTE ) AS online FROM dp_utilisater;
Si je comprends bien ce code, on selectionne la colonne des pseudos et les pseudos qui sont online depuis moins de 5 minutes et on les identifie comme online. Si c'est le cas, je ne vois pas comment continuer ce code

par Sékiltoyai » 06 août 2007, 19:12

Bah à ce moment, là, tu peux faire un truc de ce style :

Code : Tout sélectionner

SELECT pseudo, lastquerytime > SUBDATE( NOW(), INTERVAL 5 MINUTE ) AS online FROM dp_utilisater;
Tu mets la condition que tu veux dans le WHERE et tu as les membres que tu veux, avec leur status.

par Tyrese » 06 août 2007, 18:09

nickel je te remercie pour toutes ces infos, cependant j'ai apporté une modif à UPDATE dp_utilisater SET lastquerytime=NOW() WHERE pseudo='$pseudo'

en effet, lorsque j'ai mis ce code, dans ma sql, j'avais juste l'année qui était retenu alors j'ai mis ça UPDATE dp_utilisater SET lastquerytime=NOW() + 0 WHERE pseudo='$pseudo'
et là, nickel :)

donc me voilà avec ma liste de connecter à jour je te remercie pour ces éclairages =)

maintenant pour ce qui ait d'assigner une image... ne sachant pas comment faire, j'ai crée la colonne status à cet effet avec comme valeur par défaut 'offline' (car mon image s'appelle offline.gif, c'etait plus simple pour moi et en plus j'arrive à afficher l'image où je veux).

extract($ligne);
$userstatus = $ligne["status"];
$userid = $ligne["id"];
if($ligne[status] == "") { $status = ""; }
else { $status = "Status : $ligne[status]<br>"; }

echo "
<tr>
 <td class='leftb' width='50'><center><img src=img/$ligne[status].gif></center></td></tr>"
Cependant, j'imagine bien qu'il y a plus simple en se servant du code $query1="SELECT pseudo FROM dp_utilisater WHERE lastquerytime > SUBDATE( NOW(), INTERVAL 5 MINUTE)"; mais je suis figer à vrai dire. De même pour mes connectés, je n'arrive pas à les afficher où je veux.

Le
while ($row = mysql_fetch_array($result)) //Tant qu'on a des noms
{
 echo $row[0]."<br>"; //On les affiche
}
me bloque.