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