Mauvais encodage avec json_encode [Résolu]

Messages postés
3
Date d'inscription
mardi 30 décembre 2014
Dernière intervention
30 décembre 2014
-
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.
Afficher la suite 

Votre réponse

1 réponse

Messages postés
3
Date d'inscription
mardi 30 décembre 2014
Dernière intervention
30 décembre 2014
0
Merci
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
Commenter la réponse de claudegel

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.