[RESOLU] Timestamp : l'UPDATE ne se fait pas !

Eléphant du PHP | 386 Messages

03 avr. 2013, 11:25

Bonjour,

J'ai réussi à créer un script pour afficher le statut du membre (En ligne - Hors ligne)
Maintenant, je voudrais faire un timestamp, et je n'arrive pas à trouver comment faire.

J'ai créé un champ : lastquerytime qui contient time();

J'ai essayé pourtant avec le code ci-dessous : (Et l'update ne se fait pas quand $lastquerytime est plus petit que $timestamp_1min)
Autrement dit quand il y a 1 min d'inactivité, je souhaiterais que le statut passe de 1 à 0 donc de "En ligne" à "Hors ligne".

A moins que ce ne soit pas la façon de faire... :?

PS : La partie après le else ne concerne pas le problème ;)
<?php
if($_SESSION['pseudo'] == $result['pseudo'])
{								
	$req1 = $connect->prepare('UPDATE wa_communaute SET statut = :statut, lastquerytime = :lastquerytime WHERE pseudo = :pseudo');
	$req1->execute(array('statut' => '1','lastquerytime' => time(),'pseudo' => $_SESSION['pseudo']));
	$req1->closeCursor();

	echo('Connecté');
										
	$timestamp_1min = time()-(60 * 1);
	$req2 = $connect->prepare('UPDATE wa_communaute SET statut = :statut WHERE lastquerytime < '.$timestamp_1min.' AND pseudo = :pseudo');
	$req2->execute(array('statut' => '0','pseudo' => $_SESSION['pseudo']));
} else {
	if($result['statut'] == 1){
		echo('Connecté');
	} else {
		echo('Hors ligne');
	}
}
?>
Merci d'avance pour votre aide ;)

Eléphant du PHP | 86 Messages

03 avr. 2013, 11:34

Tu ne peux pas détecter l'inactivité avec du PHP, car c'est un langage côté serveur.

Il n'est donc exécute que lorsque la page est rechargée, donc lorsque l'utilisateur est actif.

Pour l'inactivité tu dois utiliser du JavaScript et de l'AJAX...

Regarde du côté de jQuery: http://jquery.com/ et si tu as des incompréhensions n'hésite pas...

Eléphant du PHP | 386 Messages

03 avr. 2013, 11:46

Je ne souhaite pas de rechargement ajax. Juste un rechargement manuel
Je reformule mon message :

Quand 2 membres se connectent, 1 membre veut aller visiter un profil du 2ème membre. Ce 2ème membre est inactif pendant une minute (Pendant 1 minute, il ne recharge pas de page)
Quand le 1er membre rechargera son profil, il verra "hors ligne".

On peut faire ça sans javascript ?
C'est le même principe que les compteurs en php je crois.

Ca m'embêterais d'utiliser ajax, et surtout un setInterval, ça consomme beaucoup de requête update vers le serveur (surtout toutes les minutes)

Eléphant du PHP | 86 Messages

03 avr. 2013, 12:07

Ok je comprend mieux se que tu veu faire.
Lorsque je vais consulter le profil d'un autre utilisateur et qu'il n'a pas montré d'activité depuis plus d'une minute je le rend hors ligne...

Tu dois à ce moment là faire plutôt comme ça:
if($_SESSION['pseudo'] == $result['pseudo'])
{
    $req1 = $connect->prepare('UPDATE wa_communaute SET statut = :statut, lastquerytime = :lastquerytime WHERE pseudo = :pseudo');
    $req1->execute(array('statut' => '1','lastquerytime' => time(),'pseudo' => $_SESSION['pseudo']));
    $req1->closeCursor();

    echo('Connecté');
}
else
{
    $timestamp_1min = time() - 60;
	
    /*RECHERCHE DES UTILISATEURS AVEC CE PSEUDO ET ETANT INACTIF DEPUIS PLUS D'UNE MINUTE*/
    
    if(/*AUCUN RESULTAT TROUVE*/)
        echo('Connecté');
    else
    {
        /* ON UPDATE L'UTILISATEUR POUR LE METTRE INACTIF*/
        echo('Hors ligne');
    }
}
Tu remplace les commentaires par du code valide biensur...