par
nambawan » 18 juil. 2006, 09:54
C'est bizarre car moi c'est plus souvent IE qui me pose pb dans ce genre de situation. Quand tu dis que FF n'interprête pas l'évènement onunload, tu le sais comment?
Je lance simplement une session chat sur deux postes différents ( en l'occurence, mon poste principal et mon portable ) et je teste les connections et les déconnections ( les connections, évidemment pas de problèmes. La déconnection automatique - après un laps de temps d'inactivité -, pas de souçis non plus ).
Ensuite je vérifie simplement si le pseudo disparait de la liste des connectés sur un poste à la fermeture de la fenêtre chat sur l'autre poste...
MAIS, caramba!, je viens de constater à la minute que le problème est aussi présent avec IE.
Je dois admettre que ça me dépasse...
Un pti bout de code pour tester?
Voilà. (soyez un peu indulgents, je ne fais du code que depuis un peu plus de deux mois

(mais c'est devenu une drogue))
Petit détail: il m'avait semblé - mais je peux me tromper - que les requêtes envoyées en vrac généraient beaucoup d'erreurs, je les ai donc placées dans la boucle principale afin qu'elles soient soumises au serveur dans un flux rationnel.
Code : Tout sélectionner
function LogIn(){ //===============================================LOGIN
action = "log";
}
function go(){ //==================================================MESSAGE
action = "publication";
message=document.getElementById('id_mess').value;
document.getElementById('id_mess').value="Envoi du message";
document.getElementById('id_mess').style.backgroundColor="yellow";
}
function LogOut(){ //==============================================DELOG
action = "unlog";
}
function timer(){ //================================================START TIMER
action="first";
setInterval('boucle()','1000');
}
function quit(){
var unlogPseudo = document.getElementById('client').innerHTML;
if (unlogPseudo!=""){
if (unlogPseudo!="déconnecté"){
alert ('Vous allez être déconnectés');
}
loadXMLdoc('chatdb2.php?action=quit&pseudo='+unlogPseudo,'client');
}else{
loadXMLdoc('chatdb2.php?action=quit&pseudo='+unlogPseudo,'client');
}
}
function relog(relogin){ //==========================================RECONNECTION EN CAS DE REFRESH
loadXMLdoc('chatdb2.php?action=LogIn&pseudo='+relogin,'client');
}
function boucle(){
switch(action){
case 'first':
action="lecture";
loadXMLdoc('chatdb2.php?action=ListeConnect','ListeConnect') ;
loadXMLdoc('chatdb2.php?action=first','zoneAff') ;
loadXMLdoc('chatdb2.php?action=disconnect','client') ;
break;
case 'lecture':
loadXMLdoc('chatdb2.php?action=ListeConnect','ListeConnect') ;
loadXMLdoc('chatdb2.php?action=boucle','zoneAff') ;
loadXMLdoc('chatdb2.php?action=disconnect','client') ;
break;
case 'log':
action="lecture";
var logs = document.getElementById('ListeConnect').innerHTML.toUpperCase();
if (document.getElementById('client').innerHTML!="déconnecté" || document.getElementById('client').innerHTML!=""){
var nom = prompt ("Entrez votre pseudo","");
if (nom=="" || nom == null){
//alert ("Vide!");
return false;
}
else if(logs.indexOf(nom.toUpperCase())>=0){
alert("Ce pseudo est déjà utilisé!");
return false;
}
else{
loadXMLdoc('chatdb2.php?action=LogIn&pseudo='+nom,'client');
}
}else if (document.getElementById('client').innerHTML!=""){
alert ("Vous êtes déjà connectés!");
}
break;
case'publication':
action="lecture";
if (document.getElementById('client').innerHTML!="déconnecté" || document.getElementById('client').innerHTML!=""){
var pseudo = document.getElementById('client').innerHTML;
}
if (document.getElementById('client').innerHTML=="" || document.getElementById('client').innerHTML=="déconnecté"){
alert ('Non connecté!!');
document.getElementById('id_mess').style.backgroundColor="white";
return;
}
if (document.getElementById('id_mess').value==""){
alert ('Message vide!!');
document.getElementById('id_mess').style.backgroundColor="white";
return;
}
else if(message!=""){
loadXMLdoc('chatdb2.php?mess='+message+'&action=normal&pseudo='+pseudo,'zoneAff') ;
document.getElementById('id_mess').value="";
document.getElementById('id_mess').style.backgroundColor="white";
message="";
}
break;
case'unlog':
action="lecture";
var unlogPseudo = document.getElementById('client').innerHTML;
loadXMLdoc('chatdb2.php?action=LogOut&pseudo='+unlogPseudo,'client');
loadXMLdoc('chatdb2.php?action=ListeConnect','ListeConnect') ;
document.getElementById('client').innerHTML="déconnecté";
break;
}
}
case "quit":
$nom= encode($_GET['pseudo']);
$requete = "delete * FROM connection WHERE pseudo='".$nom."'";
$conn->execute($requete);
$conn->Close();
unset ($_SESSION['pseudo']);
exit;
En fait, pour simplifier et dans le but de n'avoir qu'un strict minimum de fichiers (donc: une page principale avec tout dedans et une petite base Access(!) avec les messages et les logins ) j'ai mis tout le code php, javascript, html dans la même page (chatdb2.php).
Peut-être que le malaise vient de là???
[quote="starkeus"]
C'est bizarre car moi c'est plus souvent IE qui me pose pb dans ce genre de situation. Quand tu dis que FF n'interprête pas l'évènement onunload, tu le sais comment?[/quote]
Je lance simplement une session chat sur deux postes différents ( en l'occurence, mon poste principal et mon portable ) et je teste les connections et les déconnections ( les connections, évidemment pas de problèmes. La déconnection automatique - après un laps de temps d'inactivité -, pas de souçis non plus ).
Ensuite je vérifie simplement si le pseudo disparait de la liste des connectés sur un poste à la fermeture de la fenêtre chat sur l'autre poste... :?
[b]MAIS[/b], caramba!, je viens de constater à la minute que le problème est aussi présent avec IE. :x
Je dois admettre que ça me dépasse...
[quote="starkeus"]Un pti bout de code pour tester?[/quote]
Voilà. (soyez un peu indulgents, je ne fais du code que depuis un peu plus de deux mois :? (mais c'est devenu une drogue))
Petit détail: il m'avait semblé - mais je peux me tromper - que les requêtes envoyées en vrac généraient beaucoup d'erreurs, je les ai donc placées dans la boucle principale afin qu'elles soient soumises au serveur dans un flux rationnel.
[code]
function LogIn(){ //===============================================LOGIN
action = "log";
}
function go(){ //==================================================MESSAGE
action = "publication";
message=document.getElementById('id_mess').value;
document.getElementById('id_mess').value="Envoi du message";
document.getElementById('id_mess').style.backgroundColor="yellow";
}
function LogOut(){ //==============================================DELOG
action = "unlog";
}
function timer(){ //================================================START TIMER
action="first";
setInterval('boucle()','1000');
}
function quit(){
var unlogPseudo = document.getElementById('client').innerHTML;
if (unlogPseudo!=""){
if (unlogPseudo!="déconnecté"){
alert ('Vous allez être déconnectés');
}
loadXMLdoc('chatdb2.php?action=quit&pseudo='+unlogPseudo,'client');
}else{
loadXMLdoc('chatdb2.php?action=quit&pseudo='+unlogPseudo,'client');
}
}
function relog(relogin){ //==========================================RECONNECTION EN CAS DE REFRESH
loadXMLdoc('chatdb2.php?action=LogIn&pseudo='+relogin,'client');
}
function boucle(){
switch(action){
case 'first':
action="lecture";
loadXMLdoc('chatdb2.php?action=ListeConnect','ListeConnect') ;
loadXMLdoc('chatdb2.php?action=first','zoneAff') ;
loadXMLdoc('chatdb2.php?action=disconnect','client') ;
break;
case 'lecture':
loadXMLdoc('chatdb2.php?action=ListeConnect','ListeConnect') ;
loadXMLdoc('chatdb2.php?action=boucle','zoneAff') ;
loadXMLdoc('chatdb2.php?action=disconnect','client') ;
break;
case 'log':
action="lecture";
var logs = document.getElementById('ListeConnect').innerHTML.toUpperCase();
if (document.getElementById('client').innerHTML!="déconnecté" || document.getElementById('client').innerHTML!=""){
var nom = prompt ("Entrez votre pseudo","");
if (nom=="" || nom == null){
//alert ("Vide!");
return false;
}
else if(logs.indexOf(nom.toUpperCase())>=0){
alert("Ce pseudo est déjà utilisé!");
return false;
}
else{
loadXMLdoc('chatdb2.php?action=LogIn&pseudo='+nom,'client');
}
}else if (document.getElementById('client').innerHTML!=""){
alert ("Vous êtes déjà connectés!");
}
break;
case'publication':
action="lecture";
if (document.getElementById('client').innerHTML!="déconnecté" || document.getElementById('client').innerHTML!=""){
var pseudo = document.getElementById('client').innerHTML;
}
if (document.getElementById('client').innerHTML=="" || document.getElementById('client').innerHTML=="déconnecté"){
alert ('Non connecté!!');
document.getElementById('id_mess').style.backgroundColor="white";
return;
}
if (document.getElementById('id_mess').value==""){
alert ('Message vide!!');
document.getElementById('id_mess').style.backgroundColor="white";
return;
}
else if(message!=""){
loadXMLdoc('chatdb2.php?mess='+message+'&action=normal&pseudo='+pseudo,'zoneAff') ;
document.getElementById('id_mess').value="";
document.getElementById('id_mess').style.backgroundColor="white";
message="";
}
break;
case'unlog':
action="lecture";
var unlogPseudo = document.getElementById('client').innerHTML;
loadXMLdoc('chatdb2.php?action=LogOut&pseudo='+unlogPseudo,'client');
loadXMLdoc('chatdb2.php?action=ListeConnect','ListeConnect') ;
document.getElementById('client').innerHTML="déconnecté";
break;
}
}
[/code]
[code]<body onUnload="quit();">[/code]
[php]case "quit":
$nom= encode($_GET['pseudo']);
$requete = "delete * FROM connection WHERE pseudo='".$nom."'";
$conn->execute($requete);
$conn->Close();
unset ($_SESSION['pseudo']);
exit;[/php]
En fait, pour simplifier et dans le but de n'avoir qu'un strict minimum de fichiers (donc: une page principale avec tout dedans et une petite base Access(!) avec les messages et les logins ) j'ai mis tout le code php, javascript, html dans la même page (chatdb2.php).
Peut-être que le malaise vient de là???