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

PHP & Base de données Discussion :

Notice: Undefined offset: 3 [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 28
    Points : 28
    Points
    28
    Par défaut Notice: Undefined offset: 3
    Bonjour à tous, je rencontre un petit soucis sur mon code php. Je dois à partir d'une api intégrer des valeurs sur mon site web (voici l'api en question : http://145.239.32.254:8081/pokemon/types).
    Donc tout s'intègre parfaitement jusqu'à la valeur "attaques" qui contient plusieurs données selon les types.

    Je n'arrive vraiment pas à trouver le problème. Malgré de nombreuses recherches et tuto sur la question.
    Mes attaques s'affiche sur ma page.
    Mais ce message d'erreur persiste.
    Si quelqu'un à la solution, j'en serais ravi ! Voici mon code :

    Code php : 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
    <?php 
            // create curl resource 
            $ch = curl_init(); 
     
            // set url 
            curl_setopt($ch, CURLOPT_URL, "http://145.239.32.254:8081/pokemon/types"); 
     
            //return the transfer as a string 
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     
            // $output contains the output string 
            $output = curl_exec($ch); 
     
            // close curl resource to free up system resources 
            curl_close($ch);   
     
            $json = json_decode($output, true);
     
     
            for ($i=0;$i < sizeOf($json); $i++) {
     
            echo "<div class='col-md-12 col-sm-12 col-xs-12 product-title'><h1> Nom : "  .$json[$i]['nom']. ".</h1></div>
            
            <div class='col-md-12 col-sm-12 col-xs-12 product-description'><p>id :" .$json[$i]['id']. ".</p></div>
            
            <div class='col-md-12 col-sm-12 col-xs-12 product-cart'><div class='row'><div class='col-md-6 col-sm-12 col-xs-6'><p> Caractéristique : "  .$json[$i]['caractéristique'].".</p></div>
            
            <div class='col-md-12 col-sm-12 col-xs-12 product-cart'><div class='row'><div class='col-md-6 col-sm-12 col-xs-6'><p> Attaques :  "; 
     
            for($j=0;$j < sizeOf($json[$i]);$j++){
                echo $json[$i]['attaques'][$j];
     
            }
     
            echo "</p></div></div></div></div></div>";
     
     
     
        } ?>

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    C'est for($j=0;$j < sizeOf($json[$i]);$j++) qui ne va pas. Tu ne veux pas la taille du tableau $json[$i] mais celle du tableau $json[$i]['attaques'].

    Maintenant, personne n'utilise sizeOf() dans la vraie vie (on utilise plutôt count(), ce n'est pas trés grave), mais par contre ce qui est sûr c'est que pour boucler sur un tableau, on utilise foreach et non pas une boucle for, ce qui est nettement plus pratique, simple et rapide.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 28
    Points : 28
    Points
    28
    Par défaut Notice: Undefined offset: 3
    Salut CosmoKnacki ! Je te remercie de ton aide. C'était tellement logique en faite !
    Je sais bien qu'on utilise plus sizeof() mais l'exo en question nous demande d'avoir recours à sizeof (me demande pas pourquoi, caprice de prof je suppose).
    Je suis d'accord pour le foreach mais dans mon cas seul le for fonctionne !
    Mais merci en tout cas de ton aide !
    Je te souhaite un agréable week-end.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Quelques précisions...

    1- PHP - sizeof() est un alias de count().
    On utilisera donc de préférence count().

    Tu pourras le dire à ton prof.

    2-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ( $i=0;$i < count($array); $i++ ) {
    Là, le count (ou sizeof) va s'effectuer à chaque tour de boucle. Pas bon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $i_max = count($array); // le count ne se fait qu'une fois pour toutes
    for ( $i=0;$i < $i_max; $i++ ) {
    3- utilisation de foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $i_max = count($array);
    for ( $i=0;$i < $i_max; $i++ ) {
       $array[$i].....
    est équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach ( $array as $i => $elt ) {
       $elt..... // $elt est équivalent à $array[$i]
    4- PHP - AVANTAGE MAJEUR de foreach sur for :
    • l'array peut avoir des "trous" : il peut manquer des index (ex. : 0, 1, 12, 14, 53,...), auquel cas for ne fonctionnera pas !
    • l'array peut avoir des index NON-numériques : (ex. 'pierre', 'paul', jacques',...), auquel cas for ne fonctionnera pas non plus !

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par corentinJacob Voir le message
    l'exo en question nous demande d'avoir recours à sizeof (me demande pas pourquoi, caprice de prof je suppose).
    Je crois savoir la réponse, il s'agit probablement d'exercices conçus pour le langage C qui ont été par la suite adaptés pour le PHP (sizeof() vient tout droit du langage C). Il en va de même pour le parcours de tableau qui se fait de cette manière en C.

    Je suis d'accord pour le foreach mais dans mon cas seul le for fonctionne !
    Ormis la contrainte d'utiliser sizeof, foreach fait trés bien l'affaire:
    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
     
    foreach($json as $pok) {
        echo '<div class="col-md-12 col-sm-12 col-xs-12 product-title"><h1> Nom : ', $pok['nom'], '.</h1></div>',
             '<div class="col-md-12 col-sm-12 col-xs-12 product-description"><p>id :', $pok['id'], '.</p></div>',
             '<div class="col-md-12 col-sm-12 col-xs-12 product-cart"><div class="row"><div class="col-md-6 col-sm-12 col-xs-6"><p> Caractéristique : ',
             $pok['caractéristique'], '.</p></div>',
             '<div class="col-md-12 col-sm-12 col-xs-12 product-cart"><div class="row"><div class="col-md-6 col-sm-12 col-xs-6"><p> Attaques :  ';     
     
    /*
        foreach($pok['attaques'] as $attaque) {
            echo $attaque;
        }
    */
     
    // ou mieux
        echo implode(',', $pok['attaques']);
     
        echo "</p></div></div></div></div></div>";
    }
    [edit]J'ai encore été trop lent.[/edit]
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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

Discussions similaires

  1. [MySQL] Notice: Undefined offset
    Par gaetanc15 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/04/2009, 16h16
  2. [Tableaux] Notice: Undefined offset
    Par KOogar dans le forum Langage
    Réponses: 16
    Dernier message: 02/02/2008, 02h44
  3. [Système] Notice: Undefined offset
    Par noname_971 dans le forum Langage
    Réponses: 2
    Dernier message: 22/01/2008, 14h02
  4. [Tableaux] Notice: Undefined offset: 5 in
    Par fast462 dans le forum Langage
    Réponses: 3
    Dernier message: 30/05/2007, 10h08
  5. erreur: "Notice: Undefined offset:"
    Par Sh1v3r dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2006, 22h48

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