Page 1 sur 1

Afficher le statut d'un membre (En ligne / Hors ligne) PHP

Posté : 03 avr. 2013, 08:26
par nico44530
Bonjour,

J'aimerais afficher sur le profil des membres de mon site, leur statut : En ligne ou Hors ligne.
J'ai ajouté dans ma table membre un nouveau champ : statut type VARCHAR.
Ensuite j'ai fait une condition pour filtrer uniquement le membre avec la session ouverte et j'ai créé des requêtes, et le problème
c'est que dans ma base de donnée, il y a bien OFFLINE chez "Guillaume" par défault, et ONLINE chez moi vu que je me suis connecté.
Et quand je me connecte, j'ai bien mon statut : En ligne. Et quand je visite le profil de "Guillaume" il est aussi En ligne, alors que dans ma base, son statut est OFFLINE (Et il ne peut pas être connecté, c'est un membre que j'ai créé pour les tests).

Je précise que $pseudo, et $pseudo_membre sont déclarées avec ces requêtes :
$pseudo = $_SESSION['pseudo']; //Quand on visite son propre profil
$req = $connect->prepare('SELECT * FROM wa_communaute WHERE pseudo = :pseudo');
$req->execute(array('pseudo' => $pseudo));
$resultat = $req->fetch();

$pseudo_membre = $_GET['pseudo']; //Quand on visite le profil d'un membre
$req = $connect->prepare('SELECT * FROM wa_communaute WHERE pseudo = :pseudo');
$req->execute(array('pseudo' => $pseudo_membre));
$result = $req->fetch();
Voici mes requêtes :
if($_SESSION['pseudo'] == $resultat['pseudo']) {
$req1 = $connect->prepare('UPDATE wa_communaute SET statut = :statut WHERE pseudo = :pseudo');
$req1->execute(array('statut' => 'online','pseudo' => $pseudo));
$req1->closeCursor();
$req2 = $connect->prepare('SELECT * FROM wa_communaute WHERE statut = :statut AND pseudo = :pseudo');
$req2->execute(array('statut' => $statut,'pseudo' => $pseudo));
$req2->closeCursor();
$donnees0 = $req2->fetch();
if($donnees0['statut'] == $statut){
	echo 'Connecté ..';
} else {
	echo 'Hors ligne ..';
}
} else {
$req3 = $connect->prepare('SELECT * FROM wa_communaute WHERE pseudo = :pseudo');
$req3->execute(array('pseudo' => $pseudo_membre));
$req3->closeCursor();
$donnees1 = $req3->fetch();
if($donnees1['statut'] != $statut){
	echo 'Connecté ...';
} else {
	echo 'Hors ligne ...';
}
}
La condition : "if($_SESSION['pseudo'] == $resultat['pseudo'])" fonctionne, resultat['pseudo'] est bien égal à la session.
L'erreur est plus bas. Je pense que j'ai oublié beaucoup de choses (notamment le timestamp)

Merci d'avance pour votre aide ;)

Re: Afficher le statut d'un membre (En ligne / Hors ligne) P

Posté : 03 avr. 2013, 09:21
par edison1986
Salut,

A quoi correspond ta variable
$statut
car elle n'est jamais incrémenté ?

essai de remplacer
if($_SESSION['pseudo'] == $resultat['pseudo']) {
$req1 = $connect->prepare('UPDATE wa_communaute SET statut = :statut WHERE pseudo = :pseudo');
$req1->execute(array('statut' => 'online','pseudo' => $pseudo));
$req1->closeCursor();
$req2 = $connect->prepare('SELECT * FROM wa_communaute WHERE statut = :statut AND pseudo = :pseudo');
$req2->execute(array('statut' => $statut,'pseudo' => $pseudo));
$req2->closeCursor();
$donnees0 = $req2->fetch();
if($donnees0['statut'] == $statut){
        echo 'Connecté ..';
} else {
        echo 'Hors ligne ..';
}
} else {
$req3 = $connect->prepare('SELECT * FROM wa_communaute WHERE pseudo = :pseudo');
$req3->execute(array('pseudo' => $pseudo_membre));
$req3->closeCursor();
$donnees1 = $req3->fetch();
if($donnees1['statut'] != $statut){
        echo 'Connecté ...';
} else {
        echo 'Hors ligne ...';
}
}
 
par
if($_SESSION['pseudo'] == $resultat['pseudo'])
   echo("moi -> ".$statut);
else
   echo("lui -> ".$statut);
et dis mois se que sa affiche.

Re: Afficher le statut d'un membre (En ligne / Hors ligne) P

Posté : 03 avr. 2013, 09:27
par nico44530
Évidemment, ça n'affiche rien puisque $statut n'est pas trouvé ou n'existe même pas.
Je viens de me rendre compte que pratiquement tout mon code ne sert à rien.

J'ai changé mon champ STATUT en booléan : 0 pour Hors ligne et 1 pour Connecté

