Bonjour,

J'apprends PHP et je travail sur un exercice du cours php de grafikart sur les fichiers.
Voila, j'obtiens un message "Notice: Undefined offset: 1 in C:\wamp64\www\cours\fich\plats2.php on line 9".

Ce que je fais

Je précise que dans mon fichier csv, si $tab[1] existe, alors $tab[0] et $tab[2] existent ausi.

Je pose la condition suivante :
Si $tab[1] existe, affiche $tab[0] et $tab[2]., sinon, affiche seulement $tab[0] .

<?php
$fichier = __DIR__ . DIRECTORY_SEPARATOR .'menu.csv';
$open = fopen ($fichier, 'r');
$tab = fgetcsv ( $open, ",",";");
?>
<h2><?php print_r ($tab[0]); ?></h2>
<?php while ($tab[0] !== NULL) { 
     $tab = fgetcsv ( $open, ",",";");
          if ($tab[1] == TRUE) { ?>
               <li>
                    <?php
                    print_r ($tab[0]); 
                    echo ' - ';
                    print_r ($tab[2]);
                    echo ' €';
                    ?>
               </li>
               <h6><?php print_r ($tab[1]); ?></h6>
          <?php } 
          else { ?>
          <h2>
          <?php
               print_r ($tab[0]);   
          }
          ?>
          </h2>
<?php }  
fclose($open) 
?>
</div>

Ce que je veux

Je ne veux plus voir ce message.

Ce que j'obtiens

Je comprends ce message mais je ne comprends pas pourquoi il s'affiche, parce qe si le IF n'est pas possible, il y a le ELSE qui rentre en jeu alors pourquoi ce message et comment faire pour qu'il ne s'affiche pas ?
Le résultat recherché est OK sauf ce message qui s'affiche.

4 réponses


hars
Auteur

C'est bon, j'ai trouvé une solution de remplacement.
J'ai remplacé if ($tab[1] == TRUE) par if (!empty ($tab[1]).

Je ne vois plus mon message d'erreur mais cela ne répond pas néanmoins à ma question d'origine...

Salut,

Tu as ce message d'erreur car quand tu test une égalité, il essaye d'accéder à la valeur contenu dans l'index 1, si cet index n'existe pas il te renvoie une erreur ( ce qui est normal ).
Pour tester si une variable est bien définie on utilise la fonction isset ou en effet la fonction empty si tu veux en plus vérifier que ta variable ne soit pas vide

hars
Auteur

Merci pour ces conseils Narshe, j'avais déjà oublié ce isset... Rhoooooo.
Bah oui, avec une explication, c'est tout de suite compréhensible...

Merci encore :-)

Bonjour,
Alors déjà, la fonction fgetcsv ne s'utilise pas comme ça, le deuxième paramètre est un entier et pas un caractère : https://www.php.net/manual/fr/function.fgetcsv.php
Ensuite, dans cette même doc, tu trouveras des exemples d'uilisations, par exemple ta ligne
while ($tab[0] !== NULL) {
deviendrait
while ($tab !== false {
voir même :
while ( ($tab = fgetcsv($open,0,';') ) !== FALSE ) {

Concernant ton message d'erreur, tu fais un
if ($tab[1] == TRUE) {
ou $tab[1] est une chaine de caractères, le comparer à un booléen n'est pas forcement la meilleure chose, un isset serait effectivement plus approprié comme le disait narshe plus haut.

Et une dernière chose, en HTML pas de li sans ul normalement.

Essaies ces petits changements et reviens nous dire si ça fonctionne.