Probleme boucle sql et xajax

Bonjour,

je fais un chat avec xajax mysql php,
j'ai trouvé un tuto qui explique comment le faire mais avec un fichier chat.txt, j'ai donc changé les requete pour sa joue avec mysql mais le probleme c'est que ça n'affiche que le dernier message ,
je vous met le code, si quelqu'un sait comment faire !!!

<?php
//
// fonction PHP pour afficher les messages :
//
function afficher()
{
        $reponse = new xajaxResponse();// Création d'une instance de xajaxResponse pour traiter les réponses serveur.
          try
{
	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$req = $bdd->query('SELECT * FROM message');


while ($donnees = $req->fetch())
{
	$message = '<p><strong>' . htmlspecialchars($donnees['posteur']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>';
}


        
          
        $reponse->assign("block", "innerHTML", $message);
        return $reponse;
}

//
// fonction PHP envoyer pour envoyer un message :
//
function envoyer($posteur, $message)
{
        $reponse = new xajaxResponse();//Création d'une instance de xajaxResponse pour traiter les réponses serveur.
            try
{
	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$bdd->exec('INSERT INTO message (id, posteur, message) VALUES("", "'.htmlentities($posteur).'", "'.htmlentities($message).'")' ) ;

        $reponse->clear('message', 'value');// On vide le champ contenant le message de l'utilisateur.
        $reponse->call('xajax_afficher');// On appelle la fonction afficher pour afficher les messages pour que l'utilisateur voie son message à l'écran.
        return $reponse;
}


require_once('xajax_core/xajax.inc.php');
$xajax = new xajax(); // initialise l'objet xajax.
$xajax->register(XAJAX_FUNCTION, 'afficher');//  enregistre nos fonctions.
$xajax->register(XAJAX_FUNCTION, 'envoyer');
$xajax->processRequest();
?>
<!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" >
        <head>
                <title>Chat xAjax</title>
                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                <?php $xajax->printJavascript(); /* Affiche le Javascript */?>
                <script type="text/javascript">
                function refresh()// Code javascript qui va appeler la fonction afficher toutes les 5 secondes.
                {
                        xajax_afficher();
                        setTimeout(refresh, 5000);
                }
                </script>
        </head>
        <body>
                <div id="block"></div>
                <form action="">
                        <fieldset>
                         <legend>Entrer ici votre message :</legend>
                         <div>
                          <label>Nom : <input type="text" size="15" id="posteur" /></label><br />
                          <label>Message : <input type="text" size="50" id="message" /></label><br />
                          <input type="submit" value="Envoyer" onclick="xajax_envoyer(document.getElementById('posteur').value, document.getElementById('message').value); return false;" />
                         </div>
                        </fieldset>
                </form>
                <script type="text/javascript">
                        refresh();// appelle la fonction refresh() pour lancer le script.
                </script>
                
                
        </body>
</html>


donc ça fonctionne mais ça n'affiche que le dernier message
!!!!
merci d'avance


--
PGC is not dead

4 réponses

  1. je n'ai pas testé ton code mais c'est normal que tu n'ai que le dernier message posté car :
    - dans ta fonction afficher :
    -> tu fais une requete puis une boucle mais tu ne concatènes pas les données. tu auras donc la dernière ligne trouvée dans $message

    pour corriger :
    -> remplace "$message =" par "$message.="
    1. j'ai fait comme tu as dit mais la il ne me met plus de resultat
      1. je te réponds un peu tard...
        tu n'as pas fait attention a ça :

        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

        l'encodage est mauvais tu dois rajouter ceci avant de déclarer tes fonctions php :

        $xajax->setCharEncoding('iso-8859-1');

        enfin je crois...
        1. merci bcp Kallen j'ai déjà le méme problème maintenant c'est regle merci bcp
          mais porquoi ajouter cette point $message.=
          ca une explication