Echo json_encode($tab) n'affiche rien [Résolu/Fermé]

Signaler
Messages postés
127
Date d'inscription
lundi 31 octobre 2016
Statut
Membre
Dernière intervention
20 juin 2017
-
Messages postés
30193
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2020
-
Bonsoir,
J'exécute deux requêtes sql dans un même fichier php, les deux requêtes affichent bien les résultats, maintenant je veux affecter le résultat de chaque requête dans un tableau javascript, j'utilise donc la fonction json_encode, la première fonctionne très bien et m'affiche le tableau mais la deuxième n'affiche rien malgré que j'ai suivi la même démarche,
voici mon code (ceci m'affiche bien le résultat souhaité)

<?php
$tabTache=array();
$sql_tab_tache="select DISTINCT(Libelle) from GI_InterventiontTaches";
$stmt_tab_tache=sqlsrv_query($conn,$sql_tab_tache);
while($row_tab_tache=sqlsrv_fetch_array($stmt_tab_tache, SQLSRV_FETCH_NUMERIC))
{
array_push($tabTache, $row_tab_tache[0]);

}
//var_dump($tabTache);
echo json_encode($tabTache);
?>

(ce code ne m'affiche rien avec json_encode malgré que var_dump m'affiche le bon résultat

<?php
$tabArticle=array();
$sql_tab_art="select DISTINCT(LibArticle) from Article ";
$stmt_tab_art=sqlsrv_query($conn,$sql_tab_art);
//while($row_tab_tache=sqlsrv_fetch_array($stmt_tab_tache, SQLSRV_FETCH_NUMERIC))
while ($row_tab_art=sqlsrv_fetch_array($stmt_tab_art, SQLSRV_FETCH_NUMERIC))
{
array_push($tabArticle, $row_tab_art[0]);
}
//var_dump($tabArticle);
echo json_encode($tabArticle);
?>

Est ce qu'il y a un problème si j'utilise la fonction json_encode plusieurs fois dans un même fichier ? sinon comment je peux dépasser ceci ? Je vous remercie d'avance

3 réponses

Messages postés
30193
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2020
2 982
Bonjour,


en général tu ne fais qu'un seul echo json_encode dans ton fichier....

Le plus simple pour remédier à ton besoin est de stocker des deux tableaux dans un tableau.. et de faire l'écho de celui ci.

<?php
$result = array();

// ta premiere requete
//....


//ta seconde requete
//....


//et à la fin :
$result = array("tabTache"=>$tabTache,"tabArticle"=>$tabArticle);

echo json_encode($result);


Messages postés
127
Date d'inscription
lundi 31 octobre 2016
Statut
Membre
Dernière intervention
20 juin 2017

Merci Jordane pour votre réponse mais en réalité j'aurai besoin de 4 tableaux dans mon fichier, et à chaque fois je dois parcourir un tableau et l'insérer dans la table adéquate dans ma base de données, si je stocke les 4 tableaux dans un seul tableau résultat comment je pourrais distinguer les éléments de chaque table sachant que je ne connais pas à l'avance le nombre d'éléments de chaque tableau ?
Messages postés
3653
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
16 novembre 2020
975
Bonjour,

En cas d'erreur, json_encode renvoie la valeur FALSE, et la fonction json_last_error() permet d'avoir l'explication de l'erreur.
json_last_error() renvoie un code d'erreur dont les valeurs sont explicitées dans la doc : https://www.php.net/manual/en/function.json-last-error.php

Je te suggère donc de tester ton deuxième tableau de cette manière :
<?php
$tabArticle=array();
$sql_tab_art="select DISTINCT(LibArticle) from Article ";
$stmt_tab_art=sqlsrv_query($conn,$sql_tab_art);
//while($row_tab_tache=sqlsrv_fetch_array($stmt_tab_tache, SQLSRV_FETCH_NUMERIC))
while ($row_tab_art=sqlsrv_fetch_array($stmt_tab_art, SQLSRV_FETCH_NUMERIC))
{
    array_push($tabArticle, $row_tab_art[0]);
}
//var_dump($tabArticle);

$resultat = json_encode($tabArticle);
if (false === $resultat)
    echo "Erreur d'encodage JSON ! Code erreur : " . json_last_error();
else
    echo $resultat;
?>


Xavier
Messages postés
3653
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
16 novembre 2020
975
Pardon, la documentation ne donne pas les codes d'erreur numériques...
Donc pour avoir un vrai message d'erreur, utilise cette fonction :
function json_error_string($code)
{
    switch ($code)
    {
        case JSON_ERROR_NONE: return "No error";
        case JSON_ERROR_DEPTH: return "The maximum stack depth has been exceeded";
        case JSON_ERROR_STATE_MISMATCH: return "Invalid or malformed JSON";
        case JSON_ERROR_CTRL_CHAR: return "Control character error, possibly incorrectly encoded";
        case JSON_ERROR_SYNTAX: return "Syntax error";
        case JSON_ERROR_UTF8: return "Malformed UTF-8 characters, possibly incorrectly encoded";
        case JSON_ERROR_RECURSION: return "One or more recursive references in the value to be encoded";
        case JSON_ERROR_INF_OR_NAN: return "One or more NAN or INF values in the value to be encoded";
        case JSON_ERROR_UNSUPPORTED_TYPE: return "A value of a type that cannot be encoded was given";
        case JSON_ERROR_INVALID_PROPERTY_NAME: return "A property name that cannot be encoded was given";
        case JSON_ERROR_UTF16: return "Malformed UTF-16 characters, possibly incorrectly encoded";
    }
}

Si tu n'es pas en php 7 mais inférieur, supprime les deux derniers, ils te mettraient un message d'erreur (ils n'existent pas encore en php 5.x)

Xavier
Messages postés
30193
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2020
2 982
et à chaque fois je dois parcourir un tableau et l'insérer dans la table adéquate dans ma base de données, si je stocke les 4 tableaux dans un seul tableau résultat comment je pourrais distinguer les éléments de chaque table sachant que je ne connais pas à l'avance le nombre d'éléments de chaque tableau


Si tu fais un console.log du retour dans ton ajax tu verras que c'est un objet de la forme
objet.tableau1
objet.tableau2
etc...

Ou pour l'exemple que tu nous as donné
objet.tabTache
objet.tabArticle
....
Chacun de ces objets contenant les différentes variables de tes array.
que tu peux donc parcourir à l'aide de boucles.


Messages postés
127
Date d'inscription
lundi 31 octobre 2016
Statut
Membre
Dernière intervention
20 juin 2017

Bonjour,
je voulais vous tenir au courant sur mon avancement et en même temps je vous demande de m'aider à surmonter le problème que je viens de découvrir:
Concernant la fonction json_encode on peut l'utiliser autant de fois qu'on a besoin dans un seul fichier mais elle ne m'a pas donné de résultat car mes textes contiennent des caractères spéciaux, lorsque j'ai utilisé des textes avec des caractères simples j'obtiens un résultat mais prochainement les utilisateurs de mon application peuvent saisir des textes avec des caractères spéciaux, alors comment je peux traiter ce problème ? comment faire pour que json_encode traite les textes avec des caractères spéciaux?
Je note que j'ai utilisé la fonction utf8_decode(json_encode($result)) mais ça n(a rien donné, avez d'autres solutions à me proposer ? Je vous remercie d'avance
Messages postés
30193
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2020
2 982 >
Messages postés
127
Date d'inscription
lundi 31 octobre 2016
Statut
Membre
Dernière intervention
20 juin 2017

Tu dois avoir tes fichiers php encodés en UTF8 ainsi que ta BDD
Pour ça, applique tout ce qui est noté ici :
https://www.commentcamarche.net/faq/47069-html-php-caracteres-accentues-et-l-utf8