Bonjour,
Je créer un pseudo chat et j'ai quelque problème d'actualisation.
Le principe de base est le suivant :
chaque internaute s'enregistre dans une base de donnée avec un identifiant (unique pour chaque personne)
Ensuite, il peut se connecter au chat avec son identifiant et mot de passe.
Il peut alors poser une question grace à l'interface.
Les questions sont envoyées au webmaster (moi), et je sélectionne celles que je veux envoyer à Mathieu (qui est l'artiste pour qui je réalise le chat)
Mathieu reçoit une alerte comme quoi il a un message. il y réponds.
la question et la réponse s'affiche sur le chat.
Je ne peux pas réactualiser toute la page où s'affiche les messages, car ça voudrait dire que tous les messages et toutes les réponses se réafficheraient à chaque utilisation. J'ai donc créer une boucle infinie dans ma page qui détecte s'il y a un message à afficher.
Cette boucle détecte aussi si moi ou Mathieu avont un nouveau message grace à un champs "nouveau_mess" qui passe à 1. Jusque là, ça marche, sauf que quand je lis mes messages, j'ai le champs "nouveau_mess" dans la base de donnée qui passe de 1 à 0, donc sur la fenetre du chat, il ne devrait plus y avoir écrit "vous avez un message" et ça n'est pas le cas :-( je suis obligé de faire un clic-droit puis actualiser pour voir le changement d'état du champ "nouveau_mess".
Et si vous avec une autre idée pour actualiser le contenu de la page 'chat.php' parceque là, ça fait appel au base de données toutes les 5 secondes.... et si on a beaucoup d'internautes connecté, j'ai peur que le serveur ne suive pas....
voilà mon code simplifier :
<?php
// Page faisant appel aux sessions
session_start();
?>
<html>
<head>
<title>Document sans titre</title>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
</head>
<script language="JavaScript" type="text/javascript">
// Fonction pour faire une pause
function delay(gap){ /* gap is in millisecs */
var then,now;
then=new Date().getTime();
now=then;
while((now-then)<gap)
{now=new Date().getTime();}
}
function MM_openBrWindow(theURL,winName,features) { //v2.0
window.open(theURL,winName,features);
}
</script>
<body>
<?
include("connexion.inc.php");
@mysql_connect($BD_serveur, $BD_utilisateur, $BD_motDePasse)
or die("Impossible de se connecter au serveur de bases de données.");
@mysql_select_db($BD_base)
or die("Impossible de se connecter à la base de données.");
$compteur_old = 0; //il sert à savoir s'il y a des nouveaux messages à afficher sur le chat
for($i=1;$i=1000;$i++)
{
$nouveau_message = 0; //sert à savoir si moi où Mathieu avont des nouveau messages
$requete_mess = "SELECT * FROM table_utilisateurs WHERE id='".$_SESSION["membreid"]."'";
$result_mess = mysql_query($requete_mess);
if ($enreg_mess = mysql_fetch_array($result_mess))
{
// Si une ligne a été trouvée c'est que le couple
// (identifant, mot de passe) est valide
$req_mess = mysql_query("SELECT nouveau_mess from table_messages WHERE id_destinataire='".$_SESSION["membreid"]."' ") or die ("erreur requete");
while($contenu = mysql_fetch_array ($req_mess))
{if ($contenu[nouveau_mess] != 0)
{$nouveau_message = 1;
}
}
if ($nouveau_message != 0)
{echo '<a href="#" onClick="MM_openBrWindow';
echo "('lire_message.php','','resizable=yes,width=600,height=400,scrollbars=yes')";
echo '">Vous avez un message</a>.<br>';
}
} else {
echo "Une erreur inattendue est intervenue.<br>";
}
$date_chat = time ();
$requete_chat = "SELECT * FROM table_messages WHERE id_destinataire='chat'";
$result_chat = mysql_query($requete_chat);
$compteur = count($result_chat); //compte le nombre de message avec réponses dans la base
while ($enreg_chat = mysql_fetch_array($result_chat))
{if (($date_chat - $enreg_chat[date_verif]) < 60)
{if ($compteur_old != $compteur)
{$compteur_old = $compteur;
echo $enreg_chat[date_mess];
echo " ";
echo $enreg_chat[id_auteur];
echo " : ";
echo $enreg_chat[message];
echo "<br>";
echo date("d-m-Y H:i");
echo " MathieuJohann : ";
echo $enreg_chat[reponse];
echo "<br>";
}
}
}
echo '<script language="JavaScript">window.scrollTo(0,1000);delay(500);</script>'; //script pour avoir le scroll toujours en bas, puis appel à la fonction qui fait la pause
$i=1;
}
?>
</body>
</html>
code de la page 'lire_message.php' :
<?
// Page d'affichage des messages
session_start();
// Parametres de connexion à la base de données
include("connexion.inc.php");
//on se connecte à la base de donnée
$db = mysql_connect($BD_serveur,$BD_utilisateur,$BD_motDePasse) or die ("erreur de connexion");
//sélection de votre base de donnée
mysql_select_db($BD_base,$db) or die ("erreur de connexion base");
//la requète de selection des messages
$req = mysql_query("SELECT id_auteur,date_mess,message,nouveau_mess,ident_mess,reponse from table_messages WHERE id_destinataire='".$_SESSION["membreid"]."' Order by date_verif Asc LIMIT $debut,$nb_rep_pages ") or die ("erreur requete");
echo "<table width='100%' border='0' cellspacing='0' cellpadding='2'>";
//on ressort le contenu en boucle, et on stock dans un tableau avec mysql_fetch_array
while( $contenu = mysql_fetch_array ($req))
{
//on affiche le résultat
print '<tr><td bgcolor="#6388AD"><b>Le '.$contenu[date_mess].'';
if($_SESSION["membreid"] != "MathieuJohann")
{
print '<a href="envoyer_a_mathieu.php?ident_mess='.$contenu[ident_mess].'"> Envoyer à Mathieu</a>';
print '<a href="effacer_message.php?ident_mess='.$contenu[ident_mess].'"> Effacer le message</a>';
}
print '</b></td></tr><tr><td bgcolor="#FFFFCC"><font color="#FF0000">'.$contenu[id_auteur].'</font> : ';
// echo stripslashes($contenu[message]);
$str=stripslashes($contenu[message]);
$str=str_replace('<br />',' <br> ',$str);
$arr=explode(" ",$str);
foreach ($arr as $elem)
{$elem = trim($elem);
echo "$elem ";
}
print '</td></tr>';
if($_SESSION["membreid"] == "MathieuJohann")
{
print '<tr><td bgcolor="#FFFFCC"><font color="#FF0000">Répondre : <br></font>';
echo '<form action="enreg_rep_mathieu.php" method="post" enctype="multipart/form-data"><table border="0" align="center" cellpadding="2" cellspacing="0"><tr><td><textarea name="reponse" wrap="VIRTUAL" cols="40" rows="10"></textarea></td></tr></table>';
echo '<input type="hidden" name="ident_mess" value="'.$contenu[ident_mess].'">';
echo '<div align="center"><input type="submit" value="Enregistrer"></div></form>';
$req_mess_math = mysql_query("UPDATE `table_messages` SET `nouveau_mess` = '0' WHERE ident_mess='".$contenu[ident_mess]."' ") or die ("erreur requête ajouter message mathieu");
}
print '</td></tr>';
print '<tr><td><hr></td></tr>';
}
print '</table>';
if($_SESSION["membreid"] != "MathieuJohann")
{// On mets le champs 'nouveau message' à 0
$req = mysql_query("UPDATE `table_messages` SET `nouveau_mess` = '0' WHERE id_destinataire='".$_SESSION["membreid"]."' ") or die ("erreur requête mise à zero du champ nouveau_mess");
}
//on referme la connexion
mysql_close();
?>