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 :
if ($ligne_modo[5] == 0){echo "<font color='#aa0000'>Déconnecté</font>";}
if ($ligne_modo[5] == 1){echo "<font color='#006600'>Connecté</font>";}
if ($ligne_modo[5] == 2){echo "<font color='#000066'>Visite le blog</font>";}
if ($ligne_modo[5] == 3){echo "<font color='#000066'>Gère les sous-rubriques</font>";}
Extrait de la BDD:
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 :
if (isset ($_COOKIE['id'])){
require_once ("fichier_de_conn.php" );
$sql = "UPDATE table SET enligne_membre='1' WHERE id_membre='".$_COOKIE['id']."'";
$requete = @mysql_query ($sql);
}
...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 :
<body onunload="Deconnexion('deconnexion.php')">
...sur chaque page...
Script javascript appelé:
Code :
function Deconnexion (fichier){
var xhr_object = null;
if(window.XMLHttpRequest) { // Firefox
xhr_object = new XMLHttpRequest();
xhr_object.overrideMimeType('text/xml');
}
elseif(window.ActiveXObject) { // Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP" );
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Ton navigateur ne supporte pas les objets XMLHTTPRequest..." );
return;
}
xhr_object.open("POST", fichier, true);
xhr_object.onreadystatechange = function() {
if (xhr_object.readyState == 4) {
alert(xhr_object.responseText); //Normalement, je ne traite pas la reponse, mais j'ai mis une alert pour le debug
$sql = "SELECT * FROM table WHERE id_membre='".$_COOKIE['id']."'";
$requete = mysql_query ($sql);
$resultat = mysql_fetch_row ($requete);
echo $resultat[5]."\n\n\n";
//actions
$sql2 = "UPDATE table SET enligne_membre='0' WHERE id_membre='".$_COOKIE['id']."'";
$requete2 = mysql_query ($sql2);
echo $sql2."\n\n\n";
//pour le debug, toujours... - statut membre après requete
$sql3 = "SELECT * FROM table WHERE id_membre='".$_COOKIE['id']."'";
$requete3 = mysql_query ($sql3);
$resultat3 = mysql_fetch_row ($requete3);
echo $resultat3[5]."\n\n\n";
}
?>
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:
Je suis sur blog, je repasse sur accueil:
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...
Merci d'avance, je compte sur vous!
Message édité par Aguila_73 le 29-04-2007 à 01:52:28
Marsh Posté le 29-04-2007 à 01:50:23
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:
Extrait de la BDD:
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:
...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:
...sur chaque page...
Script javascript appelé:
Fichier PHP:
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:
Je suis sur blog, je repasse sur accueil:
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...
Merci d'avance, je compte sur vous!
Message édité par Aguila_73 le 29-04-2007 à 01:52:28