Ajax: Ma fonction se répète indéfiniment...

Résolu/Fermé
WebLooser Messages postés 63 Date d'inscription mercredi 30 mai 2012 Statut Membre Dernière intervention 29 avril 2013 - 24 juil. 2012 à 16:31
WebLooser Messages postés 63 Date d'inscription mercredi 30 mai 2012 Statut Membre Dernière intervention 29 avril 2013 - 26 juil. 2012 à 23:06
Bonjour,
Je ne comprends pas pourquoi la fonction getMessages se répète indéfiniment. (le dernier message se répète à l'infini !)
Je vous donne tout les codes.

chat.php:

<?php
session_start();
if(!isset($_SESSION['login']) || empty($_SESSION['login'])){
         header("location:../../index.html");
		 }	
	include "connect.php";	 

?>


		 
<html>
<head>
<title>NetDead~Tchat en ligne</title>
<link rel="stylesheet" href="design.css" />
<script type="text/javascript" src="Jquery.js"></script>
<script type="text/javascript" src="heure.js"></script>
<script type="text/javascript" src="tchat.js"></script>
<script type="text/javascript">
<?php
$sql = "SELECT id FROM messages ORDER BY id DESC LIMIT 1";
$req = mysql_query($sql) or die(mysql_error());
$data=mysql_fetch_assoc($req);
?>
var lastid = <?php echo $data["id"]; ?>
</script>
</head>
<body>
         <div id="Header">
     <p><h2>Heure locale du serveur: <span id="date_heure"></span><script type="text/javascript">window.onload = date_heure('date_heure');</script></h2></p>
         </div>
        <div id="tchat">
     <?php
         $sql = "SELECT * FROM messages ORDER BY id DESC LIMIT 12"; //On récupère les 15 derniers messages dans la table Messages de la DataBase.
		 $req = mysql_query($sql) or die(mysql_error());
		 $d = array();
		 while($data = mysql_fetch_assoc($req)){
		     $d[] = $data;
			 }
			 for($i = count($d)-1;$i>=0;$i--)
			 {
			 
		 ?>
                 <p><strong>[<?php echo $d[$i]["date"]; ?>]<?php echo htmlspecialchars($d[$i]["pseudo"]); ?></strong> : <?php echo htmlspecialchars($d[$i]["message"]); ?></p>


		 <?php
		 
		    }
			
         ?>
</div>
</body>		 <div id="tchatForm" style="postion:fixed; bottom:0;width:100%;">
		   <div align="center">
				  <form method="post" action="#">
				  	<div style="margin-right: 110px; postion:fixed; bottom:0px; left: 0px; right: 0px;">
			<textarea name="message" style="width:100%;height:13%" maxlength="150" placeholder="Votre message..."></textarea>
            </div>
            <div style="position: absolute;bottom: 45px; right: 40px;">
            <input type="submit" value="Envoyer">
           </div>	
	              </form>       
             </div>
</body>
</html>


tchat.js:
var url="tchatAjax.php";
var lastid=0;
var timer = setInterval(getMessages,5000);

$(function(){
$("#tchatForm form").submit(function(){
var message = $("#tchatForm form textarea").val();
$.post(url,{action:"addMessage",message:message},function(data){
	if(data.erreur=="ok"){	
		alert("ok");
	}
	else{
		alert(data.erreur);
	}
},"json");
return false;
})
});

function getMessages(){
	$.post(url,{action:"getMessages",lastid:lastid},function(data){
	if(data.erreur=="ok"){	
		$("#tchat").append(data.result)
	}
	else{
		alert(data.erreur);
	}
},"json");
return false;
}


tchatAjax.php:
<?php
session_start();
require("connect.php");
$d =array();

if(!isset($_SESSION['login']) || empty($_SESSION['login']) || !isset($_POST['action'])){
	$d["erreur"] = 'Vous devez être connecté(e) pour utiliser le Tchat.';
}	

else{

	extract($_POST);
	$pseudo = mysql_escape_string($_SESSION['login']);
	$date = date("H:i");
	/**
	 *Fonction AddMessage :
	 *Permet l'ajout d'un message
	 **/
	if($_POST['action'] == "addMessage"){
		$message = mysql_escape_string($message);
		$sql = "INSERT INTO messages(pseudo,message,date) VALUES ('$pseudo','$message','$date')";
		mysql_query($sql) or die(mysql_error());
		$d["erreur"]="ok";

	}

	/**
	 *Fonction getMessage :
	 *Permet l'affichage des derniers messages.
	 **/
		if($_POST['action'] == "getMessages"){
		$lastid = floor($lastid);
		$sql = "SELECT * FROM messages WHERE id>$lastid ORDER BY id ASC";
		$req = mysql_query($sql) or die(mysql_error());
		$d["result"] = "";
        while ($data = mysql_fetch_assoc($req)) {
        	$d["result"] .= '<p><strong>['.$data["date"].']'.$data["pseudo"].'</strong> : '.htmlspecialchars($data["message"]).'</p>'; 

        }
        $d["erreur"]="ok";
	}
} 


echo json_encode($d);

?>



Si vous pensez que celà est normal qui se répète indéfiniment, pourriez-vous me dire pour qu'il ne s'affiche qu'un seule fois s'il vous plaît ?
Merci de votre aide.

5 réponses

gilbert1995 Messages postés 414 Date d'inscription samedi 12 septembre 2009 Statut Membre Dernière intervention 30 mai 2013 29
Modifié par gilbert1995 le 25/07/2012 à 02:44
Tu récupérais mal ton last id

  if($_POST['action'] == "getMessages"){
//$lastid = floor($lastid); ou se trouve $lastid ??? Dans le $_POST ;) 
  $lastid = floor($_POST["lastid"]); 
  $sql = "SELECT * FROM messages WHERE id>$lastid ORDER BY id ASC"; 
  $req = mysql_query($sql) or die(mysql_error()); 
  $d["result"] = ""; 
        while ($data = mysql_fetch_assoc($req)) { 
         $d["result"] .= '<p><strong>['.$data["date"].']'.$data["pseudo"].'</strong> : '.htmlspecialchars($data["message"]).'</p>';  

        } 
        $d["erreur"]="ok"; 
 }
0
WebLooser Messages postés 63 Date d'inscription mercredi 30 mai 2012 Statut Membre Dernière intervention 29 avril 2013 7
25 juil. 2012 à 11:58
Je sais où il se trouve le lastid :p
Dans le extract($_POST) pour ne pas avoir à récupérer toutes les données une par une ! ;P
0
WebLooser Messages postés 63 Date d'inscription mercredi 30 mai 2012 Statut Membre Dernière intervention 29 avril 2013 7
25 juil. 2012 à 10:58
Bonjour/ bonsoir Gilbert,
Tout d'abord, merci pour avoir répondu.
Je récupère (et je récupérais) bien le dernier message. Cependant le gros soucis c'est qu'il s'affiche indéfiniment... (pas dans la base de données). Je pense que l'erreur est dans Tchat.js mais je ne sais pas où...

PS: La fonction qui permet d'obtenir les derniers messages se nomme getMessages.
0
WebLooser Messages postés 63 Date d'inscription mercredi 30 mai 2012 Statut Membre Dernière intervention 29 avril 2013 7
25 juil. 2012 à 12:07
Ma fonction JS est censé faire apparaître un nouveau message s'il y en a un. Mais à chaque fois qu'il y a un nouveau message le dernier message s'affiche indéfiniment. Faut-il que le lastid (sur chat.php) se recharge chaque seconde ?
0
gilbert1995 Messages postés 414 Date d'inscription samedi 12 septembre 2009 Statut Membre Dernière intervention 30 mai 2013 29
26 juil. 2012 à 22:27
http://blog.jaysalvat.com/article/un-chat-elementaire-en-php-jquery
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
WebLooser Messages postés 63 Date d'inscription mercredi 30 mai 2012 Statut Membre Dernière intervention 29 avril 2013 7
26 juil. 2012 à 23:06
Pas mal du tout !!
Je vais faire des modifications quand même mais j'adore !
Merci de ton aide !
0