Page 1 sur 1

Affichage de commentaires en utilisant json

Posté : 15 nov. 2011, 05:45
par rimie
Bonjour,

Je trouvais une difficulte a affiche mon dernier commentaire par la methode append, j'utilise json qui joue le role entre jQuery et PHP:

index.php:
$('.SubCom').click(function(){
        
        // load image
        $('.loading').show();
        
        var commentaire = $('.commentaire').val();
        var comLen =  commentaire.length;
        
        var dataString = 'commentaire='+ commentaire;

        $.ajax({
        type: "POST",
		url: "Forms/formCommentsCheck.php",
        data: dataString,
        dataType: "json",
        success: function(data) {
        
        // moins de caracteres
        if(data.comCheck == "lessChars"){
            $('.loading').hide();
                $(".comErrors").html("<div>Veuillez entrer plus de caracteres</div>");
            } else {
                $('.loading').hide();
                
                // append le dernier commentaire
				$('.displayNewCom').fadeIn().append(data);
  
                $(".comErrors").html("<div>Merci pour votre commentaire!</div>");
                    }
        
            
        }
  });
  
  return false;
  });
formCommentsCheck.php:
<?php

$commentaire = strip_tags($_POST['commentaire'], '<a>');

$date_posted = time();

if(mb_strlen($commentaire, 'utf8') < 10)
{
    $comCheck = 'lessChars';
}
else
{
    $comCheck = 'goodChars';
  
$sql = 'INSERT INTO commentaires VALUES (\'\', "'.$commentaire.'")';
$req = $connexion->query($sql);
}

// encodage json
$return_arr["comCheck"] = $comCheck;

echo json_encode($return_arr);

// append data
$sql = 'SELECT * FROM commentaires WHERE ORDER BY idcom DESC LIMIT 1';
//echo $sql;
$req = $connexion->query($sql); 
$result = $req->fetchAll();

foreach($result as $kArr=>$vArr)
{
		$comments = stripslashes(strip_tags($vArr['comments'], '<a>'));
        
        echo '<div style="background-color:#a5a5f0; overflow:hidden; width:500px;">';
echo '<div style="float:left; width:450px; background-color:#7171e7;">';
echo $comments;
echo '</div>';
echo '<div style="float:left; width:50px; background-color:#3838db;">';
echo '<img src="'.$path2imgs.'noProfile.png" width="50" height="50" />';
echo '</div>';
echo '</div>';

echo '<hr style="width: 500px; color: green;">';
}
?>


alors quand je valide le formulaire l'icone de loading reste afficher, sur la console j'ai ce bout de code:

Code : Tout sélectionner

{"comCheck":"lessChars"}<div style="background-color:#a5a5f0; overflow:hidden; width:500px;"><div style="float:left; width:450px; background-color:#7171e7;">fsdf fsdfsdf</div><div style="float:left; width:50px; background-color:#3838db;"><img src="Images/noProfile.png" width="50" height="50" /></div></div><hr style="width: 500px; color: green;">
normalement "comCheck":"lessChars" doit afficher le message d'erreur, alors en ajoutant:

Code : Tout sélectionner

console.log(data.comCheck);
ca donne rien, du vide

merci a vous

Re: Affichage de commentaires en utilisant json

Posté : 15 nov. 2011, 13:27
par zeus
Dans ce que tu nous montres, le JSON ne contient que la variable "comCheck" dont la valeur est "lessChars"
Ton HTML est en dehors de la chaine JSON.

Re: Affichage de commentaires en utilisant json

Posté : 16 nov. 2011, 08:01
par rimie
Dans ce que tu nous montres, le JSON ne contient que la variable "comCheck" dont la valeur est "lessChars"
Ton HTML est en dehors de la chaine JSON.
j'ai mis le contenu commentaire dans une variable array, alors lorsque je clique sur "afficher plus de commentaires", il affiche seulement 1 seul, autrement dit: j'affiche seulement 2 commentaires, je clique sur "afficher plus de commentaires", il doit afficher la totalite des commentaires:

