begin process at 2012 05 31 13:08:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive PHP

 > 

Archives

 > 

AU SECOURS !!!

 > 

pseudo chat en php : problème d'actualisation de la page d'affichage des messages


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pseudo chat en php : problème d'actualisation de la page d'affichage des messages

jeudi 23 juin 2005 à 13:31:19 | pseudo chat en php : problème d'actualisation de la page d'affichage des messages

Tristan75

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();
?>

jeudi 23 juin 2005 à 13:55:15 | Re : pseudo chat en php : problème d'actualisation de la page d'affichage des messages

malalam

Administrateur CodeS-SourceS
Hello,

http://www.toutjavascript.com/savoir/xmlhttprequest.php3

jeudi 23 juin 2005 à 14:14:09 | Re : pseudo chat en php : problème d'actualisation de la page d'affichage des messages

FhX

Et c'est pas la première fois que la question est posée :)
jeudi 23 juin 2005 à 14:34:57 | Re : pseudo chat en php : problème d'actualisation de la page d'affichage des messages

malalam

Administrateur CodeS-SourceS
C'est le moins qu'on puisse dire!


jeudi 23 juin 2005 à 14:55:09 | Re : pseudo chat en php : problème d'actualisation de la page d'affichage des messages

Tristan75

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 [ Lien ] 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
jeudi 23 juin 2005 à 15:31:09 | Re : pseudo chat en php : problème d'actualisation de la page d'affichage des messages

malalam

Administrateur CodeS-SourceS
Lol ouais, il en existe...mais ils ne sont pas encore ici ;-)

Je m'amuse a aider Jojo sur le sien (il est pas mal du tout d'ailleurs), et Antho nous en prepare un aussi.

Moi j'en ai un mais tres succint, tout petit, c'etait juste pour voir si ca marchait bien. Et ca marche TRES bien.
C'est un peu long a mettre ici, mais si ca t'amuse :

Fichier index.php :

<?php
session_start ();
if (isset ($_POST['submit']) && $_POST['submit'] === 'Valider') {
    if (isset ($_POST['pseudo']) && !empty ($_POST['pseudo'])) {
        $_SESSION['minichat_pseudo'] = htmlentities (stripslashes ($_POST['pseudo']));
        $fp = fopen ('users.txt', 'a');
        $add = $_SESSION['minichat_pseudo'].';;'.session_id().';;';
        fwrite ($fp, $add);
        fclose ($fp);
    }
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<LINK rel="stylesheet" type="text/css" href="css/styles.css" media="screen" />
<script type="text/javascript">
if(document.all) {
    // Internet Explorer
    var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
}
else {
    // Mozilla
    var XhrObj = new XMLHttpRequest();
}

function sendData(data, page) {
    // définition de l'endroit d'affichage:
    var content = document.getElementById("contenu");
   
    XhrObj.open("POST", page);

    // Ok pour la page cible
    XhrObj.onreadystatechange = function() {
        if (XhrObj.readyState == 4 && XhrObj.status == 200)
            content.innerHTML = XhrObj.responseText ;
    }

    XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    XhrObj.send(data);
}

function updateData (page) {
    var content = document.getElementById('contenu');
       
    XhrObj.open("POST", page);

    XhrObj.onreadystatechange = function() {
        if (XhrObj.readyState == 4 && XhrObj.status == 200) {
            var chaine = XhrObj.responseText;
            if (chaine != 'undefined')
            content.innerHTML = XhrObj.responseText ;
        }
    }

    XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    XhrObj.send('');
    setTimeout ("updateData ('get.php')", 1000);
}

</script>
</head>
<body>

<?php
if (isset ($_SESSION['minichat_pseudo'])) {
?>
    <div id="contenu" class="contenu">
    <?php
    //require_once ('read.php');
    ?>
    </div>
   
    <script type="text/javascript">
    updateData ('get.php');
    </script>

    <fieldset class="formulaire">
            <legend><em>Mini-Chat</em></legend>
                <form id="formPost" method="post">
                    Pseudo: <br /><input type="text" name="nom" class="inputDisabled" disabled="disabled" value="<?php echo $_SESSION['minichat_pseudo']; ?>"/><br />
                    Message: <br /><input type="text" name="message" id="message" class="inputMess"/><br />
                    <input type="button" value="Envoyer" onclick="sendData('nom='+document.getElementById('formPost').nom.value+'&message='+document.getElementById('formPost').message.value, 'get.php')" class="button"/>
                </form>
        </fieldset>
<?php
}
else {
?>
    <form method="post" action="?" id="formPseudo">
    <input type ="text" name="pseudo" class="input"/>
    <input type="submit" class="button" name="submit" value="Valider" />
    </form>
<?php
}
?>
</body>
</html>

fichier read.php :

<?php
session_start();
   
if (file_exists ('messages.txt')) {
    $fp = fopen ('messages.txt', 'r');
    $read = stripslashes (fread ($fp, filesize ('messages.txt')));
    $tab = explode ('<br />', $read);
    $tab = array_reverse ($tab);
    $read = implode ('<br />', $tab);
    echo $read;
}
?>

Fichier get.php :

<?php
session_start ();
header('Content-type: text/html') ; // on declare ce qui va etre affiche
   
// test des POST emis
if(isset($_POST['nom']) && !empty($_POST['nom']) && isset($_POST['message']) && !empty($_POST['message'])){
    if (file_exists ('messages.txt') && filesize ('messages.txt') > 20000) {
        $fp = fopen ('messages.txt', 'w+');
    }
    else {
        $fp = fopen ('messages.txt', 'a+');
    }
    if (!get_magic_quotes_gpc()) {
        $_POST['nom'] = addslashes(utf8_decode ($_POST['nom']));
        $_POST['message'] = addslashes(utf8_decode ($_POST['message']));
    }
    $add = '<strong>'.htmlentities ($_POST['nom']).' => </strong>'.htmlentities ($_POST['message']).'<br />';
    fwrite ($fp, $add);
    fclose ($fp);
}
require_once ('read.php');

?>

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 :
a mettre dans un repertoire css/styles.css
body {
    background-color: #eeeeee;
    font-family: Helvetica, Arial, Verdana;
    font-size: 8pt;
    color: #000000;
}

.pseudos {
    position: absolute;
    top: 10px;
    left: 580px;
    border: 1px solid #000000;
    background-color: #cccccc;
    width: 250px;
    height: 620px;
    margin-top: 5px;
    overflow: auto;
}

.contenu {
    position: absolute;
    top: 10px;
    left: 10px;
    border: 1px solid #ff0000;
    background-color: #ffffff;
    width: 550px;
    height: 500px;
    margin-top: 5px;
    overflow: auto;
}

.formulaire {
    position: absolute;
    left: 10px;
    top: 520px;
    border: 1px solid #ff0000;
    width: 532px;
}

.button {
    font-family: Helvetica, Arial, Verdana;
    font-size: 8pt;   
    background-color: #dddddd;
    border: 1px solid #999999;
    cursor: pointer;
}

.input {
    font-family: Helvetica, Arial, Verdana;
    font-size: 8pt;   
}

.inputMess {
    font-family: Helvetica, Arial, Verdana;
    font-size: 8pt;   
    width: 450px;
}

.inputDisabled {
    font-family: Helvetica, Arial, Verdana;
    font-size: 8pt;
    background-color: #eeeeee;
}

Voila, bon courage...

jeudi 23 juin 2005 à 18:43:30 | Re : pseudo chat en php : problème d'actualisation de la page d'affichage des messages

Tristan75

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....
jeudi 23 juin 2005 à 22:19:40 | Re : pseudo chat en php : problème d'actualisation de la page d'affichage des messages

JoJo738

Membre Club
> 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 )

