Mauvais encodage avec json_encode

Résolu
claudegel Messages postés 3 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 décembre 2014 - Modifié par Whismeril le 30/12/2014 à 10:03
claudegel Messages postés 3 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 décembre 2014 - 30 déc. 2014 à 03:47
Bonjour,

Je développe un script php servant à interroger une base de donnée mysql. Je recois la requête via json et retourne le résultat encoder avec json_encode

mon script doit pouvoir supporter une requete aléatoire contenant un nombre variable de champs a retourner. J'ai donc programmé une routine qui construit le data devant être encodé via json_encode, malheureusement ça ne fonctionne pas et le code retourné est corrompu.

le code statique suivant produit un data json correcte
--------
while ($row = mysql_fetch_array($result,MYSQL_ASSOC)){
$resultat[] = array(
nom => $row['nom'], //champ 'nom' de la table mysql
nocli => $row['nocli'] //autre champ (nocli)
);
}
echo json_encode($resultat); 

--------
le résultat obtenu est correcte :
[{"nom":"Richard et Fils Inc.","nocli":"227-1"},{"nom":"Perreault et Fils Inc.","nocli":"227"},....

de cette façon je dois connêtre à l'avance les noms de champs mysql.

Le code suivant doit fonctionner si je ne commais pas le nom des champs mysql ni le nombre de champs. Je recois cet info avec la requête json et je stock les noms de champs dans
while ($row = mysql_fetch_array($result,MYSQL_ASSOC)){
$result_array = ""; //variable temporaire
$i = 1;
for ($i==1;$i<=$nbfield;$i++){ // $nbfield contient le nombre de champs à retourner
$result_array .= $champ[$i]." => ".$row[$champ[$i]].","; //le nombre de champ peut donc varier
}
$result_array = rtrim($result_array,","); //pour enlever la derniere virgule
$resultat[] = array($result_array);
}
echo json_encode($resultat);


---------
le résultat obtenu est incorrecte:
[["nom => Richard et Fils Inc.,nocli => 227-1"],["nom => Perreault et Fils Inc.,nocli => 227"],...

l'encodage est corrompu

qu'est-ce qui ne fonctionne pas dans mon dernier code

Merci,

EDIT: Ajout de la coloration syntaxique.

1 réponse

claudegel Messages postés 3 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 décembre 2014
Modifié par Whismeril le 30/12/2014 à 10:03
Je viens de trouver...

while($r = mysql_fetch_assoc($result)) {
  $resultat[] = $r;
 }
 echo json_encode($resultat);


tout simple et pas besoin de savoir a l'avance le nombre ou les noms de champs qui seront encodés
0
Rejoignez-nous