IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Gestion d'un tableau à partir d'un json [PHP 7]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Par défaut Gestion d'un tableau à partir d'un json
    Bonjour à vous, je me permet de venir vers vous car j'ai un petit souci, je suis actuellement en train de créer une petite appli web qui me récupère des données en base pour les afficher dans un tableau. Il s'agit en faite de nom de machine virtuelles qui peuvent être réservé par des utilisateurs donc on peu insérer des donnée en base aussi à partir de ce tableau. J'ai donc créer une petite api rest en php qui gère mes appels et mes écritures en base. Bon pour l'instant j'arrive à récupérer mes données sous forme d'un json, voici l'exemple d'un de mes json (je l'ai fortement réduit car sinon il est beaucoup trop long) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    {
    	"success": true,
    	"message": "Voici nos donn\u00e9es",
    	"user": {
    		"environnement": [{
    				"envir_Id": "1",
    				"0": "1",
    				"application": "SGG1",
    				"1": "SGG1",
    				"environnement": "PRODUCTION",
    				"2": "PRODUCTION",
    				"compte": "guide",
    				"3": "guide",
    				"base": "SGGTRT",
    				"4": "SGGTRT",
    				"user_Id": null,
    				"5": null,
    				"used": "0",
    				"6": "0"
    			}, {
    				"envir_Id": "2",
    				"0": "2",
    				"application": "SGG",
    				"1": "SGG",
    				"environnement": "HOMOLOGATION",
    				"2": "HOMOLOGATION",
    				"compte": "user12",
    				"3": "user12",
    				"base": "SGGTRT",
    				"4": "SGGTRT",
    				"user_Id": null,
    				"5": null,
    				"used": "0",
    				"6": "0"
    			}, {
    				"envir_Id": "3",
    				"0": "3",
    				"application": "SGG",
    				"1": "SGG",
    				"environnement": "HOMOLOGATION",
    				"2": "HOMOLOGATION",
    				"compte": "guide2",
    				"3": "guide2",
    				"base": "SGGTRT",
    				"4": "SGGTRT",
    				"user_Id": null,
    				"5": null,
    				"used": "0",
    				"6": "0"
    			}
    		]
    	},
    	"environnement": null,
    	"version": null
    }
    Et le code qui permet de l'obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
     
    include 'header.php';
     
    //Récupération de la liste des environnements présents en base
    $env = $pdo->prepare("SELECT * from environnement");
    $env->execute();
    $allEnv = $env->fetchAll();
     
    $envir["environnement"] = $allEnv;
     
    return_json(true, "Voici nos données", $envir);
    ?>
    Avec le header du coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?php
     
    header('Content-Type: application/json');
     
    try
    {	//Connexion à la base de donnée
    	$pdo = new PDO('mysql:host=localhost;dbname=ihm_env', 'root', '');
     
    }catch(Exception $e)
    {
    	return_json(false, "Connexion à la base donnée impossible");
    }
    function return_json($success, $msg, $users=NULL, $envir=NULL, $versions=NULL)
    {
    	$retour["success"] = $success;
    	$retour["message"] = $msg;
    	$retour["user"] = $users;
    	$retour["environnement"] = $envir;
    	$retour["version"] = $versions;
     
    	echo json_encode($retour);
    }
    ?>
    Maintenant quand je souhaite exploiter ce json pour mettre en forme les informations présente à l'intérieur dans mon tableau, je fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
     
    $json = file_get_contents("http://localhost/api/envir.php");
    $jsonEnvir = utf8_encode($json);
    $envir = json_decode($jsonEnvir);
     
     
    var_dump($envir);
     
    ?>
    Et voilà ce que j'obtiens (celui-ci aussi du coup je l'ai réduit) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    object(stdClass) # 1(5) {
    	["success"] => bool(true)["message"] => string(18)"Voici nos données"["user"] => object(stdClass) # 23(1) {
    		["environnement"] => array(21) {
    			[0] => object(stdClass) # 2(14) {
    				["envir_Id"] => string(1)"1"["0"] => string(1)"1"["application"] => string(4)"SGG1"["1"] => string(4)"SGG1"["environnement"] => string(10)"PRODUCTION"["2"] => string(10)"PRODUCTION"["compte"] => string(5)"guide"["3"] => string(5)"guide"["base"] => string(6)"SGGTRT"["4"] => string(6)"SGGTRT"["user_Id"] => NULL["5"] => NULL["used"] => string(1)"0"["6"] => string(1)"0"
    			}
    			[1] => object(stdClass) # 3(14) {
    				["envir_Id"] => string(1)"2"["0"] => string(1)"2"["application"] => string(3)"SGG"["1"] => string(3)"SGG"["environnement"] => string(12)"HOMOLOGATION"["2"] => string(12)"HOMOLOGATION"["compte"] => string(6)"user12"["3"] => string(6)"user12"["base"] => string(6)"SGGTRT"["4"] => string(6)"SGGTRT"["user_Id"] => NULL["5"] => NULL["used"] => string(1)"0"["6"] => string(1)"0"
    			}
    			[2] => object(stdClass) # 4(14) {
    				["envir_Id"] => string(1)"3"["0"] => string(1)"3"["application"] => string(3)"SGG"["1"] => string(3)"SGG"["environnement"] => string(12)"HOMOLOGATION"["2"] => string(12)"HOMOLOGATION"["compte"] => string(6)"guide2"["3"] => string(6)"guide2"["base"] => string(6)"SGGTRT"["4"] => string(6)"SGGTRT"["user_Id"] => NULL["5"] => NULL["used"] => string(1)"0"["6"] => string(1)"0"
    			}
    		}
    	}
    	["environnement"] => NULL["version"] => NULL
    }
    Du coup je ne trouve pas comment exploiter ces données sous cette forme.

    Pourriez-vous m'aider s'il vous plait ??

    Merci d'avance

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Ben, ton decode te retourne un objet, donc il faut que tu l'utilises comme tel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $envir = json_decode($jsonEnvir);
    echo "Succès : ".$envir->success."<br>";
    echo "Message : ".$envir->message."<br>";
    foreach ($envir->user-environnement as $env){
        echo "Environnement du user : ".$env->envir_Id."<br>";
    }
    Si tu préfères travailler avec des tableaux, il suffit d'ajouter un paramètre à la fonction json_decode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $envir = json_decode($jsonEnvir, true);
    Au passage, je te conseille de préciser le mode de récupération des données dans ton appel à fetch, histoire de ne pas trimbaler des données en double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $env = $pdo->prepare("SELECT * from environnement");
    $env->execute();
    $allEnv = $env->fetchAll(PDO::FETCH_ASSOC);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Par défaut
    Merci Celira, du coup tes conseils m'ont beaucoup aidés, j'ai donc réussi à récupérer les infos de mon json. Malheureusement une petite chose me chiffonnes, j'ai utiliser un tableau et donc je souhaite récupérer chaque élément de mon json et les mettre dans un tableau pour les afficher, du coup j'utilise ça en se qui concerne l'exploitation des données de mon json :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $envirJson = file_get_contents("http://localhost/api/envir.php");
    $jsonEnvir = utf8_encode($envirJson);
    $envir = json_decode($jsonEnvir, true);
    foreach ($envir['Environ'] as $key => $value)
    {
        $app = $value['application'];
        $enviName = $value['environnement'];
        $cpt = $value['compte'];
        $base = $value['base'];
    }
    Et donc pour afficher les données je fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <td><?php echo $app; ?></td>
    <td><?php echo $enviName; ?></td>
    <td><?php echo $cpt; ?></td>
    <td><?php echo $base; ?></td>
    Ceci me renvoi uniquement la dernière valeur pour chaque variable dans mon tableau et perso je souhaiterai afficher chaque groupe de valeurs dans une nouvelle ligne de mon tableau, j'ai essayer avec un fetch() sur chacune de mes variable ($app, $enviName, $cpt et $base) mais ça ne fonctionne pas j'ai une erreure : Call to a member function fetch() on string. Si c'est possible de m'aider sur ça aussi svp !!?

    Merci d'avance

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Pour être sûre : tu fais l'affichage du <td> à l'extérieur du foreach ? Dans ce cas, c'est normal : chaque tour de boucle écrase les variables avec la ligne, et du coup, lorsque tu sors du foreach, les données qui restent dans les variables sont celles de la dernière ligne de la boucle.
    Il faut donc déplacer l'affichage à l'intérieur du foreach ou bien construire un nouveau tableau dans ce foreach pour boucler dessus ensuite au moment de l'affichage.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Par défaut
    Désolé mais en faite il se trouve que ta méthode marche enfin prèsque, le fait est que maintenant je me retrouve avec la premier élément au lieu du dernier se qui est un bon début, mais à chaque fois que j'essai d'utiliser un fetch() pour récupérer chaque valeurs ça me claque une erreur : Uncaught Error: Call to a member function fetch() on string. Du coup j'en suis là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <table>
                <tr>
                    <th>APPLICATION</th>
                    <th>ENVIRONNEMENT</th>
                    <th>COMPTE</th>
                    <th>BASE</th>
                    <th>VERSION</th>
                    <th>UTILISATEUR</th>
                    <th>DUREE D'UTILISATION</th>
                    <th>PRENDRE/RELACHER</th>
                </tr>                
     
                <?php foreach ($envir['Environ'] as $key => $value)
                { 
                ?>
                <tr>
                    <form action="traitement.php" method="post">
                        <td><?php echo $value['application']; ?></td>
                        <td><?php echo $value['environnement']; ?></td>
                        <td><?php echo $value['compte']; ?></td>
                        <td><?php echo $value['base']; ?></td>
    Je comprend pas pourquoi il ne me récupère pas une valeur à chaque occurrence de mon foreach, je rate peut-être quelque chose !??

    Merci d'avance encore une fois ! ! !

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Par défaut
    Ok en faite c'est bon c'est la suite de mon code qui empêchait la récupération de chaque valeur, donc merci encore à toi de m'avoir aidé.

    Bonne continuation

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo