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 :

Variable JSON en Undefined index


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable d’équipe
    Inscrit en
    Août 2003
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable d’équipe

    Informations forums :
    Inscription : Août 2003
    Messages : 27
    Points : 23
    Points
    23
    Par défaut Variable JSON en Undefined index
    Salux à tous !

    Je suis en auto-apprentissage avec un projet personnel et je pèche sur un point, dont je ne comprends pas pourquoi cela ne fonctionne pas.

    Voici l'erreur que j'ai actuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PHP Notice: Undefined index: age in /home/****/public_html/test.php on line 48
    Voici mon code :
    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
    <?php
      // Mon JSON avec un manque en [2] car il n'y a pas l'age
      $json = '{
       "participants":[
          {
             "nom":"ADORABLE",
             "num":1,
             "age":5,
             "sexe":"HONGRES"
          },
          {
             "nom":"BRISE",
             "num":2,
             "age":6,
             "sexe":"MALES"
          },
          {
             "nom":"TARTE",
             "num":3,
             "sexe":"FEMMES"
          },
          {
             "nom":"FRAISE",
             "num":4,
             "age":4,
             "sexe":"MALES"
          }
       ]
    }';
      // Décodage du JSON en mode array
      $json_tableau = json_decode($json,true);
      // Déclaration de la variable de mise en page
      $output = "";
      // fonction qui contrôle si la variable est définit
      function var_controle($a)
      {
        if (isset($a)) {
          $b = $a;
        }else {
          $b = "nc";
        }
        return $b;
      }
      // Boucle de mise en page
      foreach ($json_tableau['participants'] as $tableau) {
        $output .= "<h1>".var_controle($tableau['num'])."</h1>";
        $output .= "<h2>".var_controle($tableau['nom'])."</h2>";
        $output .= "<h2>".var_controle($tableau['age'])."</h2>";
        $output .= "<h2>".var_controle($tableau['sexe'])."</h2>";
      }
      // Affiche de la mise en page
      echo $output;
    ?>
    Je sais que si je ne fait pas de fonction var_controle, mais un contrôle sur chacun des variables, je n'ai plus de problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Boucle de mise en page
      foreach ($json_tableau['participants'] as $tableau) {
        $output .= "<h1>".var_controle($tableau['num'])."</h1>";
        $output .= "<h2>".var_controle($tableau['nom'])."</h2>";
        if (isset($tableau['age'])) {
          $age = $tableau['age'];
        }else {
          $age = "nc";
        }
        $output .= "<h2>".$age."</h2>";
        $output .= "<h2>".var_controle($tableau['sexe'])."</h2>";
    Pourquoi ma fonction ne fonctionne pas ?

    Cordialement,
    GaLaGaNN

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    l'erreur se déclenche parce que la case du tableau n'existe pas au moment de l'appel de la fonction

    tu pourrais par exemple faire une boucle comme ça :
    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
    // Déclaration de la variable de mise en page
    $output = "";
     
    foreach ($json_tableau['participants'] as $tableau) {
     
        foreach (["num", "nom", "age", "sexe"] as $champ) {
     
            // contrôle si la variable est définie
            $valeur = !isset($tableau[$champ]) ? "nc" : $tableau[$champ];
     
            // mise en page
            $balise = ("num" === $champ) ? "h1" : "h2";
     
            $output .= "<$balise>$valeur</$balise>";
        }
    }
     
    // Affiche de la mise en page
    echo $output;

  3. #3
    Membre à l'essai
    Homme Profil pro
    Responsable d’équipe
    Inscrit en
    Août 2003
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable d’équipe

    Informations forums :
    Inscription : Août 2003
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    Merci pour cette exemple mathieu, je ne connaissais pas cette mise en forme.

    Par contre, avec ce genre de programmation (avec ton exemple), il est possible de faire du formatage comme du monétaire, calcule entre variable ?

    Cordialement,
    GaLaGaNN

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    Citation Envoyé par galagann Voir le message
    il est possible de faire du formatage comme du monétaire, calcule entre variable ?
    oui, tu peux utiliser n'importe quel traitements dans la boucle.
    par exemple la mise en forme d'un nombre peut se faire avec la fonction http://php.net/number_format.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Responsable d’équipe
    Inscrit en
    Août 2003
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable d’équipe

    Informations forums :
    Inscription : Août 2003
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    Merci mathieu pour cette aide précieuse.

    Je regarde pour appliquer cette méthode à quelque chose de plus complexe, mais cela m'a permis d'apprendre l'opérateur ternaire.

    Cordialement,
    GaLaGaNN

Discussions similaires

  1. Notice: Undefined index & Variable
    Par MTHYC dans le forum Langage
    Réponses: 3
    Dernier message: 05/03/2012, 08h01
  2. Notice Undefined index et Undefined variable
    Par BRUNO71 dans le forum Langage
    Réponses: 31
    Dernier message: 15/08/2011, 15h03
  3. [Noob] Undefined index: id
    Par Devil666 dans le forum Langage
    Réponses: 4
    Dernier message: 08/12/2005, 13h00
  4. Undefined index
    Par sebduduf dans le forum Langage
    Réponses: 5
    Dernier message: 02/11/2005, 12h13
  5. Erreur de "Undefined index" sur HTTP_REFERER
    Par guy2004 dans le forum Langage
    Réponses: 4
    Dernier message: 12/10/2005, 12h21

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