PHP- Dire si un membre est en ligne ou non
Pascal_22
Messages postés
534
Date d'inscription
Statut
Membre
Dernière intervention
-
Pascal_22 Messages postés 534 Date d'inscription Statut Membre Dernière intervention -
Pascal_22 Messages postés 534 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai fait des recherches sur le site mais je n'ai pas trouver exactement ce que je recherche.
Comme, plusieurs, j'ai une table "connectee" qui contient les membres en ligne depuis les 5 dernières minutes.
Cependant, question de rapidité, je me demande, comment dois-je faire pour quand on vérifie la fiche d'un membres ou affiche des résultats de recherche, je désir indiquer s'il est en ligne ou pas ..
La seule façon que je vois, est lors de la visite d'une fiche, je valide si cet usager est dans la table connecte.
Mais ce qui me chicotte, c'est est-ce que cette connexion(pour voir s'il est dans la table connectee) peu nuire à la vitesse du site quand il y a plus de 4000 membres en ligne?
Merci de votre réponse!
Pascal_22
J'ai fait des recherches sur le site mais je n'ai pas trouver exactement ce que je recherche.
Comme, plusieurs, j'ai une table "connectee" qui contient les membres en ligne depuis les 5 dernières minutes.
Cependant, question de rapidité, je me demande, comment dois-je faire pour quand on vérifie la fiche d'un membres ou affiche des résultats de recherche, je désir indiquer s'il est en ligne ou pas ..
La seule façon que je vois, est lors de la visite d'une fiche, je valide si cet usager est dans la table connecte.
Mais ce qui me chicotte, c'est est-ce que cette connexion(pour voir s'il est dans la table connectee) peu nuire à la vitesse du site quand il y a plus de 4000 membres en ligne?
Merci de votre réponse!
Pascal_22
A voir également:
- PHP- Dire si un membre est en ligne ou non
- Partager photos en ligne - Guide
- Mètre en ligne - Guide
- Membre indisponible vinted - Guide
- Formulaire en ligne de meta - Guide
- Aller à la ligne excel - Guide
13 réponses
Salut,
J'y connais rien de rien en webmastering.
Mais j'imagine que tu as une base de données avec les informations concernant chaque membre.
Pourquoi pas, à la connexion du membre, indiquer dans cette base de données, dans le champ "connecté" une valeur qui indique que le membre est connecté.
Il suffira d'afficher cette information en même temps que les autres et tu ne perdras pas en rapidité.
J'y connais rien de rien en webmastering.
Mais j'imagine que tu as une base de données avec les informations concernant chaque membre.
Pourquoi pas, à la connexion du membre, indiquer dans cette base de données, dans le champ "connecté" une valeur qui indique que le membre est connecté.
Il suffira d'afficher cette information en même temps que les autres et tu ne perdras pas en rapidité.
Bonjour,
Oui en fait j'y avait pensé, mais cette valeur de "Connecté" je peu évidamment l'inséré quand un membre se connecte, pour ca pas de problème mais ce que je n'arrive pas a voir comment, c'est quand un membre se déconnecte, s'il clique sur le lien "Se déconnecter" la biensur je peu changer la valeur pour "Pas connecter" mais si le membre décide de fermer son navigateur web (Internet Explorer, firefox, ...) sans cliquer sur "Se déconnecter", le membre n'est plus en ligne mais le champs dans la bd indiquer toujours "en ligne"
Avez vous une suggestion?
Pascal_22
Oui en fait j'y avait pensé, mais cette valeur de "Connecté" je peu évidamment l'inséré quand un membre se connecte, pour ca pas de problème mais ce que je n'arrive pas a voir comment, c'est quand un membre se déconnecte, s'il clique sur le lien "Se déconnecter" la biensur je peu changer la valeur pour "Pas connecter" mais si le membre décide de fermer son navigateur web (Internet Explorer, firefox, ...) sans cliquer sur "Se déconnecter", le membre n'est plus en ligne mais le champs dans la bd indiquer toujours "en ligne"
Avez vous une suggestion?
Pascal_22
Comment fais tu pour ta table contenant les membres en lignes les 5 dernières minutes lorsqu'ils ferment le navigateur?
c'Est un script sur chaque page, qui supprime tous les enregistrements de la table "connectée" plus vieux que 5 minutes. Aussi, sur chaque page aussi, a chaque fois qu'en membres ou non membre change de page, on va rafraichir le champs timestamps de la table Connectee ce qui fait que ce membres en actif sur le site et donc en ligne.
Des suggestions?
PAscal_22
Des suggestions?
PAscal_22
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tu dois utiliser deux champs ... un (par exemple) connected et un lastUpdate ....
Le premier est un flag ... connecté ou pas ...
Le 2eme te permettra de savoir si le membre était actif (par exemple) dans les 5 dernières minutes ...
Dans ta page tu ajoute un script de mise à jour de ce champ...
Si la mise à jour date de plus de 5 min c'est que la personne n'est plus la ... donc mettre connected à non ...
Le premier est un flag ... connecté ou pas ...
Le 2eme te permettra de savoir si le membre était actif (par exemple) dans les 5 dernières minutes ...
Dans ta page tu ajoute un script de mise à jour de ce champ...
Si la mise à jour date de plus de 5 min c'est que la personne n'est plus la ... donc mettre connected à non ...
Bonjour Elghafoud,
Si je comprends bien : Quand le scripte s'exécute pour mettre a jour le timestamps dans la table "Connectee", je crée un autre script qui va modifier le timestamp (de ce cas lastupdate) de l'usager en question de la table des membres.
Donc quand un autre usager fera une recherche ou visitera le profil de ce membres, si le timestamps est plus récent que 5 minutesm c'Est qu'il est en ligne!
Est-ce exact?
Donc en fait, est-ce vraiment besoin du 2ieme champs "Connected" ?
Merci beaucoup de votre réponse!
Pascal_22
Si je comprends bien : Quand le scripte s'exécute pour mettre a jour le timestamps dans la table "Connectee", je crée un autre script qui va modifier le timestamp (de ce cas lastupdate) de l'usager en question de la table des membres.
Donc quand un autre usager fera une recherche ou visitera le profil de ce membres, si le timestamps est plus récent que 5 minutesm c'Est qu'il est en ligne!
Est-ce exact?
Donc en fait, est-ce vraiment besoin du 2ieme champs "Connected" ?
Merci beaucoup de votre réponse!
Pascal_22
selon vous : niveau performance, rapidité d'affichage des pages, est-ce correct de faire une nouvelles connexion pour modifier le champs "LastUpdate" de la table Membres ??
Merci!
Pascal_22
Merci!
Pascal_22
Encore mieux ! Un seul champ est suffisant .... (J'avais annoncé deux au début mais j'avais des cas particulier pour mes tests...)
Pas besoin d'une 2ème connexion ... la première (pendant la récupération de l'état d'un membre) est suffisante ...
Sinon au niveau des performances ça ne change rien ... le but est de faire la maximum de scripts SQL ... tous que tu peux faire avec SQL n'hésite pas et faire le minimum avec PHP.
Par exemple juste après ta requête de récupération de statut (connected/not connected) :
//mise à jour des users actifs
update users set lastupdate = now;
//récupération du total ...
select count (*) from users where lastupdate < now - 5 minutes;
Bien évidement, now - 5 à calculer selon le format de date !
Tu ne calcule que les users qui sont actifs
Pas besoin d'une 2ème connexion ... la première (pendant la récupération de l'état d'un membre) est suffisante ...
Sinon au niveau des performances ça ne change rien ... le but est de faire la maximum de scripts SQL ... tous que tu peux faire avec SQL n'hésite pas et faire le minimum avec PHP.
Par exemple juste après ta requête de récupération de statut (connected/not connected) :
//mise à jour des users actifs
update users set lastupdate = now;
//récupération du total ...
select count (*) from users where lastupdate < now - 5 minutes;
Bien évidement, now - 5 à calculer selon le format de date !
Tu ne calcule que les users qui sont actifs
Bonjour Elghafoud
Merci de ta réponse mais là je suis légèrement mêler.
Voici ce que je fait actuellement!
sur toutes mes pages, j'ai un script PHP qu'exécute:
include('connectes.php');
et dans se fichier PHP, il y a plusieurs requête comme
en suite, a la fin de se script, je fait un count(*) pour déterminer le nombre d'internaute sur le site.
Pour cela, selon toi Est-ce correct pour niveau performance?
Maintenant avec tes messages précédant(sauf ton dernier) je croyais que sur mon script (ci-haut) j'e rajoutait un seulement un update:
mysql_query("UPDATE Membres set LastUpdate=" . time() . " where FkUsager='" . $_SESSION['FkUsager']
donc quand quelqu'un visiterait son profil, dans l'affichage des infos,je ferai une condition que le LASTUPDATE est plus petit que 5 minutesm = en ligne sinon =Hors ligne.
Puis avec tout cela je gardait la table MembresEnLigne afin de faire le count des membres en ligne...
Mais toi, si je comprends bien c'est pas ce que tu m'explique??
Merci de m'aider!!
Pascal
Merci de ta réponse mais là je suis légèrement mêler.
Voici ce que je fait actuellement!
sur toutes mes pages, j'ai un script PHP qu'exécute:
include('connectes.php');
et dans se fichier PHP, il y a plusieurs requête comme
mysql_connect("localhost", "user", "motpasse"); mysql_select_db("bd_nom"); // ------- // ETAPE 1 : on vérifie si l'IP se trouve déjà dans la table // Pour faire ça, on n'a qu'à compter le nombre d'entrées dont le champ "ip" est l'adresse ip du visiteur $retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM MembresEnLigne WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\''); $donnees = mysql_fetch_array($retour); if ($donnees['nbre_entrees'] == 0) // L'ip ne se trouve pas dans la table, on va l'ajouter { //mysql_query('INSERT INTO MembresEnLigne VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')'); mysql_query("insert into MembresEnLigne values('" . $_SERVER['REMOTE_ADDR'] . "'," . time() . "," . $_SESSION["FkUsager"] . ")"); } else // L'ip se trouve déjà dans la table, on met juste à jour le timestamp { //mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\''); mysql_query("UPDATE MembresEnLigne set timestamp=" . time() . ", FkUsager=" . $_SESSION["PkUsager"] . " where ip='" . $_SERVER['REMOTE_ADDR'] . "'"); }
en suite, a la fin de se script, je fait un count(*) pour déterminer le nombre d'internaute sur le site.
Pour cela, selon toi Est-ce correct pour niveau performance?
Maintenant avec tes messages précédant(sauf ton dernier) je croyais que sur mon script (ci-haut) j'e rajoutait un seulement un update:
mysql_query("UPDATE Membres set LastUpdate=" . time() . " where FkUsager='" . $_SESSION['FkUsager']
donc quand quelqu'un visiterait son profil, dans l'affichage des infos,je ferai une condition que le LASTUPDATE est plus petit que 5 minutesm = en ligne sinon =Hors ligne.
Puis avec tout cela je gardait la table MembresEnLigne afin de faire le count des membres en ligne...
Mais toi, si je comprends bien c'est pas ce que tu m'explique??
Merci de m'aider!!
Pascal
Pour la partie connection :
mysql_connect("localhost", "user", "motpasse");
mysql_select_db("bd_nom");
tu dois le faire une seule fois.
le reste du code tu peux le remplacer en deux lignes ....
// Si la ligne exsite ... ecrase la sinon insert.
$sql = "REPLACE INTO MembresEnLigne SET ip = '".$_SERVER['REMOTE_ADDR']."', timestamp = ".time();
//ensuite, ton count (*). ..
Voila voilou
mysql_connect("localhost", "user", "motpasse");
mysql_select_db("bd_nom");
tu dois le faire une seule fois.
le reste du code tu peux le remplacer en deux lignes ....
// Si la ligne exsite ... ecrase la sinon insert.
$sql = "REPLACE INTO MembresEnLigne SET ip = '".$_SERVER['REMOTE_ADDR']."', timestamp = ".time();
//ensuite, ton count (*). ..
Voila voilou
autre solution possible (en tout cas selon moi ^^) :
inclure dans ton fichier html un fichier javascript , et tu met dedans un timer genre "setInterval" et qui fera appel a une fonction ajax qui verifiera ami par ami si leur session est active, apres tu les affiche :p
mais je sais pas si c'est possible de verifier les $_SESSION :p
inclure dans ton fichier html un fichier javascript , et tu met dedans un timer genre "setInterval" et qui fera appel a une fonction ajax qui verifiera ami par ami si leur session est active, apres tu les affiche :p
mais je sais pas si c'est possible de verifier les $_SESSION :p
En fait, j'utilise les var $_session pour seulement quelques avoir des infos du membre connecté. comme par exemple, son id membre et son nom d'usager
Merci de votre aide!
Ma facon de faire est-elle correct ou elle a place a l'amélioration?
PAscal_22
Merci de votre aide!
Ma facon de faire est-elle correct ou elle a place a l'amélioration?
PAscal_22
Ok merci.
Mais j'en reviens au point de départ Elghafoud.
Donc mon script restera pareil pour la table MembreEnLigne.
Mais pour savoir qui est en ligne...
Toi tu semblais dire de ne pas utiliser la table MembreEnLigne et seulement utiliser la table MEmbres et faire la requête sur le champs LASTUPDATE < 5minutes pour afficher le nombre de membres en ligne.
MAis si la table contient 1million de membres, la requête va être trop longue??
a moin qu'il ne me manque un détail...
Pascal_22
Mais j'en reviens au point de départ Elghafoud.
Donc mon script restera pareil pour la table MembreEnLigne.
Mais pour savoir qui est en ligne...
Toi tu semblais dire de ne pas utiliser la table MembreEnLigne et seulement utiliser la table MEmbres et faire la requête sur le champs LASTUPDATE < 5minutes pour afficher le nombre de membres en ligne.
MAis si la table contient 1million de membres, la requête va être trop longue??
a moin qu'il ne me manque un détail...
Pascal_22