PB: "Undefined offset"

Eléphanteau du PHP | 13 Messages

28 juin 2007, 11:53

Voici mon script:
<?php

$i = 1;

for($k=1;$k<=7;$k++)
{
 $label[$k] = "";
 $RAM[$k] = 0;
 $date[$k] = 0;
 $heure[$k] = 0;
}

$fichier = fopen("test.csv","r");

while (!feof($fichier))
{
$donnees = fgets($fichier,4096);
list($label[$i], $RAM[$i], $date[$i], $heure[$i]) = explode(",",$donnees);  // ligne 24
$i++;
}

fclose($fichier);

// etc. 

?>
Lorsque je l'exécute j'ai les message d'erreur suivants:

Code : Tout sélectionner

Undefined offset :3 in c:\chemin-d'accès on line 24 Undefined offset :2 in c:\chemin-d'accès on line 24 Undefined offset :1 in c:\chemin-d'accès on line 24
Je comprends pas popurquoi j'ai ces erreurs.
J'ai pourtant pris soin d'initialiser les variables.

Avez-vous une explication.

Merci d'avance.
" A 1 erreur attribuée à l'ordinateur, il y a au moins 2 erreurs humaines, la première étant d'attribuer l'erreur à la machine. "

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juin 2007, 11:56

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "Débuter en PHP".

Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.

De plus, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juin 2007, 12:03

Dit nous quelle est la ligne 24 de ton fichier ? ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 juin 2007, 12:09

euh... il l'a indiqué par un commentaire dans le code sa ligne 24 ;)

Essaye de l'écrire ainsi pour débuger :
list($label[$i], 
  $RAM[$i], 
  $date[$i], 
  $heure[$i]
) = explode(",",$donnees);  // ligne 24 
on saura sur quel élément il bloque... affiche également la valeur de $i

Ce qui est bizare c'est que tu devrais avoir à la suite 4 fois le message d'alert pour un même offset et pas 3 offset différents à la suite... et surtout, tu devrais les avoir du 1 au 3 et non du 3 au 1 ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 13 Messages

28 juin 2007, 12:18

je viens de mettre en forme et le problème viendrait du explode...
" A 1 erreur attribuée à l'ordinateur, il y a au moins 2 erreurs humaines, la première étant d'attribuer l'erreur à la machine. "

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 juin 2007, 12:30

Tes lignes contiennent-elles toujours 4 paramètres séparés par des virgules ? ou arrive-t-il que certaines lignes ne soient pas complètes ? genre "label,RAM" au lieu de "label,RAM,," ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 13 Messages

28 juin 2007, 12:34

elles contiennent toutes 4 "éléments" séparés par une virgule.
Je viens d'essayer avec la fonction split et j'ai les mêmes messages, dans le même ordre.
" A 1 erreur attribuée à l'ordinateur, il y a au moins 2 erreurs humaines, la première étant d'attribuer l'erreur à la machine. "

Eléphant du PHP | 259 Messages

28 juin 2007, 13:43

hello,

si le but du jeu c'est de charger un fichier csv, tu as fgetcsv() qui fait cela très bien... pas besoin de se prendre la tete avec des explode etc.

Eléphanteau du PHP | 13 Messages

28 juin 2007, 14:13

Merci Jules !
J'ai réussi à m'en sortir avec ta fonction :D
Merci aussi à Ryle et Zeus pour avoir réfléchi à mon pb.
" A 1 erreur attribuée à l'ordinateur, il y a au moins 2 erreurs humaines, la première étant d'attribuer l'erreur à la machine. "