Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
708 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Ajax // Ordre d'execution // Gros soucis

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ajax // Ordre d'execution // Gros soucis

n°1551101
Aguila_73
Posté le 29-04-2007 à 01:50:23  profilanswer
 

Salut tout le monde,
 
Bon alors voilà, je vais rentrer direct dans le vive du sujet, en vous explicitant avec des images mon problème...
 
-J'ai crée une interface ou des utilisateurs peuvent se logguer.
-A chaque page est attribué un code; ce code est associé à une action. Celà sert à voir, dans la page d'accueil du site, les actions que sont en train d'entreprendre les membres (personnes ayant un cookie sur leur bécane). (pour l'exemple, on verrait "Aguila73 est en train d'ecrire un post" ).
 
-Explication du systeme:
1) la personne se loggue
2) un cookie est transmis pour retenir l'etat "connecté"
3) selon la page ou il est, un code est envoyé à la BDD pour dire où est le membre
 
Extrait de la page d'accueil:

Code :
  1. if ($ligne_modo[5] == 0){echo "<font color='#aa0000'>Déconnecté</font>";}
  2. if ($ligne_modo[5] == 1){echo "<font color='#006600'>Connecté</font>";}
  3. if ($ligne_modo[5] == 2){echo "<font color='#000066'>Visite le blog</font>";}
  4. if ($ligne_modo[5] == 3){echo "<font color='#000066'>Gère les sous-rubriques</font>";}


 
Extrait de la BDD:
http://aguila73.free.fr/hardware/1.jpg
 
 
Bon OK, jusque là, rien de bien compliqué, on se demande même pourquoi le mot Ajax est dans le titre...
Voila le réel problème:
Quand l'utilisateur clique sur "déconnexion", le cookie se barre, et le code dans la BDD est mis à jour (déconnecté).
MAIS, il arrive souvent de s'en aller SANS cliquer sur "deconnexion"... Le cookie n'est pas trop un probleme, a la limite, je lui mets une durée de vie limitée... mais de toute maniere, chaque page effectue d'abord un test du genre:
 

Code :
  1. if (isset ($_COOKIE['id'])){
  2. require_once ("fichier_de_conn.php" );
  3. $sql = "UPDATE table SET enligne_membre='1' WHERE id_membre='".$_COOKIE['id']."'";
  4. $requete = @mysql_query ($sql);
  5. }


...donc meme si le cookie est là, mais que dans la BDD j'ai noté la personne déconnectée, elle sera reconnectée d'un point de vue base de donnée dès son arrivée sur une page (code précédent).
 
Dans le cas ou le membre quitte la fenetre sans cliquer sur "deconnexion", je ne peux afficher que son dernier statut retenu... (genre la, je quitte, et on verrait: "aguila ecrit un post", meme 10 jours apres...moyen moyen quand meme...).
 
Le principe: L'utilisateur quitte la page pour une autre, ou pour fermer la fenetre : un JS est lancé, il appelle un PHP qui remet en mode "deconnecté" dans la BDD > Si l'utilisateur quitte la fenetre, il sera bien en "deconnecté", et si il quitte la page pour une autre page du site, celle-ci renverra les informations à la BDD, car cookie toujours existant (cf code précédent).
 
Codes:
 
J'ai donc penser a faire un:

Code :
  1. <body onunload="Deconnexion('deconnexion.php')">

...sur chaque page...
 
 
Script javascript appelé:

Code :
  1. function Deconnexion (fichier){
  2. var xhr_object = null;
  3. if(window.XMLHttpRequest) { // Firefox  
  4.  xhr_object = new XMLHttpRequest();
  5.  xhr_object.overrideMimeType('text/xml');
  6. }
  7. else if(window.ActiveXObject) { // Internet Explorer  
  8.  xhr_object = new ActiveXObject("Microsoft.XMLHTTP" );
  9. }
  10. else { // XMLHttpRequest non supporté par le navigateur  
  11.  alert("Ton navigateur ne supporte pas les objets XMLHTTPRequest..." );
  12.  return;
  13. }
  14. xhr_object.open("POST", fichier, true);
  15. xhr_object.onreadystatechange = function() {
  16.  if (xhr_object.readyState == 4) {
  17.   alert(xhr_object.responseText); //Normalement, je ne traite pas la reponse, mais j'ai mis une alert pour le debug
  18.  }
  19. };
  20. xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded" );
  21. xhr_object.send(null);
  22. }


 
Fichier PHP:

Code :
  1. <?php
  2. header('Content-type: text/html; charset=iso-8859-1');
  3. if (isset ($_COOKIE['id'])){
  4. //pour le debug - statut membre avant requete
  5. require_once ("fichier_connexion.php" );
  6. $sql = "SELECT * FROM table WHERE id_membre='".$_COOKIE['id']."'";
  7. $requete = mysql_query ($sql);
  8. $resultat = mysql_fetch_row ($requete);
  9. echo $resultat[5]."\n\n\n";
  10. //actions
  11. $sql2 = "UPDATE table SET enligne_membre='0' WHERE id_membre='".$_COOKIE['id']."'";
  12. $requete2 = mysql_query ($sql2);
  13. echo $sql2."\n\n\n";
  14. //pour le debug, toujours... - statut membre après requete
  15. $sql3 = "SELECT * FROM table WHERE id_membre='".$_COOKIE['id']."'";
  16. $requete3 = mysql_query ($sql3);
  17. $resultat3 = mysql_fetch_row ($requete3);
  18. echo $resultat3[5]."\n\n\n";
  19. }
  20. ?>


 
Donc vous pouvez constater que j'ai voulu debugger...
Voici ce que j'obtiens, en images:
 
Accueil = code 1
Blog = code 2
 
Je suis sur l'accueil, je veux me rendre sur la page blog:
http://aguila73.free.fr/hardware/2.jpg
 
 
Je suis sur blog, je repasse sur accueil:
http://aguila73.free.fr/hardware/3.jpg
 
 
Trois valeurs apparaissent:
-l'etat précédent
-la requete envoyée
-l'etat suivant (toujours egal à 0=déconnecté, normal)
 
Mais regardez la première valeur : elle change!!!
Ce qui signifie qu'à priori mon script fonctionne, et que le code Ajax est exécuté APRES le chargement de la page!
Pourtant:
page1, quittée >> appel du script pour mettre le statut "déconnecté"
page2, arrivée >> injection code correspondant à la page
 
Voila, j'espere que vous avez tous compris mon problème, j'ai essayé d'être le plus compréhensible possible, et que vous allez m'éclairer un peu plus sur Ajax ou je ne sais quoi qui fais foirer mon idée... Et si vous avez d'autres idées d'ailleurs...  :D  
 
Merci d'avance, je compte sur vous! :jap:


Message édité par Aguila_73 le 29-04-2007 à 01:52:28
mood
Publicité
Posté le 29-04-2007 à 01:50:23  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Ajax // Ordre d'execution // Gros soucis

 

Sujets relatifs
AJAX - Remplir une table et afficher son contenu en direct[java] "petit" problème à l'exécution
Afficher l'execution d'un script bash sur page phpimport gros fichier SQL dans Mysql
[Résolu] Exécution de Visual Studio lors de crash des applis ?!AJAX:formulaire avec liste déroulante dynamique
[Ajax] Transport d'objet ?soucis avec ezpdf
[Debutant] soucis pour consulter source site web[Résolu]Calcul du temps d'execution en millisecondes
Plus de sujets relatifs à : Ajax // Ordre d'execution // Gros soucis


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR