Problème actualisation d'une page avec AJAX et PHP
So1069
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Voici mon problème :
J'ai fait un minichat qui s'actualise automatiquement via AJAX.
Voici les codes :
index.php
minichat.php
im.js
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.
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:
- Problème actualisation d'une page avec AJAX et PHP
- Supprimer une page word - Guide
- Imprimer tableau excel sur une page - Guide
- Créer une page facebook - Guide
- Comment traduire une page - Guide
- Page d'accueil - Guide
1 réponse
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
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