Ensuite je ne sais pas comment faire pour la suite :(

Re: Afficher le statut d'un membre (En ligne / Hors ligne) P

Posté : 03 avr. 2013, 09:33
par edison1986
Tu peux réafficher ton code modifier stp ?

Re: Afficher le statut d'un membre (En ligne / Hors ligne) P

Posté : 03 avr. 2013, 09:44
par nico44530
<?php
if($_SESSION['pseudo'] == $result['pseudo']) {
$req1 = $connect->prepare('UPDATE wa_communaute SET statut = :statut WHERE pseudo = :pseudo');
$req1->execute(array('statut' => '1','pseudo' => $pseudo));
$req1->closeCursor();
if($result['statut'] == 1){
	echo 'Connecté ..';
} else {
	echo 'Hors ligne ..';
	echo $result['statut'];
}
} else {
	$req3 = $connect->prepare('SELECT * FROM wa_communaute WHERE statut = :statut AND pseudo = :pseudo');
	$req3->execute(array('statut' => $statut,'pseudo' => $pseudo_membre));
	$req3->closeCursor();
	$donnees1 = $req3->fetch();
	if($donnees1['statut'] == 1){
		echo 'Connecté ...';
	} else {
		echo 'Hors ligne ...';
	}
}
?>
Voilà ;) Et là ça m'affiche hors-ligne pour moi alors que je suis connecté. Le update ne fonctionne pas et veux pas passer de 0 à 1

Re: Afficher le statut d'un membre (En ligne / Hors ligne) P

Posté : 03 avr. 2013, 09:52
par edison1986
Essai comme ça
if($_SESSION['pseudo'] == $result['pseudo'])
{
	$req1 = $connect->prepare('UPDATE wa_communaute SET statut = :statut WHERE pseudo = :pseudo');
	$req1->execute(array('statut' => '1','pseudo' => $pseudo));
	$req1->closeCursor();
	
	echo('Connecté ..');
}
else
{
        $req3 = $connect->prepare('SELECT * FROM wa_communaute WHERE pseudo = :pseudo');
        $req3->execute(array('pseudo' => $pseudo_membre));
        $req3->closeCursor();
        $donnees1 = $req3->fetch();
        
        if($donnees1['statut'] == 1)
                echo('Connecté ...');
        else
                echo('Hors ligne ...');
}
Normalement ça devrait fonctionné...

Re: Afficher le statut d'un membre (En ligne / Hors ligne) P

Posté : 03 avr. 2013, 09:59
par nico44530
Merci ;)

Ca ne fonctionne pas : Ma base de donnée ne change pas, le champ "statut" reste à 0. Il est de type tinyint(1)
C'est pour ça que je vois que je suis connecté pour moi, et hors ligne sur un autre membre alors qu'il est lui aussi connecté ^^

Exemple :

Je connecte 2 membres avec id "1" et "2"
Sur le compte du membre "1", je visite le profil de l'id "2", et il n'est pas connecté.
Inversement pour le membre 2.

Re: Afficher le statut d'un membre (En ligne / Hors ligne) P

Posté : 03 avr. 2013, 10:03
par edison1986
Est ce que dans ta BDD ils ont tous les deux le champ "statut" à 1 ?

Re: Afficher le statut d'un membre (En ligne / Hors ligne) P

Posté : 03 avr. 2013, 10:05
par nico44530
Non, ils restent à 0 :?
Donc la base ne se met pas à jour

Re: Afficher le statut d'un membre (En ligne / Hors ligne) P

Posté : 03 avr. 2013, 10:08
par nico44530
J'ai trouvé l'erreur de la base qui se met pas à jour :
if($_SESSION['pseudo'] == $result['pseudo'])
{
        $req1 = $connect->prepare('UPDATE wa_communaute SET statut = :statut WHERE pseudo = :pseudo');
        $req1->execute(array('statut' => '1','pseudo' => $_SESSION['pseudo']));
        $req1->closeCursor();
        
        echo('Connecté ..');
}
else
{
        $req3 = $connect->prepare('SELECT * FROM wa_communaute WHERE pseudo = :pseudo');
        $req3->execute(array('pseudo' => $_GET['pseudo']));
        $req3->closeCursor();
        $donnees1 = $req3->fetch();
        
        if($donnees1['statut'] == 1)
                echo('Connecté ...');
        else
                echo('Hors ligne ...');
}

Re: Afficher le statut d'un membre (En ligne / Hors ligne) P

Posté : 03 avr. 2013, 10:13
par nico44530
Voici mon code résolu :

J'ai supprimé la requête en trop et ajouté ça :

if($result['statut'] == 1)

Qui est le résultat d'une requête qui va chercher le statut chez les membres à qui on visite le profil :wink:

Il y a peut-être plus simple mais si ça marche comme ça ;)
<?php
if($_SESSION['pseudo'] == $result['pseudo'])
{
	$req1 = $connect->prepare('UPDATE wa_communaute SET statut = :statut WHERE pseudo = :pseudo');
	$req1->execute(array('statut' => '1','pseudo' => $_SESSION['pseudo']));
	$req1->closeCursor();
	echo('Connecté ..');
} else {
	if($result['statut'] == 1){
		echo('Connecté ...');
	} else {
		echo('Hors ligne ...');
	}
}
?>