sitti Posté 20 Avril 2007 Posté 20 Avril 2007 bonjour à tous ! j'ai un problème énorme et j'ai besoin d'aide. je vous explique: j'ai une application php où beaucoup d'utilisateurs ont accès je veux developper un script en php qui permet de calculer le temps de travail de chacun , autrement le temps que chacun reste connecté parce qu'il sont tous dotés d'ordinateur et l'application fonctionne en intranet. j'ai imaginé ceci: un compteur ou un chronometre se lance quand un utilisateur est connecté et commence à compter jusqu'à ce que cet utilisateur se deconnecte. pouriez vous m'aider à demarrer? je vous remercie d'avance.
Dan Posté 20 Avril 2007 Posté 20 Avril 2007 Bonjour et bienvenue sur le HUb ! C'est simple à faire en php Il faut que tu repères l'endroit dans tes sources où tes utilisateurs se connectent, et que tu y appelles la fonction time(). Par exemple comme ceci: $debut=time(); Ensuite tu stockes cette variable dans une session... Et au moment où l'utilisateur se déconnecte, tu appelles la fonction time() à nouveau comme ceci: $fin = time(); Le temps de connexion sera égal à $fin - $_SESSION['debut'] (en secondes). Si tu utilises des sessions, il faudra que toutes tes pages comportent l'instruction session_start(); tout au début (avant tout écho d'un caractère, quel qu'il soit, vers le navigateur). La date et l'heure du début de connexion seront dans ce cas accessibles sur toutes les pages à travers la variable $_SESSION['debut']
occitech Posté 25 Avril 2007 Posté 25 Avril 2007 Bonjour, Ceci est une bonne solution, la seule limite est que si l'utilisateur ferme son navigateur sans cliquer sur le bouton "déconnecter", tu ne pourras pas lancer le script de déconnexion. Il te faut donc éduquer tes utilisateurs.....pas gagné !
sitti Posté 27 Avril 2007 Auteur Posté 27 Avril 2007 bonjour à tous je vous remercie beaucoup et je vous suis trés reconnaissante. en fait j'ai télechargé des cours en particulier sur les fonctions qui concernent le temps, durée.... je vois bien ce que vous me proposer et je vous remercie tous mais je gallère trop, sur la façon de stockage . en gros, je ne vois pas comment je vais stocker ce temps qui sera appelé lors de la connexion et comment je vais récuperer la durée(tpsfin-tpsdebut) en fin de connexion(lors de la deconnexion). pouriez vous continuer à m'aider làdessus. je vous remercie de nouveau.
georges Posté 27 Avril 2007 Posté 27 Avril 2007 salut, les sessions permettent justement le stockage temporaire (ie, pendant le temps d'une session) des informations
captain_torche Posté 27 Avril 2007 Posté 27 Avril 2007 Pour faire ce que tu cherches, je pense que tu devras utiliser AJAX. Un évènement en "onload" lance un timer en javascript, et un autre en "onunload" récupère cette valeur, et la stocke (en base, par exemple). Par contre, pour que ça fonctionne, il faut qu'aucun de tes employés ne pense à désactiver le JavaScript ...
sitti Posté 28 Avril 2007 Auteur Posté 28 Avril 2007 bonjour à tous je tiens toujours à vous remercier. si les sessions permettent le stockage temporaires, comment, en fait avec kelfonction il faut le faire? merci, de votre aide. bonjour en particulier pour M. captain_torche merci beaucoup mais je ne connais rien en ajax merci
Dadou Posté 28 Avril 2007 Posté 28 Avril 2007 C'est bien de vouloir se mettre au php, mais il y a quand même un minimum a savoir ne serait ce qu'en recherche d'informations, une simple recherche sous google avec comme expression PHP + session te permet de trouver grand nombre de sites qui t'explique comment faire, comme par exemple ce dernier : http://www.phpdebutant.org/article69.php
sitti Posté 29 Avril 2007 Auteur Posté 29 Avril 2007 bonjour à tous! je vous remercie de votre aide et je vous suis trés reconnaissant M. Dadou. je débute dans php, voire memece que je veux est madeuxième application en php. en fait j'ai developpé une application en php qui gère les entré-sortie des livres dans une bibliàthèque. mais aujourdhui c'est la première fois que je veux travailler avec des sessions. c'est surtout pour cela que je galère.
Nanane Posté 4 Mai 2007 Posté 4 Mai 2007 (modifié) De mon coté rien ne vaut le bon http://www.w3schools.com/php/php_sessions.asp Modifié 4 Mai 2007 par Nanane
sitti Posté 7 Mai 2007 Auteur Posté 7 Mai 2007 bonjour je vous rappelle mon but: je veux calculer le temps passé entre la connexion et la deconnexion d'un utilissteur. j'utilise php4, windows, firefox. on m'avait conseillé ceci: reperer l'endroit de connexion et appeler la fonction time et puis stocker la valeur dans une session: $debut=time(); $_SESSION['debut'] = time(); appeler à nouveau la fonction time au moment où l'utilisateur se deconnecte. $fin = time(); etaprés mon temps je l'aurai de cette façon: $duree = $fin-$_SESSION['debut']; mais on sait bien que lorsque l'utilisateur se deconnecte là, la session est detruite , comment pourai-je faire ? quelcun peut me dire quelque chose làdessus car j'avais essayé ça ne marche et je me suis rendue compte de cela.
georges Posté 7 Mai 2007 Posté 7 Mai 2007 bonjour, Principes fondamentaux pour que ça marche : 1/ arrivée de l'internaute - connexion de l'internaute via un formulaire (obligatoire) - début session - stockage temporaire dans session 2/ .... 3/ déconnexion de l'internaute via un formulaire (obligatoire) - recup de l'heure - stockage définitif dans BDD voilà...
sitti Posté 8 Mai 2007 Auteur Posté 8 Mai 2007 bonjourje vous rappelle mon but: je veux calculer le temps passé entre la connexion et la deconnexion d'un utilissteur. j'utilise php4, windows, firefox. on m'avait conseillé ceci: reperer l'endroit de connexion et appeler la fonction time et puis stocker la valeur dans une session: $debut=time(); $_SESSION['debut'] = time(); appeler à nouveau la fonction time au moment où l'utilisateur se deconnecte. $fin = time(); etaprés mon temps je l'aurai de cette façon: $duree = $fin-$_SESSION['debut']; mais on sait bien que lorsque l'utilisateur se deconnecte là, la session est detruite , comment pourai-je faire ? quelcun peut me dire quelque chose làdessus car j'avais essayé ça ne marche et je me suis rendue compte de cela. -------------------- merci mais là je pense que je suis vraiment perdue car pour le debut desession ça marche : via un formulaire l'internaute entre son nom d'utilisateur et son mot de passe pour se connecter. mais lors de la deconnexion, juste il clique sur un bouton deconnexion. !!!!!!!!!!!!!!!!!!!!!!!!!!!!! d'autre part, ça se fait comment les stockage definitifs, car mois je connais $_session['variable']...... pour stocker et j'ai cherché sur le net la fonction ou la minère dont on doit proceder pour stocker definitivement dans bd je ne trouve pas. avez vous une idée???????
Nanane Posté 9 Mai 2007 Posté 9 Mai 2007 (modifié) euh, c'est un peu confus pour moi ton premier probleme lors de la deco n'en est pas un... au moment ou l'utilisateur utilise le bouton de deconnexion, la page sur laquelle il arrive doit contenir le code pour recuperer la variable de session, et faire la difference entre le time() courant et celle ci. En aucun cas la variable de session ne disparait... c'est fait pour Sinon pour stocker dans des bases de donnees, en PHP le mieux reste les BD Mysql, la encore je te renvoie sur le site de w3schools. Mais il faut savoir que les acces BD prennent vite beaucoup de temps et rallongent le chargement des pages... Apres c'est un choix on peut toujours stocker en dur dans des fichiers textes bruts, (la encore w3schools est ton ami ) Modifié 9 Mai 2007 par Nanane
YannCo Posté 9 Mai 2007 Posté 9 Mai 2007 Salut, Bon, ma première idée serait d'utiliser une BD avec une table membre et un champ qui cumule le temps qu'il était connecté et une table session avec une id_session, login, time A la connexion, un script rempli la table session A chaque chargement de page, un script met à jour le cumul du membre et la table session si il est connecté (si c'est lui qui éffectue ce changement de page) et un script qui fait qu'a chaque chargement d'une page il vérifie que toutes les sessions sont toujours valables (que la personne est toujours connecté au bout d'un temps définis) sinon mise à jour de son temps total de connexion et suppression de la session dans la table session ! Ainsi, même si un utilisateur se conncete, si il ne navigue pas son cumul n'augmente pas ! C'est un peu le principe qu'utilise les forums pour connaitre les membres en ligne ! Tu peux utiliser ça avec les SESSIONS ou COOKIES ou encore par l'url ...
sitti Posté 10 Mai 2007 Auteur Posté 10 Mai 2007 merci beau, bonnes idées mais pour toi, YannCo, ton idée est trés mais pas trés pratique pour mon application qui existe déjà, je l'ai dejà essayé et ça colle pas. pour toi Nanane, ça a l'air d'y aller ton idée , je me lance pour voir mais j'ai constaté une chose : ce que les utilisateurs se loguent dans une page appelée ''' php_conges ''' dont l'url: http://localhost/php_conges/ , c'est où on arrive tu fais easyphp/weblocal/php_conges et quand un utilisateur a cliqué sur deconnexion, il entre dans cette même page , alors là je vais finir par mettre le code qui recupère l'heure de connexion et celle de deconnexion dans la même page. tu imagine un peu ce qui passera!! d'autre part, j'utilise mysql comme base de donnée. merci de ton aide, j'aurai aimé à ce que tu continue car gràce à toi j'ai l'impression que ça ira.
Nanane Posté 10 Mai 2007 Posté 10 Mai 2007 (modifié) Ouai j'ai une grande capacité a faire croire qu'un projet avance c'est la fac qui m'a appris ca... Et compte sur moi pour continuer ca ne me derange aucunement de passer mon temps libre a faire des applis PHP inutiles... Donc si ca peut servir a quelqu'un. bref... Pour ton souci d'avoir tout le code dans la meme page... Je crois que tu pensais que le script allait calculer l'heure de connexion et de deconnexion en meme temps... Mais il suffit de mettre un if et de tester quel formulaire a été rempli. ca donnerai un truc du style : <?...if( $_POST["connexion"] ){creation de variable session = time()}elseif($_POST["deconnexion"]){$decotime = time();$cotime = variable de session;$elapsed = $decotime - $cotime;echo "vous avez passé ".$elapsed." secondes sur le site"}...?> Les noms des variables "connexion" et "deconnexion" correspondent au nom du bouton de soumission du formulaire correspondant. Pour le formulaire de connexion tu devra avoir dans cette exemple <form method="post">...<input type="submit" name="connexion" value="Login"></form> et pour celui de deco : <form method="post">...<input type="submit" name="deconnexion" value="Logout"></form> J'espere avoir bien compris la question sinon j'ai repondu dans le vent ... PS: C'est bien de vouloir se mettre au php, mais il y a quand même un minimum a savoir ne serait ce qu'en recherche d'informations, une simple recherche sous google avec comme expression PHP + session te permet de trouver grand nombre de sites qui t'explique comment faire, comme par exemple ce dernier : http://www.phpdebutant.org/article69.php +1. mais -1 en meme temps... Ce forum a principalement pour but le partage des connaissances (je pense) Modifié 10 Mai 2007 par Nanane
sitti Posté 11 Mai 2007 Auteur Posté 11 Mai 2007 bonjour à tous vous etes si courageux! tu pourais etre un peu claire car moi avec le javascript ça colle pas mais je regarde descours, sur le net et surtout je meurs de la fatigue morale je regrette d'exister. ça fait un mois de plus que je cherche et que je ne trouve pas pour ce problème. comme vous lesavez avant de faire quoi que ce soit je doit stocket aprés qu'un utilisateur s'est connecté, son nom d'utilisateur(u_login), la date du jour(datejour), son heure de connexion(cotime), son heure de deconnexion(decotime) dans la table conges_users_log(id_log, u_login, dtaejour, cotime, decotime, elapsed(elapsed=decotime-cotime)). j'ai fait ce code , j'arrive maintenant à me connectr , il y'a pas des erreurs, mais le code ne stocke rien dans la table conges_users_log. ce code je l'ai inseré dansla page de session comme, suit: ------------------------------------------------------------- voilà le code de ma page de session et ce qui est entouré par //-----------sitti //------------sitti , c'est mon code. <?php//// MAIN///*** initialisation des variables ***/$session_username="";$session_password="";/************************************///// recup du num de session (mais on ne sais pas s'il est passé en GET ou POST$session=(isset($_GET['session']) ? $_GET['session'] : ((isset($_POST['session'])) ? $_POST['session'] : "") ) ;/*******************sitti******************************************/$DEBUG=FALSE;//$DEBUG=TRUE;if($DEBUG==TRUE) { print_r($_SESSION); echo "<br><br>\n"; }if ($session != ""){ if(session_is_valid($session) == TRUE) { session_update($session); //--------------------------------sitti if($session=(isset($_GET['session']) ? $_GET['session'] : ((isset($_POST['session'])) ? $_POST['session'] : ""))) { //connexion mysql $db = mysql_connect('localhost', 'dbconges','motdepasse') or die('Erreur de connexion '.mysql_error()); //selection de la base mysql_select_db('db_conges', $db) or die('Erreur deselection '.mysql_error()); //code $cotime = time(); $u_login = "session_username"; $_SESSION['cotime']="cotime"; $_SESSION['u_login']="u_login"; $datejour = date("Y-m-d"); $sql = "INSERT INTO conges_users_log(u_login,datejour,cotime)"; //$sql .= $sql .="VALUES('$u_login','$cotime','$datejour')"; } //---------------------------------------- sitti } else { session_delete($session); $session=""; $session_username=""; $session_password=""; $_SESSION['config']=init_config_tab(); // on recrée le tableau de config pour l'url du lien echo "<center>\n"; echo "Pas de session ouverte<br>\n"; echo "Veuillez <a href='".$_SESSION['config']['URL_ACCUEIL_CONGES']."/index.php' target='_top'> vous authentifier</a>\n"; echo "</center>\n"; exit; }}else // $session == ""{ if(isset($_POST['session_username'])) { $session_username=$_POST['session_username']; } if(isset($_POST['session_password'])) { $session_password=$_POST['session_password']; } if ( ($_SESSION['config']['how_to_connect_user'] == "CAS") && ($session_username != "admin") ) { $usernameCAS = authentification_passwd_conges_CAS(); if($usernameCAS != "") { if(session_id()!="") session_destroy(); // on initialise la nouvelle session session_create($usernameCAS); } else //dans ce cas l'utilisateur n'a pas encore été enregistré dans la base de données db_conges { echo "<center>\n"; echo "Il n'existe pas de compte correspondant à votre login dans la base de données de PHP_CONGES<br>\n"; echo "Contactez l'administrateur de php_conges"; echo "</center>\n"; } } else { if (($session_username == "") || ($session_password == "")) // si login et passwd non saisis { // SAISIE LOGIN / PASSWORD : session_saisie_user_password("", "", ""); // appel du formulaire d'intentification (login/password) exit; } else { // AUTHENTIFICATION : // le user doit etre authentifié dans la table conges (login + passwd) ou dans le ldap. // si on a trouve personne qui correspond au couple user/password if ( ($_SESSION['config']['how_to_connect_user'] == "ldap") && ($session_username != "admin") ) { if(session_id()!="") session_destroy(); if (authentification_ldap_conges($session_username,$session_password) != $session_username) { $session=""; $session_username=""; $session_password=""; $erreur="login_passwd_incorrect"; session_saisie_user_password($erreur, $session_username, $session_password); // appel du formulaire d'intentification (login/password) exit; } if ((authentification_ldap_conges($session_username,$session_password) == $session_username) && ($session_username != "")) { if (valid_ldap_user($session_username)==TRUE) // LDAP ok, on vérifie ici que le compte existe dans la base de données des congés. { // on initialise la nouvelle session session_create($session_username); } else//dans ce cas l'utilisateur n'a pas encore été enregistré dans la base de données db_conges { $erreur="login_non_connu"; session_saisie_user_password($erreur, $session_username,$session_password); // appel du formulaire d'intentification (login/password) exit; } } } // fin du if test avec ldap elseif ($_SESSION['config']['how_to_connect_user'] == "dbconges") { if(session_id()!="") session_destroy(); if (autentification_passwd_conges($session_username,$session_password) != $session_username) { $session=""; $session_username=""; $session_password=""; $erreur="login_passwd_incorrect"; session_saisie_user_password($erreur, $session_username,$session_password); // appel du formulaire d'intentification (login/password) exit; } if ((autentification_passwd_conges($session_username,$session_password) == $session_username) && ($session_username != "")) { // on initialise la nouvelle session session_create($session_username); } } } }}?> ayez vous unesur l'emplacement , car aucune erreur ne s'affiche je suppose que peut c pas là où je dois placer lecode. merci de votre aide. Edit captain_torche : merci d'utiliser la balise CODEBOX pour présenter les codes longs
Nanane Posté 11 Mai 2007 Posté 11 Mai 2007 (modifié) $sql = "INSERT INTO conges_users_log(u_login,datejour,cotime)";//$sql .= $sql .="VALUES('$u_login','$cotime','$datejour')"; il n'y a pas de ; a la fin de ta requete SQL (des fois ca joue) Et je crois qu'il manque un espace dans ta requete, au moment ou tu fais le .= tu as la parenthèse fermante qui se colle a VALUES, ca aussi ca peut jouer... Mais surtout je crois qu'il te manque une ligne mysql_query($sql); Elle sert a exécuter la requete Tu m'etonnes que ta base n'enregistre rien héhé Place la une fois que ton $sql est complet. et n'oublie pas de recuperer le resultat dans une variable pour pouvoir verifier que la requete s'est bien effectuée. A plus sous l'bus PS : Pour eviter de dire des betises... j'ai repris une requete d'insertion toute bete d'un de mes vieux scripts : $query = "INSERT INTO `LocationInternet` ( `id` , `nom` , `heure` , `minute` ) VALUES ( 'W', 'X', 'Y', 'Z');"; ATTENTION : entre INTO ET VALUES c'est des apostrophes inversés (backtick) : ` et apres VALUES c'est des apostrophes : ' je sais pas si ca peut changer quelquechose ca... Et maintenant que j'y pense, ce script a servi a calculer les temps d'utilisation des postes d'un cyber café sensiblement le meme sujet que toi lol Modifié 11 Mai 2007 par Nanane
sitti Posté 21 Mai 2007 Auteur Posté 21 Mai 2007 bonjour à tous! mon pb est résolu, je me felicite et vous remercie tous.
Nanane Posté 21 Mai 2007 Posté 21 Mai 2007 Ben je vais me feliciter aussi alors une fois n'est pas coutume... Content en tout cas d'avoir peut etre servi. Si tu as d'autres problemes n'hesites pas
sitti Posté 1 Juin 2007 Auteur Posté 1 Juin 2007 mmh, pas de nouvelles, bonne nouvelle? -------------------- bj t'es bien en fin ça marche mais j'obtiens le temps en seconde et j'aurais aimé le trouver en min. t'as une idée?
sitti Posté 1 Juin 2007 Auteur Posté 1 Juin 2007 Ben je vais me feliciter aussi alors une fois n'est pas coutume... Content en tout cas d'avoir peut etre servi. Si tu as d'autres problemes n'hesites pas pas du tout , moi je dirais oui et je reconnais vos aides!!!
Nanane Posté 4 Juin 2007 Posté 4 Juin 2007 en fin ça marche mais j'obtiens le temps en seconde et j'aurais aimé le trouver en min.t'as une idée? diviser par 60 pour avoir les minutes, et encore par 60 si tu veux des heures. Exemple : 35624s 35624 / 60 / 60 = 9.895555555555 heures Ca te fait donc 9h et des poussieres pour connaitre les poussieres tu ne gardes que la partie décimale (il existe une fonction pour ca, je ne sais plus laquelle) et tu la multiplies par 60. donc ici tu as 9h d'un coté et 0.8955555555 poussieres 0.895555555 x 60 = 53.733333333333 minutes donc 9h 53 minutes et encore des poussières... une fois de plus tu gardes la partie décimale et tu multiplies par 60. 0.733333333 x 60 = 44 secondes donc !!! 35624 secondes seraient équivalentes a 9heures 53minutes et 44secondes? CQFD Mais tu commencerais presque a me faire douter de tes capacités de raisonnement mathématique une conversion secondes -> minutes -> heures... c'est pas la fin du monde
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant