Pseudo chat en php : problème d'actualisation de la page d'affichage des message
cs_Tristan75
Messages postés8Date d'inscriptionlundi 26 avril 2004StatutMembreDernière intervention24 juin 2005
-
23 juin 2005 à 13:31
cs_Tristan75
Messages postés8Date d'inscriptionlundi 26 avril 2004StatutMembreDernière intervention24 juin 2005
-
24 juin 2005 à 14:06
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>
<?
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 '[# Vous avez un message].
';
}
} else {
echo "Une erreur inattendue est intervenue.
";
}
$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 "
";
echo date("d-m-Y H:i");
echo " MathieuJohann : ";
echo $enreg_chat[reponse];
echo "
";
}
}
}
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;
}
?>
</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 "\";
//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 '----
Le '.$contenu[date_mess].'';
if($_SESSION["membreid"] != "MathieuJohann")
{
print ' Envoyer à Mathieu';
print ' Effacer le message';
}
</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");
}
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();
?>
A voir également:
Pseudo chat en php : problème d'actualisation de la page d'affichage des message
cs_Tristan75
Messages postés8Date d'inscriptionlundi 26 avril 2004StatutMembreDernière intervention24 juin 2005 23 juin 2005 à 14:55
Désolé... je cherche depuis plusieurs jours, mais je n'ai rien trouvé, c'est pour ça que je me lance à poser ma question sur des forum....
Sinon, merci Malalam pour le lien. J'ai lu, mais je n'ai pas tout compris. j'ai été voir le site http://www.poof65.com/liveChat/ et j'essaye de regarder les sources... mais ne pouvant pas voir tous les fichiers, j'ai pas mal de mal à comprendre...
Savez vous s'il exicte d'autres exemples de chat utilisant XMLHTTPRequest et où je pourrais accéder aux sources ?
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Voila, tu enregistres les 3 dans le meme repertoire et tu lances.
J'ai vire les trucs que j'avais rajoute pour que ce soit plus court :
prise en charge des pseudos avec affichage de ceux qui sont connectes
(d'ou les sessions), et deconnectes evidemment, et bbcode.
Ah...G oublie un truc, la css, ce sera plus simple :
cs_Tristan75
Messages postés8Date d'inscriptionlundi 26 avril 2004StatutMembreDernière intervention24 juin 2005 23 juin 2005 à 18:43
Merci pour le code.
J'ai regarder, mais je n'y comprends pas grand chose... et je n'arrive pas à le modifier pour l'adapter.
de plus, j'ai réelement besoin de base de donnée, puisque les internautes pourront déposer leur questions dès le matin, mais que le chat ne sera ouvert qu'à 20h00, et que je dois ensuite sélectionner les question les + pertinantes, éviter les doublons, etc....
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20102 23 juin 2005 à 22:19
> Je m'amuse a aider Jojo sur le sien (il est pas mal du tout d'ailleurs), et Antho nous en prepare un aussi.
Malalam : Et j'ai reglé le prob avec les status ^^ Un vrai e-messenger2 ^^
Sinon télécharge la source et essaye la, puis modifie les fichiers lecture/edition pour les adaptes à un BD :D
Malalam : Tu me rapeleras de faire BDD/fichier au cjoix ^^ (memoire courete )
<hr>Si ma reponse te convient, merci de l'accepter !
cs_Tristan75
Messages postés8Date d'inscriptionlundi 26 avril 2004StatutMembreDernière intervention24 juin 2005 23 juin 2005 à 22:51
J'essaye. Mais je ne suis pas sûr d'y arriver... en plus, je dois pouvoir filtrer les messages qui s'affichent sûr le chat... Je pense que ça fait pas mal de modification...
Et tout dois marcher pour lundi matin.... ça me stress !
d'ailleur, si l'un de vous veut regarder mes sources, je peux tout envoyer par email.
en tout cas, merci d'essayer de maider, vous être sympa !
cs_Tristan75
Messages postés8Date d'inscriptionlundi 26 avril 2004StatutMembreDernière intervention24 juin 2005 23 juin 2005 à 23:18
Merci beaucoup !
en espérant que tu pourras, et qu'on pourra expliquer ici comment résoudre mon problème, pour les futurs internautes qui seraient dans la même galère !
JoJo738
Messages postés1267Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention29 juin 20102 24 juin 2005 à 13:32
Tristan75, à ce que j'ai vu, un simple JS, PHP header(redirect); ou meta suffirait.
Mdr, en voyant ton code, j'ai faillit avoir une crise cardiaque ^^ (C'est pas qu'il est pas bien, mais incompatible avec mon PHP (<?, $_POST[sans_quote], echo '' . $var; , echo "$var", ...))
<HR>
Si ma reponse te convient, merci de l'accepter !
</F< body>
cs_Tristan75
Messages postés8Date d'inscriptionlundi 26 avril 2004StatutMembreDernière intervention24 juin 2005 24 juin 2005 à 14:06
un forum, non, puis qu'il faut que ça s'affiche en temps réel, sans que l'internaute recharge ou change de page.
pour le redirec en PHP et meta refresh, c'est pas bon non plus, cas je ne veux pas qu'à l'écran, il y ai une seul question + réponse.
Les internautes doivent pouvoir suivre la "discution" et je ne veux pas recharger tous les messages depuis le début à chaque actualisation de la page.
je vais essayer de comprendre les ActiveXObject("Microsoft.XMLHTTP") , je crois que c'est ce qu'il me faut.