Réponse multiple avec JSON

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Réponse multiple avec JSON

Re: Réponse multiple avec JSON

par Gablain » 11 janv. 2014, 00:04

Merci beaucoup !!

Re: Réponse multiple avec JSON

par mctarek » 27 mai 2011, 11:52

Résolu ! Merci à vous tous. mctarek.

Re: Réponse multiple avec JSON

par linesoft » 27 mai 2011, 11:34

Salut,
essai d'encoder un tableau complet la je pense que tu encodes chaque ligne

$row = mysql_fetch_assoc($query)
$json = json_encode($row);

essai de faire plutot :

while ($row = mysql_fetch_assoc($query)){
$ligne[]=$row;
}
$json = json_encode($ligne);

Re: Réponse multiple avec JSON

par nhachet » 27 mai 2011, 11:33

Je te conseille de stocker tes résultats dans un tableau et de n'utiliser le json_encode qu'un seule fois sur ton tableau de données. Cette fonction encode très bien les tableaux ;)
(code non testé)
<?php
        // Accès MySQL
        include '../commun/connexion.inc.php';
        include '../commun/fonctions.inc.php';
        
        // $pseudo = $_GET['pseudo'];
        // $sql = "select * from tbl_user where pseudo='$pseudo'";
        $table = 'tbl_user';
        $sql = "select * from $table";
        $query = mysql_query($sql);
        $numrows = mysql_num_rows($query);
        $resultats = array():
        while ($row = mysql_fetch_assoc($query)) {
                $resultats[] = $row;
                }
        echo json_encode($resultats);
?>

Réponse multiple avec JSON

par mctarek » 27 mai 2011, 11:20

Bonjour. Après des heures de lecture et de recherche, je me retourne vers vous tous pour mon problème.
Après une requête PHP/MYSQL, je transforme le résultat en chaîne JSON.

Code : Tout sélectionner

$row = mysql_fetch_assoc($query) $json = json_encode($row);
la chaîne JSON est sous la forme {"pseudo": "Toto", "NIVEAU": "1"}
Il m'est donc possible de récupérer les variables sous Ajax:

Code : Tout sélectionner

reponse=eval('('+xhr_object.responseText+')'); $(div).innerHTML='Pseudo: '+reponse.pseudo+"<br/>\n"+'Niveau: '+reponse.NIVEAU;
Tout va bien.

Mais le problème vent lorque le retour MYSQL renvoit plusieurs lignes de réponses:
La chaîne JSON ressemble alors à 3 lignes {"pseudo": "Toto", "NIVEAU": "1"}{"pseudo": "Titi", "NIVEAU": "2"}{"pseudo": "Tito", NIVEAU": "3"}
et Ajax renvoit une erreur au Navigateur sur le format de la chaîne, même en tentant les

Code : Tout sélectionner

$(div).innerHTML='Pseudo: '+reponse.pseudo[1]+"<br/>\n"+'Niveau: '+reponse.NIVEAU[1];
J'ai alors vu que la chaîne JSON devrait être séparée par des virgules, et plus précisement sous la forme :

Code : Tout sélectionner

{"user": [ {"pseudo": "Toto", "NIVEAU": "1"}, {"pseudo": "Titi", "NIVEAU": "2"}, {"pseudo": "Tito", "NIVEAU": "3"} ] };
voir http://www.json.org/js.html

et la commande javascript : $(div).innerHTML += 'Pseudo: '+reponse.user[2].pseudo+"<br/>\n"+'Niveau: '+reponse.user[2].NIVEAU;
fonctionne.

Ma question est : comment faire pour que la chaîne multiple soit retournée au bon format en PHP ?
L'essai suivant me retourne des réponses en duplicata
<?php

// Accès MySQL
    include '../commun/connexion.inc.php';
	include '../commun/fonctions.inc.php';
	
	// $pseudo = $_GET['pseudo'];
	// $sql = "select * from tbl_user where pseudo='$pseudo'";
	$table = 'tbl_user';
	$sql = "select * from $table";
	$query = mysql_query($sql);
	$numrows = mysql_num_rows($query);
	echo '{"user"'.": [ ";	
	$json = ''; 
while ($row = mysql_fetch_assoc($query)) {
		if ($json == '') $json = json_encode($row); // 1ère ligne sans début de virgule
		else {$json .= ", ".json_encode($row); // lignes suivantes séparées par une virgule sauf la fin
		echo $json;}
		}
	echo " ] }";
?>

Merci de votre aide !

(Le défi ultérieur consitera à itérer la chaîne JSON en javasript pour afficher tous les résultats)
mctarek