Probleme boucle sql et xajax

Fermé
Utilisateur anonyme - 22 nov. 2010 à 11:03
 zoubairo - 11 août 2012 à 15:54
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

4 réponses

duweb Messages postés 353 Date d'inscription dimanche 30 mai 2010 Statut Membre Dernière intervention 6 mars 2014 72
22 nov. 2010 à 12:33
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.="
0
Utilisateur anonyme
22 nov. 2010 à 14:34
j'ai fait comme tu as dit mais la il ne me met plus de resultat
0
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...
0
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
0