Echo json_encode($tab) n'affiche rien

Résolu/Fermé
abirgl Messages postés 127 Date d'inscription lundi 31 octobre 2016 Statut Membre Dernière intervention 20 juin 2017 - 17 nov. 2016 à 17:19
jordane45 Messages postés 38197 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 mai 2024 - 24 nov. 2016 à 18:11
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
A voir également:

3 réponses

jordane45 Messages postés 38197 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 mai 2024 4 675
17 nov. 2016 à 17:23
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);


0
abirgl Messages postés 127 Date d'inscription lundi 31 octobre 2016 Statut Membre Dernière intervention 20 juin 2017
18 nov. 2016 à 08:27
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 ?
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié par Reivax962 le 18/11/2016 à 09:46
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
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié par Reivax962 le 18/11/2016 à 09:56
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
0
jordane45 Messages postés 38197 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 mai 2024 4 675
18 nov. 2016 à 10:48
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.


0
abirgl Messages postés 127 Date d'inscription lundi 31 octobre 2016 Statut Membre Dernière intervention 20 juin 2017
24 nov. 2016 à 17:17
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
0
jordane45 Messages postés 38197 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 mai 2024 4 675 > abirgl Messages postés 127 Date d'inscription lundi 31 octobre 2016 Statut Membre Dernière intervention 20 juin 2017
24 nov. 2016 à 18:11
Tu dois avoir tes fichiers php encodés en UTF8 ainsi que ta BDD
Pour ça, applique tout ce qui est noté ici :
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
0