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

Langage PHP Discussion :

Personné connecté sur un chat


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 91
    Points : 44
    Points
    44
    Par défaut Personné connecté sur un chat
    Bonsoir à tous, alors voila je vous explique ce que j'aimerai obtenir.

    J'ai un tchat avec un formulaire et dedans 2 input, un pour le pseudo et un autre pour le message.
    Lorsque j'envoie un message avec le pseudo R-transat (par exemple) une session pseudo se crée et je met la valeur dans le value du message pour ne pas qu'il est à retapé son pseudo à chaque fois. Le problème vient après...

    J'aimerai récupérer le nom de tout les utilisateurs connecté des qu'ils ont posté un message

    Exemple :
    R-transat poste un message, la session R-transat est crée
    Exemple poste un message, la session Exemple est crée

    Donc maintenant il faudrait afficher dans les participants :
    R-transat et Exemple

    J'ai déjà essayé en parcourant la variable $_SESSION mais ça n'affiche que la session sur le PC actuel et donc les autre personne ne voit que leur propre pseudo.

    Indications (pour vous) : ma table est composé d'un champ, id, pseudo, message, timestamp, ip

    PS : j'ai déjà été voir le tutoriel de General Vans, mais lui il utilise un espace membre, et moi pas, donc je ne peux pas faire les même chose que lui (comme dernière connexion, etc...)

    Merci d'avance.

  2. #2
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,
    Tu peux enregistrer les informations des connectés dans une table mySQL ou un fichier,que tu aprcours pour obtenir les connectés
    Et ta session contiendra juste l'id d'enregistrement

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 91
    Points : 44
    Points
    44
    Par défaut
    Bah j'utilise déjà une BDD, j'inscris l'id, le pseudo, le message, le timestamp et l'ip.

    Et je ne peux qu'utiliser les sessions, puisque je me sert juste de ça. Et je vois pas comment faire

  4. #4
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    bah faut que tu te crées une autres table qui contiendra juste les connectés,et tu la lis pour récupérer la liste de tes connectés
    et avec une boucle,ru récupères le pseudo de chaque personne

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 91
    Points : 44
    Points
    44
    Par défaut
    Donc j'enregistre les $_SESSION dans une table, je parcours pour voir qui est connécté mais après si quelqu'un supprimer ça session (ferme son navigateur) je fais la mise à jour comment pour enlever son entré dans la table ?

    Quelle sera la structure de la table ? (il faut aussi un id en auto increment ?)

  6. #6
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bah tu peux mettre un champ d'activité,et si ça fait plus de x secondes qu'on reçoit pas de messages de sa part,on le déconnecte (on le supprime de la BDD
    Par contre,pour la structure de la base de données,à toi d'y réfléchir

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 91
    Points : 44
    Points
    44
    Par défaut
    Je pensais faire :

    si la session est supprimer donc if(session_destroy) alors on supprime l'entrée de la table sinon on touche à rien. C'est possible ou pas ? Parce que je ne veux pas le déconnecté au bout d'un certain temps.

    Edit : bon bah le if(session_destroy()) me supprimer la session ...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 91
    Points : 44
    Points
    44
    Par défaut
    Bon bah j'ai trouvé. Mais maintenant c'est pour éxécuter le fichier deconnexion.php (qui contient la requete de suppression de la session)
    lors de la fermeture du navigateur.

  9. #9
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par sliverman Voir le message
    Bon bah j'ai trouvé. Mais maintenant c'est pour éxécuter le fichier deconnexion.php (qui contient la requete de suppression de la session)
    lors de la fermeture du navigateur.
    Bonjour,
    Mais tu ne comprends toujours pas qu'un fichier php ne peut plus être traité si le navigateur est clos ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 91
    Points : 44
    Points
    44
    Par défaut
    J'ai trouvé quelque chose d'autres et je vais passer par l'inactivité de l'utilisateur. Mais j'ai un souci car ma session ne se déconnecte jamais...

    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
     
    <?php
    if(!empty($_POST['pseudo']) && !empty($_POST['message']))
    {
    	// Définition des variables
    	$pseudo = mysql_real_escape_string($_POST['pseudo']);
    	$message = mysql_real_escape_string($_POST['message']);
    	$regexpseudo = '`^([a-zéèà0-9._-]+)( (?1))?$`i';
    	$ip = get_ip();
     
    	//Si la session n'existe pas on insert dans la table session le pseudo et le timestamp (c'est pour afficher les utilisateurs qui poste)
    	if(!isset($_SESSION['pseudo']))
    	{
    		if(preg_match($regexpseudo, $pseudo))
    		{
    			if(strlen($pseudo) >= 3 && strlen($pseudo) <= 25)
    			{
    				$sql1 = "INSERT INTO session(id, pseudo, timestamp) VALUES('', '".$pseudo."', '".time()."')";
    				mysql_query($sql1) or die(mysql_error());
    			}
    		}
    	}
    	else // Sinon c'est que la session existe et donc on met à jour le timestamp de la table session
    	{
    		$sql3 = "UPDATE session SET timestamp = '".time()."' WHERE pseudo = '".$_SESSION['pseudo']."'";
    		mysql_query($sql3) or die(mysql_error());
    		//Ici on récupère le timestamp de la table session pour faire une condition, à savoir si le timestamp de la table session est inferieur au timestamp actuel + 10 secondes alors on supprime l'entrée de la table pour que l'utilisateur est sa session de supprimer. Donc d'après le code la quand je poste alors que la session existe déjà et bien on entre dans la condition et donc l'entré est supprimé
    		$requete = mysql_query("SELECT timestamp FROM session WHERE pseudo = '".$_SESSION['pseudo']."'");
    		$donnees = mysql_fetch_array($requete);
    		if($donnees['timestamp'] < time() + 5)
    		{
    			$sql = "DELETE FROM session WHERE pseudo = '".$_SESSION['pseudo']."'";
    			mysql_query($sql) or die(mysql_error());
    			session_unset();
    			session_destroy();
    		}
    	}
     
    	//Ici on crée la session et on insère le message dans la table tchat
    	if(preg_match($regexpseudo, $pseudo))
    	{
    		if(strlen($pseudo) >= 3 && strlen($pseudo) <= 25){
    			$_SESSION['pseudo'] = $pseudo;
    			$sql2 = "INSERT INTO tchat(id, pseudo, message, timestamp, ip) VALUES('', '".$_SESSION['pseudo']."', '".$message."', '".time()."', '".$ip."')";	
    			mysql_query($sql2) or die(mysql_error());
    			}
    		else
    		{
    			echo '<script>alert("Votre pseudo doit être compris entre 3 et 25 caractères inclu");</script>';
    		}
    	}
    	else
    	{
    		echo '<script>alert("Votre pseudo est invalide\nLes caractères autorisés sont :\n- alphanumériques\n- é\n- è\n- à\n- underscore(_)\n- tiret(-)\n- point(.)\n- Espace (autorisé seulement en milieu de chaîne)");</script>';
    	}
    }
    ?>

  11. #11
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Forcément...
    Tu update le timestamp avant la comparaison...
    Il faut faire le test avant de modifier le timestamp

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 91
    Points : 44
    Points
    44
    Par défaut
    Et toute façon, je fais la vérification quand je poste un message, c'est pas bon ça ?

    Donc j'ai changé ce que tu m'as dit mais toujours le même problème. Et quand je poste la session se crée et quand je reposte juste après l'entré de la table est supprimé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    if($donnees['timestamp'] < $donnees['timestamp'] + 5)
    		{
    			$sql = "DELETE FROM session WHERE pseudo = '".$_SESSION['pseudo']."'";
    			mysql_query($sql) or die(mysql_error());
    			session_unset();
    			session_destroy();
    		}
    		$sql3 = "UPDATE session SET timestamp = '".time()."' WHERE pseudo = '".$_SESSION['pseudo']."'";
    		mysql_query($sql3) or die(mysql_error());
    ?>

  13. #13
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,
    c'est pas plûtot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if($donnees['timestamp'] < (time() + 5))
    		{
    			$sql = "DELETE FROM session WHERE pseudo = '".$_SESSION['pseudo']."'";
    			mysql_query($sql) or die(mysql_error());
    			session_unset();
    			session_destroy();
    		}
    		$sql3 = "UPDATE session SET timestamp = '".time()."' WHERE pseudo = '".$_SESSION['pseudo']."'";
    		mysql_query($sql3) or die(mysql_error());
    ?

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 91
    Points : 44
    Points
    44
    Par défaut
    Non ça ne fonctionne toujours pas, et 1 fois sur 2 au niveau du poste, l'entrée s'ajoute, elle se supprimer, elle s'ajoute etc.

    Mettre les session dans un fichier texte c'est possible ?
    Après le problème c'est toujours pareil... comment les supprimer quand il clic sur déconnexion et surtout à la fermeture du navigateur.

  15. #15
    Inactif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Points : 44
    Points
    44
    Par défaut
    Bonjour,
    Je ne comprends rien, vu ta participation a
    http://www.developpez.net/forums/d82...ns-connectees/

    La méthode y es expliquée (enfin je veux dire une des méthodes)

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 91
    Points : 44
    Points
    44
    Par défaut
    Avec ma seule table de message posté (id, pseudo, message, timestamp, ip) je ne peux pas savoir à partir d'un message posté qui est connecté, donc j'ai fais une table session (id, pseudo, timestamp) et des qu'un message est posté je met le pseudo dans la table session pour afficher avec un mysql_fetch_assoc une boucle pour afficher tout les pseudo connecté mais le problème est là... pour supprimer l'entré du pseudo une fois que la session expire... par exemple 10 minute d'inactivité. Avec un lien déconnexion par de problème pour supprimer cette entrée mais si l'utilisateur quitte son navigateur sans aller sur deconnexion.php et bien la $_SESSION est supprimé mais pas l'entrée de la table session.

    Et la je ne vois pas du tout
    Sinon peut être faire un truc avec les IP mais je ne sais pas non plus.

  17. #17
    Inactif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Points : 44
    Points
    44
    Par défaut
    non,
    quand tu parcours ta table sur chaque "sois disant" en session tu fait la différence entre leur timestamp et le timestamp du moment ou tu controle.

Discussions similaires

  1. [Bug] Nombre de connectés sur le chat
    Par Auteur dans le forum Evolutions du club
    Réponses: 3
    Dernier message: 21/04/2012, 13h45
  2. [AC-2002] Pb sur "consultation des personnes connectées"
    Par babycoca dans le forum VBA Access
    Réponses: 0
    Dernier message: 07/07/2009, 09h38
  3. Réponses: 8
    Dernier message: 27/05/2008, 15h48
  4. Nombre de personnes connectées sur le forum
    Par portu dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 18/04/2006, 13h49

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