Fermeture navigateur

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fermeture navigateur

par zeus » 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 ;)

Résolu

par Tomsawyer » 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

par zeus » 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 ;)

ca marche

par Tomsawyer » 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"

par zeus » 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

affichage

par Tomsawyer » 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

par zeus » 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 ;)

ca avance

par Tomsawyer » 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 !!! :(

ok

par Tomsawyer » 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

par steph29 » 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 ;)

question.

par Tomsawyer » 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.

par steph29 » 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

par Tomsawyer » 23 mai 2008, 11:26

le champs enum 'online' 1=online et 0 offline

par steph29 » 23 mai 2008, 10:42

qu'entend tu par déconnexion?
Moment ou on considère que l'utilisateur n'interagit plus sur la page.
=> répérés quand statut=0
quel traitement veux tu faire lors de la déconnexion?
Mise à jour de la table user.
=> tu peux effectuer tes traitement dans la crontab apres le menage
Que fais ton script fichier-de-mise-a-jour.php?
Mise à jour de la table user et destruction de la session.
=> avant l'update de la date de derniere action, tu teste si le statut est a 0 et dans ce cas du kill la session...

qu'update tu dans ta table user?

par Tomsawyer » 23 mai 2008, 10:31

qu'entend tu par déconnexion?

Moment ou on considère que l'utilisateur n'interagit plus sur la page.


quel traitement veux tu faire lors de la déconnexion?

Mise à jour de la table user.

Que fais ton script fichier-de-mise-a-jour.php?

Mise à jour de la table user et destruction de la session.