Problème actualisation d'une page avec AJAX et PHP

So1069 -  
 Utilisateur anonyme -
Bonjour,

Voici mon problème :

J'ai fait un minichat qui s'actualise automatiquement via AJAX.

Voici les codes :

index.php

<!DOCTYPE html>
<html>
    <head>
   
        <title>MON TITRE</title>
	<script type="text/javascript" src="im.js"></script>
    </head>
 
<body onload="refreshChat();">

<div id="im"></div>
			
<p>
	Message : <br/>
        <textarea name="message" rows="5" cols="30" id="message">   
        </textarea><br />
	<input type="hidden" name="pseudo" id="pseudo" value="'.$_SESSION['id'].'" />
	<input type="button" value="Envoyer" onclick="submitChat();" />
</p>

</body>
</html>




minichat.php

// Connexion à la BDD
$bdd = connectionBase('mabase');

if (isset($_POST['pseudo']) && isset($_POST['message'])) 
{
	if (!empty($_POST['pseudo']) && !empty($_POST['message'])) 
	{
		$pseudo = (int) $_POST['pseudo'];
		$message = trim(strip_tags($_POST['message']));
		$req = $bdd->prepare('INSERT INTO instant_messaging (im_member, im_message) VALUES(?, ?)');
		$req->execute(array($pseudo, $message));
	}
}
		
// Récupération des 50 derniers messages
$reponse = $bdd->query('SELECT members_login, im_message
FROM instant_messaging 
LEFT JOIN members ON members.members_id = instant_messaging.im_member
ORDER BY ID DESC LIMIT 0, 50');

// Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
while ($donnees = $reponse->fetch())
{
	echo '<p><strong>' . htmlspecialchars($donnees['members_login']) . '</strong> : ' . htmlspecialchars($donnees['im_message']) . '</p>';
}
$reponse->closeCursor();


im.js

function getXMLHttpRequest() {
	var xhr = null;
	
	if (window.XMLHttpRequest || window.ActiveXObject) {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			xhr = new XMLHttpRequest(); 
		}
	} else {
		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
		return null;
	}
	
	return xhr;
}


function refreshChat()
{
var xhr = getXMLHttpRequest();
xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
                document.getElementById('im').innerHTML = xhr.responseText; // Données textuelles récupérées
        }
};

xhr.open("GET", "minichat.php", true);
xhr.send(null);
}

function submitChat()
{
var xhr = getXMLHttpRequest();
var pseudo = encodeURIComponent(document.getElementById('pseudo').value);
var message = encodeURIComponent(document.getElementById('message').value);
document.getElementById('message').value = ""; // on vide le message sur la page

xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
                document.getElementById('im').innerHTML = xhr.responseText; // Données textuelles récupérées
        }
};

xhr.open("POST", "minichat.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("pseudo="+pseudo+"&message="+message);

}
var timer=setInterval("refreshChat()", 5000); // répète toutes les 5s


J'ai fait les test pour voir si tout fonctionnait bien.. C'est le cas, mais que lors des trois premiers messages ! A partir du quatrième, les messages se regroupent par membre et ne se publient plus les uns après les autres !

Au début j'ai ça :

Member1 : Salut !
Member2 : Salut, ça va ?
Member1 : Oui et toi ?

Mais après j'ai ça :

Member1 : Salut !
Member1 : Oui et toi ?
Member2 : Salut, ça va ?
Member2 : Oui merci !

Au lieu d'une suite logique ! Ca plante toujours à partir du quatrième message !

Merci pour votre aide.
A voir également:

1 réponse

Utilisateur anonyme
 
Je crois, sans mais vraiment sans être sur, que le problème vient du SELECT lors de la récupération des derniers messages.

Peut-être classe-t-il les messages selon l'ID des membres plutôt que l'ID des messages qui affichent une suite logique de publication.

Essaie: ORDER BY instant_messaging.ID DESC LIMIT 0, 50
0