Si ma reponse te convient, merci de l'accepter !
jeudi 23 juin 2005 à 22:39:14 | Re : pseudo chat en php : problème d'actualisation de la page d'affichage des messages

Tristan75

Je veux bien télécharger la source et regarder si ça peux m'aider, mais où ??
Tu parles du code que malalam m'a donné ?

Pour l'instant, je suis toujours en train de galérer pour faire marcher mon chat... :-(

Et dès que ça marche, je clique sur réponse acceptée ! (Et j'ai hate ! ...)
jeudi 23 juin 2005 à 22:42:07 | Re : pseudo chat en php : problème d'actualisation de la page d'affichage des messages

JoJo738

Membre Club
Oui, DL le Code de malalam et modifie get.php en mettant du code avec mysql


Si ma reponse te convient, merci de l'accepter !

1 2

Cette discussion est classée dans : message, messages, echo, chat, mess


Répondre à ce message

Sujets en rapport avec ce message

Optimisation de requete [ par gibozsec ] BonjourJ'ai un soucis avec une opération sur une base de données. J'explique le problème.J'ai deux tables, pour simplifier je ne donne que les champs Voir les nouveaux messages d'un chat [ par David_monchy ] Bonjour à tous,J'ai développé un chat ne permettant que des discussions à 2 (pas de chat général). Si l'on veut parler avec plusieurs personnes, il fa ne s'insert pas dans la base de donnée [ par speedylol ] bonjour j ai un petit probléme que voici j'ai réalisée un petit script de chat online le probléme c'est que l'insertion ne ce fait pas seriez vous m'a messagerie privé instantaner [ par speedylol ] Voici mon probléme, quand je retour le message j'aime qu'il soit renvouez a la personne qui me lla envoys a expe vers le destinataire mes j'ai un peti faire passé open automatiquement [ par speedylol ] Bonjour,Voilà le probléme que j'ai .j'ai crée une petit tchat en privé avec les membres online j' ai un liens qui ce remet a zéro quand on ouvre la fe probléme update [ par speedylol ] bonjour voic le petit probléme que j ai je click sur un liens message online pour allé a la page lecture , mes rien ne ce passe l'update ne fonctionne messagerie instantaner [ par speedylol ] Bonjour, j'aimerais gader la personne qui réponds sans passé par la session car j'ai une faile d'accés a la basse ou alors en verifiant lesd password messagerie priver et deroulement ajax [ par speedylol ] bonjour voici mon probléme j'aimerais faire défiler les message reçu dans le div recu de bas eb haut avec ajax mes cela ne fonction pas seriez vous m' envoie de donnees d un formulaire par mail [ par artemiscel ] Bonjour,je debute en php, j'ai essaye de faire une page permettant aux visiteurs d'envoyer un mail avec toutes les informations qu il doit faire parve problème dans le formulaire de contact [ par heromm ] salut tt le monde, je ss débudante en cms, je viens de créer mon site en cms simple made 1.5.2 "Caguas". Mon prob est que j'ai créer mon formulaire de


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,139 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales