Système de membre connectés
Résolu
aneantisseur
Messages postés
385
Date d'inscription
Statut
Membre
Dernière intervention
-
avion-f16 Messages postés 19252 Date d'inscription Statut Contributeur Dernière intervention -
avion-f16 Messages postés 19252 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour, je suis en train de développer un système qui permet d'afficher les pseudo des membres connectés par rapport a leur IP. J'explique.
J'ai une table, connectes, qui contient l'ip des connectés (visiteurs et membres confondus) ca me permet de faire un système "Il y a X Connectés". Au bout de 5 minutes, l'entrée s'efface.
Quand un membre se connecte via les champs de connexion, son IP est automatiquement inscrite dans une autre table appelée comptes.
Ce que je voudrais faire c'est voir si l'IP de tel ou tel membre est inscrit dans la table connectes, donc comparer la table connectes et la table comptes, puis associer le pseudo qui correspond a l'IP pour pouvoir l'afficher en tant que membre connecté.
J'ai fait ce code :
Mais ca ne marche pas, il me met l'erreur : Unknow column array
Cette erreur je m'en doutais un peu ^^
Pouvez-vous m'aider s'il vous plait ?
Merci
J'ai une table, connectes, qui contient l'ip des connectés (visiteurs et membres confondus) ca me permet de faire un système "Il y a X Connectés". Au bout de 5 minutes, l'entrée s'efface.
Quand un membre se connecte via les champs de connexion, son IP est automatiquement inscrite dans une autre table appelée comptes.
Ce que je voudrais faire c'est voir si l'IP de tel ou tel membre est inscrit dans la table connectes, donc comparer la table connectes et la table comptes, puis associer le pseudo qui correspond a l'IP pour pouvoir l'afficher en tant que membre connecté.
J'ai fait ce code :
$ip_test_brut = mysql_query('SELECT IP FROM comptes') or die(mysql_error()); $ip_test_brut_2 = mysql_query('SELECT ip FROM connectes') or die(mysql_error()); $array = array (''.$ip_test_brut.' => '.$ip_test_brut_2.'') or die(mysql_error()); $pseudo_test_brut = mysql_query('SELECT * FROM comptes WHERE IP = '.$array.'') or die(mysql_error()); while ($donnees = mysql_fetch_array($pseudo_test_brut)) { echo ''.$donnees['pseudo'].''; }
Mais ca ne marche pas, il me met l'erreur : Unknow column array
Cette erreur je m'en doutais un peu ^^
Pouvez-vous m'aider s'il vous plait ?
Merci
A voir également:
- Système de membre connectés
- Restauration systeme windows 10 - Guide
- Voir les appareils connectés facebook - Guide
- Membre indisponible vinted - Guide
- Vous avez besoin d'une autorisation de la part de système pour modifier ce dossier - Guide
- Liste des appareils connectés - Guide
14 réponses
$array = array (''.$ip_test_brut.' => '.$ip_test_brut_2.'') or die(mysql_error());Essaye en retirant l'espace entre "array" et "(".
Pour ton système, je te conseil d'ajouter 2 champs sur ta table des membres au lieu d'en créer une.
Ces deux champs seraient :
1/ derniere_visite (INT) : contient le timestamp du dernier chargement d'une page (mis à jour à chaque chargement de page, à l'aide d'un script inclus dans cahque page).
2/ derniere_ip (INT ou TINYTEXT) : pareil, mais cette fois ci le champ contient la dernière IP utilisée.
Tu peux directement enregistrer l'IP (TINYTEXT), mais je te conseil d'utiliser ip2long() et long2ip() pour stocker les adresses IP en INT plutôt qu'en STRING.
j'ai l'espace comme tu m'a dit, mais ca ne marche toujours pas.
Mais à quoi servirait l'enregistrement de la dernière visite ou de la dernière ip, puisque ce qui m'interesse, c'est d'associer l'ip connecté au pseudo du membre.
Mais à quoi servirait l'enregistrement de la dernière visite ou de la dernière ip, puisque ce qui m'interesse, c'est d'associer l'ip connecté au pseudo du membre.
C'est juste une autre façon de faire, celle que j'utiliserais.
Et l'IP est forcément liée au compte car c'est sur la même entrée.
Dans ta table pourraie ressembler à ça :
id | pseudo | pass_md5 | presentation | derniere_connexion | derniere_ip
Pour savoir si le membre est connecté, il suffit que "derniere_connexion" soit inférieur (ou égal) au timestamp actuel moins 300 (300 secondes = 5 minutes).
Et l'IP est forcément liée au compte car c'est sur la même entrée.
Dans ta table pourraie ressembler à ça :
id | pseudo | pass_md5 | presentation | derniere_connexion | derniere_ip
Pour savoir si le membre est connecté, il suffit que "derniere_connexion" soit inférieur (ou égal) au timestamp actuel moins 300 (300 secondes = 5 minutes).
$pdo = new PDO('mysql:host=localhost;dbname=basededonnees', 'user', 'password'); $sql = 'SELECT pseudo, derniere_ip FROM membres WHERE derniere_connexion <= '.(time() - 300); $req = $pdo->query($sql); $req->setFetchMode(PDO::FETCH_OBJ); while($membre = $req->fetch()) { echo $membre->pseudo.' est connecté avec l\'IP '.$membre->derniere_ip.'<br/>'."\n"; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Résolu ?
Pour afficher "Il y a x connectés", voilà le script :
Pour afficher "Il y a x connectés", voilà le script :
$pdo = new PDO('mysql:host=localhost;dbname=basededonnees', 'user', 'password'); $sql = 'SELECT * FROM membres WHERE derniere_connexion <= '.(time() - 300); $nbConnectes = $pdo->exec($sql); echo 'Il y a '.$nbConnectes.' connectés';
Ba j'ai réussi a faire le truc moi-même, voici le code :
Mais là logiquement, ca n'afficherait qu'un pseudo, et si je fait un while, la boucle tournerai toujours sur le même pseudo. Comment pourrais-je faire ?
if ($donnees['nbre_entrees'] != 0) { $ip_test_brut = mysql_query('SELECT ip FROM connectes') or die(mysql_error()); $array_ip = mysql_fetch_array($ip_test_brut)or die(mysql_error()); $pseudo_ip_brut = mysql_query('SELECT IP, pseudo FROM comptes') or die(mysql_error()); $pseudo_ip = mysql_fetch_array($pseudo_ip_brut)or die(mysql_error()); $ip_pseudo = $pseudo_ip['IP']; if ($array_ip['ip'] = $ip_pseudo) { echo '<li>'.$pseudo_ip['pseudo'].'</li>'; } }
Mais là logiquement, ca n'afficherait qu'un pseudo, et si je fait un while, la boucle tournerai toujours sur le même pseudo. Comment pourrais-je faire ?
Pense à désindenter tes codes avant de les copiers.
Et tu n'as toujours pas fait comme je t'ai dit, avec les champs "derniere_visite" et "derniere_ip" !
Et tu n'as toujours pas fait comme je t'ai dit, avec les champs "derniere_visite" et "derniere_ip" !
Non, je n'ai pas fait ce système, je n'ai pas essayé, j'ai donc fait celui là qui marche, et je voudrais savoir s'il y a une solution a mon problème ^^
S'il vous plait.
S'il vous plait.
Base toi sur mon script, c'est le même principe, sauf qu'il faut changer la table, le nom des champs et retirer la clause WHERE.
Voilà, j'ai fait ce système, qui est bon puisqu'il m'a afficher le pseudo d'un membre connecté, mais il ne me l'a affiché que quelques minutes, je me suis reconnecté et là, il ne veut plus rien m'afficher.
Voici le code :
Et voici le code d'update de l'ip et du timestamp (qui est intégré a toutes les pages) :
Qu'est-ce qui cloche ?
Merci
EDIT : Je viens de remarquer qu'il met le pseudo dans la liste des connectés un peu de temps après, est-ce parce que je suis en local ?
Voici le code :
$time = 300; $connectes_brut = mysql_query('SELECT * FROM comptes WHERE timestamp <= \''.(time() - $time).'\'')or die (mysql_error()); while ($donnees = mysql_fetch_array($connectes_brut)) { echo '<li><a href="envoyer_message.php?repondre='.$donnees['pseudo'].'&titre=Connecté">'.$donnees['pseudo'].'</a></li>'; }
Et voici le code d'update de l'ip et du timestamp (qui est intégré a toutes les pages) :
mysql_query("UPDATE comptes SET IP='".$_SERVER['REMOTE_ADDR']."', timestamp='".time()."' WHERE pseudo='".$verif_pseudo."'")or die (mysql_error());
Qu'est-ce qui cloche ?
Merci
EDIT : Je viens de remarquer qu'il met le pseudo dans la liste des connectés un peu de temps après, est-ce parce que je suis en local ?
Si ton champ timestamp est en INT alors ne mets pas d'apostrophes autour du nombre, sinon ça devient une chaine de caractères.
ca ferait
c'est bien ca ?
mysql_query("UPDATE comptes SET IP='".$_SERVER['REMOTE_ADDR']."', timestamp=".time()." WHERE pseudo='".$verif_pseudo."'")or die (mysql_error());
c'est bien ca ?