le code index:
$('.moreComs').click(function(){
        	
        	var level1 = $('#IDlevel1').val();
			var level2 = $('#IDlevel2').val();
        	var level3 = $('#IDlevel3').val();
        	var num = $('#IDnum').val(); 
        	
        	var dataString = 'level1=' + level1 + '&level2=' + level2 + '&level3=' + level3 + '&num=' + num;
        
        $.ajax({
        type: "POST",
		url: "Forms/displayCommentsMore.php",
        data: dataString,
        dataType: "json",
        success: function(data) {
        	
        	$('.loadingComs').show();
			$('.appendComs').fadeIn().append(data.commFull); 			
			$('.loadingComs').hide();
        	
        	}
        	});
code displayCommentsMore:
<?php

$return_arr = array();

include '../Included_Files/Connect.php';
include '../Included_Files/paths.php';

$level1 = $_POST['level1'];
$level2 = $_POST['level2'];
$level3 = $_POST['level3'];
$num = $_POST['num'];

$maxComsPerPage = '99';
$sqlq = 'SELECT * FROM commentaires WHERE level1 = "'.$level1.'" AND level2 = "'.$level2.'" AND level3 = "'.$level3.'" AND num = "'.$num.'" ORDER BY idcom DESC';

echo $sqlq;

$req = $connexion->query($sqlq); 
$result = $req->fetchAll();
$total_com = count($result);
echo $total_com;

foreach($result as $kArr=>$vArr)
{
                $idcom = strip_tags($vArr['idcom']);
                $id_pseudo = strip_tags($vArr['id_pseudo']);
                $date_posted = strip_tags($vArr['date_posted']);
                $commentaire = strip_tags($vArr['commentaire'], '<a>');
                
        $commFull = '<div style="background-color:#a5a5f0; overflow:hidden; width:500px;">';
		$commFull .= '<div style="float:left; width:450px; background-color:#7171e7;">';
		$commFull .= $commentaire;
		$commFull .= '</div>';
		$commFull .= '<div style="float:left; width:50px; background-color:#3838db;">';
		$commFull .= '<img src="'.$path2imgs.'noProfile.png" width="50" height="50" />';
		$commFull .= '</div>';
		$commFull .= '</div>';

		$commFull .= '<hr style="width: 500px; color: green;">';
		
}
		
  	$return_arr["commFull"] = $commFull;
	
  echo json_encode($return_arr);		
	

?>
resultat sur firebug, j'ai pas mis d'affichage, j'ai mis des echos pour voir le resultat de la requete ainsi que le total:
requete => SELECT * FROM commentaires WHERE level1 = "6" AND level2 = "43" AND level3 = "7" AND num = "89" ORDER BY idcom DESC
total => 7

Re: Affichage de commentaires en utilisant json

Posté : 17 nov. 2011, 02:42
par rimie
est ce que la methode utilisee par json ne permet pas d'afficher plus qu'un message?

Re: Affichage de commentaires en utilisant json

Posté : 20 nov. 2011, 12:23
par GiorgioLino
Bonjour,

as-tu remarqué que dans ton bout de code suivant :

[php]foreach($result as $kArr=>$vArr)
{
[...]
$commFull = '<div style="background-color:#a5a5f0; overflow:hidden; width:500px;">';
[..]
$commFull .= '<hr style="width: 500px; color: green;">';
}

$return_arr["commFull"] = $commFull;[/php]

la ligne [php]$return_arr["commFull"] = $commFull;[/php]

se trouve hors de ta boucle ?

Résultat : Tu ne mets jamais qu'un et un seul commentaire dans $return_arr...
Un var_dump($return_arr) pourra éventuellement te confirmer cela.

Affiche aussi la chaîne json que tu récupères de "Forms/displayCommentsMore.php" pour vérifier.
Après cela tu devrais savoir e qu'il te reste à faire.

Re: Affichage de commentaires en utilisant json

Posté : 20 nov. 2011, 12:59
par rimie
j'ai mis le code:

Code : Tout sélectionner

foreach() { $return_arr["commFull"] = $commFull; echo json_encode($return_arr); }
il me retourne rien dans la page, par contre au niveau firebug, il affiche tous les resultats, en mettant:

Code : Tout sélectionner

foreach() { $return_arr["commFull"] = $commFull; } echo json_encode($return_arr);
il affiche un seul resultat comme auparavant