Fermeture navigateur

Eléphant du PHP | 175 Messages

23 mai 2008, 11:34

tu as donc ta reponse...
reprend les explications, remplace statut par online et id_session par ton identifiant utilisateur et ta_table par ta table utilisateur

Eléphanteau du PHP | 20 Messages

23 mai 2008, 13:53

Je pense que je commence a comprendre ... steph ( je sais c pas trop tot :idea: :oops: )

En faite je ne dois à aucun moment faire un traitement javascript coté client.
Il n'y a pas de timer qui compte le temps d'inactivité...
c'est la Requete seule qui va se charger d'actualiser la table.
question: je doit créer une nouvelle table pour loger id de session et la date de la derniere action ou je peux la mettre dans ma table user?

et ossi ... est-ce que ma requete plusieur champs de ma table a jour ( si plusieur membres sont en inactivité?)

merci encore pour ton aide.

Eléphant du PHP | 175 Messages

23 mai 2008, 14:07

en effet on utlise pas de JS, la tu gere entierement coté serveur.

comme je l'ai dis plus haut tu peux tout faire dans ta table utilisateur et en effet la requete de menage va mettre en "offline" tout les membre dont la derniere action est superieure a x secondes.

essaie de mettre en apllication, teste et si tu as des problemes revient avec ton code ;)

Eléphanteau du PHP | 20 Messages

23 mai 2008, 14:30

OK .
la première requete inscrit bie la derniere action dans mon champs last_action (ex:'1211617744')
par contre la derniere req refuse de mettre a jour le le champs etat:

$heure_max = date("U") - 100; //en secondes

$req= "UPDATE user SET etat = '2' WHERE 'last_action' < '$heure_max'";
$sql=mysql_query ($req);

(j'ai bien pris soin de commenter le premiere req pour faire des test mais rien à faire)

je pense que l'erreur provient de l'attribut de mon champ 'etat' pour l'instant c'est de l' int

En quoi dois-je le convertir pour que ma requete soit bien exécutée.
merci steph

Eléphanteau du PHP | 20 Messages

24 mai 2008, 14:51

IOI ca marche a moité cette fois ci. :(

en faire les deux requêtes se s'exécutent.
la première c'est normal mais on dirait que la deuxième ne tient pas compte de la valeur $heuremax;
les echo des deux req s'affichent bien et les valeur sont correctes
(avec -100 secondes pour $heuremax)

mais la deuxième s'exécute même si l'activité est inférieur à la valeur donnée (100 secondes par exmple) et met en statut déconnectés tous les membres.
si je supprime le deuxieme req la première marche nickel.
mais ca ne sert plus a rien..

Question: pourquoi ma deuxieme req fait une mise jour malgrés la contion $heuremax?
mistere...


if(isset($_SESSION['id'])){


$requete ="UPDATE user SET last_action ='".date("U")."', etat ='1'  WHERE id_user='".$_SESSION['id']."'";
$sql=mysql_query ($requete);



}

$heuremax = date("U") - 100 ; //en secondes 



$req= "UPDATE user SET etat = '2' WHERE 'last_action'< '$heuremax'";
$sql2=mysql_query ($req);

some help !!! :(

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

24 mai 2008, 15:50

Est-ce que tu peux nous afficher un exemple de la seconde requête, telle qu'elle est générée, et non pas avec les variables à l'intérieur ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 20 Messages

24 mai 2008, 16:42

biensur voici l'affichage:

1211639774 pour --->
echo Date('U');
1211639674 pour --->
echo  $heuremax = Date('U') - 100;
[/i]

UPDATE user SET etat = '2' WHERE 'last_action'< 1211639674 et pour--->(2eme req)

voila

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

24 mai 2008, 16:54

Je viens de penser à un truc ...
tu écris 'last_action' avec des quotes ('). Pour Mysql, cela signifie que c'est une valeur que tu donnes.

Du coup, il est possible que la chaine 'last_action' soit inférieur à un entier, et, du coup, que cette condition soit toujours vrais, ce qui expliquerais que tous les enregistrements soient modifiés ;)

Essaye d'enlever les ' autour du champ
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 20 Messages

24 mai 2008, 17:02

ça a l'air de fonctionner...

Passer autant de temps pour corriger si peu IOI " c'est la meilleur part de la connaissance" :lol:

merci . je refais des tests et je marque "résolu"

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

24 mai 2008, 17:32

Je crois que tout les développeurs font la même erreur : on passe trop vite sur les choses simples pour chercher des causes compliquée ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 20 Messages

24 mai 2008, 21:01

C'est bon ça marche!

Tu avais raison ce sont les quottes ' qui foutaient la pagaille.

merci encore.

merci également à steph29
d'ailleurs je préfère cette option du traitement dans une table avec php plutôt que détecter la fermeture du navigateur qui été très compliqué à mettre en place( voir impossible).



Pour ceux qui souhaite plus d'infos je suis dispo.

Tomsawyer

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

24 mai 2008, 21:53

Pour avoir plusieurs fois dû tester ça, je peux te dire que c'est la seule solution viable conseillée ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer