Savoir qui est connecter dans une BDD

Savoir qui est connecter dans une BDD - PHP - Programmation

Marsh Posté le 12-01-2009 à 11:26:11    

bonjours,
 
j'aurai voulu savoir si quelqu'un connaisse un moyen de savoir qui est connecter a la base de donnée.
je suis en train de faire un site et j'aimerai savoir qui est connecter avec son login a la base de donnée, pour l'instant j'ai essayer en mettant un flag ( sous phpmyadmin ) :
 

Code :
  1. $IdMedecin = (int) base64_decode($_COOKIE["IdMedecin"]);
  2.   $req = "select * from medecins where IdMedecin = $IdMedecin";
  3.   $rs_meds = ExecRequete($req, $connexion);
  4.   $habil_med = ObjetSuivant($rs_meds);
  5.   $online = (string) $_REQUEST["FlagConnect"];
  6.   $req3 = "select FlagConnect from medecins where IdMedecin = $IdMedecin";
  7.   $res3=ExecRequete($req3, $connexion);
  8.   $online = ObjetSuivant ($res3);
  9.  if ($IdMedecin>0)
  10.  {
  11.   $online = "O";
  12.  }


 
donc si il est connecter je mes un "O" sinon c'est N le problème c'est que si les personne quitte mal le site sans cliqué sur déconnecter cela ne fonctionne pas !  
j'aurai voulu savoir si vous pourriez m'aidez car la sa fais une semaine que je galère la dessus.
 
merci d'avance.

Reply

Marsh Posté le 12-01-2009 à 11:26:11   

Reply

Marsh Posté le 12-01-2009 à 13:18:37    

stockes aussi la date et l'heure de dernière connexion (requête dans la BD) de chaque personne. Au bout d'un timeout, si y'a pas eu de nouvelle connexion pour l'utilisateur, c'est qu'il est parti, alors tu remets le flac à N. Sous Linux, tu peux utiliser le cron pour lancer le script qui sera chargé de monitorer le timeout des connexions...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 12-01-2009 à 13:28:52    

merci de ta réponse ,
donc , oui je viens de voir que l'heure va pouvoir m'aidai a gérer sa, le problème est que je n'arrive pas trop a utilisé les Iframe donc voila ce que j'ai fais si vous pouvez me dire ce qui cloche :
 
tout d'abord dans le body:

Code :
  1. <body onload="reloadFrame('test', 2000)"


 
ensuite la fonction:
 

Code :
  1. <script>
  2. function reloadFrame(test, 20)
  3. {
  4. setInterval(function(){window.frames[test].location.reload();}, 20);
  5. }
  6. </script>


 
et enfin l'iframe:

Code :
  1. <iframe name="test" SRC="http://localhost/Sami/test.php" scrolling="no" height="2" width="2" FRAMEBORDER="no">
  2.   </iframe>


et dans la page ou ce situe l'iframe j'ai mis :
 

Code :
  1. <?php
  2.   $req = "update medecins set DernierAcces=NOW() where IdMedecin = " . $medecin->IdMedecin;
  3.   ExecRequete($req, $connexion);
  4.    ?>


( il récupère l'Id du médecin un peut plus haut).
 
voila, merci d'avance.

Reply

Marsh Posté le 12-01-2009 à 16:28:49    

j'ai essayer avec la commande  
<meta http-equiv=refresh content=20;url="test.php">
 
mais le problème est qu'il me rafraichi toute ma page ce que je ne veut surtout pas car ceux qui utiliseront ce site doivent toujours y rester.( sur la page ou il son ) donc faut que cette action soit invisible ^^

Reply

Marsh Posté le 13-01-2009 à 13:25:06    

t'as entendu parler d'AJAX (pas le produit ménager)? Parce que là, c'est un cas d'utilisation typique et approprié. Regardes du côté des lib javascript Prototype et script.aculo.us. Comme ça, t'auras pas besoin de ses affreuses iframe!


Message édité par rufo le 13-01-2009 à 13:25:34

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 13-01-2009 à 13:30:41    

Si ce que tu veux savoir c'est vraiment : Qui est connecté à la base de donnée, tu peux utiliser la query : SHOW PROCESSLIST , qui te donne les process et la personne qui les a lancés. Par contre ça ne marche pas si tu utilises un script qui connecte tout le monde avec le même username/password à mysql (ce que je crois que tu fais justement)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 13-01-2009 à 15:15:31    

"SHOW PROCESSLIST" n'est pas de toute manière une solution quand on accède à la base de donné à travers un site web même si chaque utilisateur avait son propre compte dans la bdd : les connections ne durent pas assez longtemps (fermeture dès la fin de la création de la page) ou durent vraiment trop longtemps (une heure avec mysql et php il me semble pour les connections dites persistantes)
 
shigi > En fait, le plus simple c'est simplement de faire ce qui t'as été suggéré plus haut : noter la date heure à la seconde près de la dernière demande d'une page par chacun et considérer que s'il n'en a pas demandé d'autre après X minutes, il n'est plus là.
Ensuite tu peux rendre le système plus fin en faisant des appels en ajax et en considérant que c'est un appel toutes les X secondes et que donc si le dernier appel ajax date de 3X secondes (pour éviter de déconnecter trop vite quelqu'un qui a juste fait ramer son navigateur en allant sur un autre site) , c'est qu'il n'est plus là. Cette modification doit être faite en gardant le fonctionnement initial pour éviter de perdre, dans le décompte, ceux qui n'ont pas javascript d'activé (obligé de garder une donné qui dit si la date/heure correspond à une demande de page ou juste à un BIP, en ajax, de présence).
 
 
A noter que dans tous les cas, ça n'est pas par ce que le navigateur continue de rafraichir le lien ajax que la personne est encore devant son ordi ou n'est pas entrain de regarder une autre fenêtre. ;)

Reply

Marsh Posté le 14-01-2009 à 10:40:42    

Bonjours,
 
désoler si cela n'était pas assez précis, donc en faite le but de mon projet la gestion des malade par des médecin.
l'une des fonction du site doit être de voir les centre qui sont connecter au site en ce moment donc pour cela j'ai créer un Flag, que je mes a "O" lors qu'il appui sur la touche "ce connecter".
Maintenant je recherche la possibilité de mettre ce Flag a "N" d'après ce que j'ai vu il n'y a aucune fonction qui indique si un utilisateur et connecter a la base de donnée a par ce moyen la.
donc j'ai pu lire qu'il étais "simple" de comparé 2 heures donc j'ai mis dans ma base de donné un champ "datetime" et dans mon code php un update now() avec un refresh toute les x minute ( pas encors determiner ) et une cariable dans mon code php qui reprend la valeur time() ( que je convertit ensuite en "$result=date('Y-m-d H:i:s')" et donc si le refresh de la page ne ce fait plus la date et ou l'heure sera inferieur a celle que j'ai mis dans ma variable et donc le flag passe a "N".
donc ma question est :
-soit est il possible de de passer la date enregistrer dans ma base en timstamp pour la comparer plus facilement avec ma variable sui est directement sous cette forme?
-ou si je doit les comparer sous la forme (Y-m-d H:i:s) mais cela ne marche pas avec un simple "if($result>$rec){"
ou si vous avez d'autre solution je sui preneur.
pour mon code a mettre je ne vois pas quoi mettre d'autre car c'est une nouvelle fonction du site.
 
Code d'affichage de mes connection ou deconnection :

Code :
  1. <?php
  2.                    
  3.                    
  4.                                     //Affichage qui est connecter partie connecté
  5.                                    $req2 = "select * from federations where FlagConnect='O'";
  6.                                   $rs_medecins2 = ExecRequete($req2, $connexion);
  7.                                
  8.                                
  9.                                  while ($medecin2 = ObjetSuivant($rs_medecins2)) {
  10.                                       if ($medecin2->IdFederation>0) {
  11.                     ?>
  12.                                   <tr>
  13.                               <td><img align="right" src="images/ic_online.gif" ></td>
  14.                               <td> <?php echo lib_html(strtolower($medecin2->Nom)); ?> </td>
  15.                                 </tr>
  16.                                   <?php
  17.                                     } // ne pas afficher le compte Fcmicro
  18.                                    
  19.                                   } // fin boucle des comptes médecins ?>
  20.                    
  21.                    
  22.                    
  23.                    
  24.                    
  25.                       <?php
  26.                                 //Affichage qui est connecter partie non connecté   
  27.                                   $req = "select * from federations where FlagConnect='N'";
  28.                                   $rs_medecins = ExecRequete($req, $connexion);
  29.                                
  30.                                  while ($medecin = ObjetSuivant($rs_medecins)) {
  31.                                       if ($medecin->IdFederation>0) {
  32.                                       ?>
  33.                                   <tr>
  34.                               <td><img align="right" src="images/offline.gif" ></td>
  35.                               <td> <?php echo lib_html(strtolower($medecin->Nom));?> </td>
  36.                                 </tr>
  37.                                   <?php
  38.                                     }
  39.                                    
  40.                                   }
  41.                                   ?>


 
et mon brouillon:

Code :
  1. <?php
  2.      
  3.             if ($IdMedecin==0)
  4.             {
  5.          
  6.             }
  7.             else{
  8.             $req = "select DernierAcces from medecins where IdMedecin= $IdMedecin";
  9.             $res = ExecRequete($req, $connexion);
  10.             $deco = ObjetSuivant ($res);
  11.             $rec=$deco->DernierAcces;
  12.          
  13.             echo $rec;
  14.             $timestamp = time();
  15.             $result=date('Y-m-d H:i:s');
  16.             if($result>$rec){
  17.          
  18.         $req = "update federations set FlagConnect='N' where IdFederation = $recup";
  19.         $res=ExecRequete($req, $connexion);
  20.         $flagco = ObjetSuivant ($res);
  21.         }
  22.          
  23.             }
  24.             ?>


j'ai aussi trouver ce script que je n'est pas reussi a utiliser avec mes propre variable:
 

Code :
  1. <script>
  2.     function date_diff (date_recent, date_old) {
  3.    return date_to_timestamp(date_recent) - date_to_timestamp(date_old);
  4. }
  5. </script>


 
en ce qui concerne Ajax je ne connais pas du tout :s  
 
je vous remercie d'avance
 
Cordialement :)
 

Reply

Marsh Posté le 14-01-2009 à 17:16:35    

Avec Ajax (javascript donc), en gros, toutes les x secondes, la page web affichée dans le navigateur web va envoyer au serveur une info comme quoi la personne est toujours en train de consulter le site. Lorsque la personne quitte l'appli web, le serveur ne reçoit donc plus l'info envoyée périodiquement. Il en déduit donc que la personne a quitté le site et met à jour le flag dans le BD...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 15-01-2009 à 10:13:56    

ok je regarde sa ;) merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed