Erreur undefined offset
prof_info
Messages postés
9
Statut
Membre
-
prof_info -
prof_info -
Bonjour,
j'aimerais savoir quelle erreur j'ai commis dans le bout de code php suivant qui à travers duquel j'ai essayé de lister le contenu d'un fichier CSV.
Nom du fichier : pers.csv ===> le fichier est placé dans le même dossier que la page de traitement
Contenu du fichier :
==============================
= ab120 = aaaaaa = bbbbbbbbb = 20 =
==============================
= cd250 = gggggg = ddddddddd = 35 =
==============================
= mk570 = qqqqqq = vvvvvvvvvv = 72 =
==============================
= bd984 = nnnnnnn = ppppppppp = 67 =
==============================
le code php traitant ce fichier est comme suit : (page : test.php)
1. <?
2. /* On ouvre le fichier CSV à importer en mode lecture seulement */
3. $fichier="pers.csv";
4.
5. if (file_exists($fichier))
6. $fp = fopen("$fichier", "r");
7. else
8. { /* le fichier CSV n'existe pas */
9. echo "Fichier inexistant!<br>affichage impossible.";
10. exit();
11. }
12.
13. echo "<br><table border='1' width='70%' align='center'>";
14. echo "<tr>";
15. echo "<th> Code </th><th> Nom </th><th> Prénom </th><th> age </th> </tr>";
16.
17. while (!feof($fp)) /* importation du fichier CSV */
18. {
19. /* Tant qu'on n'a pars encore atteint la fin du fichier CSV*/
20. $ligne = fgets($fp,4096); /* On lit une ligne du fichier CSV*/
21.
22. /* On récupère les champs de la ligne lue séparés par ; dans la variable liste : tableau de 4 champs */
23. $liste = explode( ";",$ligne);
24.
25. /* On assigne les variables */
26. $code = $liste[0];
27. $nom = $liste[1];
28. $pren = $liste[2];
29. $age = $liste[3];
30.
31. /* Ajouter un nouvel enregistrement dans le tableau */
32. echo "<tr>";
33. echo "<td> $code </td><td> $nom </td><td> $pren </th><td> $age </td> </tr>";
34. }
35. echo "</table>";
36. echo "<br><h3>affichage terminé, avec succès.</h3>";
37.
38. /* Fermeture */
39. fclose($fp);
40. ?>
les erreurs générées lors de l'exécution de ce code sont :
Notice: Undefined offset: 1 in c:\program files\easyphp1-8\www\excel\test.php on line 27
Notice: Undefined offset: 2 in c:\program files\easyphp1-8\www\excel\test.php on line 28
Notice: Undefined offset: 3 in c:\program files\easyphp1-8\www\excel\test.php on line 29
après avoir généré ces erreurs, le contenu du fichier CSV est affiché correctement.
j'aimerais savoir quelle erreur j'ai commis dans le bout de code php suivant qui à travers duquel j'ai essayé de lister le contenu d'un fichier CSV.
Nom du fichier : pers.csv ===> le fichier est placé dans le même dossier que la page de traitement
Contenu du fichier :
==============================
= ab120 = aaaaaa = bbbbbbbbb = 20 =
==============================
= cd250 = gggggg = ddddddddd = 35 =
==============================
= mk570 = qqqqqq = vvvvvvvvvv = 72 =
==============================
= bd984 = nnnnnnn = ppppppppp = 67 =
==============================
le code php traitant ce fichier est comme suit : (page : test.php)
1. <?
2. /* On ouvre le fichier CSV à importer en mode lecture seulement */
3. $fichier="pers.csv";
4.
5. if (file_exists($fichier))
6. $fp = fopen("$fichier", "r");
7. else
8. { /* le fichier CSV n'existe pas */
9. echo "Fichier inexistant!<br>affichage impossible.";
10. exit();
11. }
12.
13. echo "<br><table border='1' width='70%' align='center'>";
14. echo "<tr>";
15. echo "<th> Code </th><th> Nom </th><th> Prénom </th><th> age </th> </tr>";
16.
17. while (!feof($fp)) /* importation du fichier CSV */
18. {
19. /* Tant qu'on n'a pars encore atteint la fin du fichier CSV*/
20. $ligne = fgets($fp,4096); /* On lit une ligne du fichier CSV*/
21.
22. /* On récupère les champs de la ligne lue séparés par ; dans la variable liste : tableau de 4 champs */
23. $liste = explode( ";",$ligne);
24.
25. /* On assigne les variables */
26. $code = $liste[0];
27. $nom = $liste[1];
28. $pren = $liste[2];
29. $age = $liste[3];
30.
31. /* Ajouter un nouvel enregistrement dans le tableau */
32. echo "<tr>";
33. echo "<td> $code </td><td> $nom </td><td> $pren </th><td> $age </td> </tr>";
34. }
35. echo "</table>";
36. echo "<br><h3>affichage terminé, avec succès.</h3>";
37.
38. /* Fermeture */
39. fclose($fp);
40. ?>
les erreurs générées lors de l'exécution de ce code sont :
Notice: Undefined offset: 1 in c:\program files\easyphp1-8\www\excel\test.php on line 27
Notice: Undefined offset: 2 in c:\program files\easyphp1-8\www\excel\test.php on line 28
Notice: Undefined offset: 3 in c:\program files\easyphp1-8\www\excel\test.php on line 29
après avoir généré ces erreurs, le contenu du fichier CSV est affiché correctement.
A voir également:
- Erreur undefined offset
- Erreur t32 ✓ - Forum Livebox
- Erreur 0x80070643 - Accueil - Windows
- Corriger l'erreur 0x80070643 de la mise à jour KB5034441 de Windows 10 - Accueil - Windows
- Erreur upes 1025 - Forum Téléviseurs
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
5 réponses
Tu es sûr que $liste est bien un tableau?
Je m'y connais pas trop en php mais il ne faudrait pas plutôt faire $liste[] = ?
A mon avis il ne voit qu'un seul élément pour ta variable, c'est pour cela qu'il ne tique pas sur [0] en revanche il n'a pas l'aire de voir plus d'une seule case si tant est que liste est bien sous forme de tableau.
Pour être sûr affiche $liste puis $liste[0] et si les valeurs sont les même alors tu as un problème d'explode je crois.
Je m'y connais pas trop en php mais il ne faudrait pas plutôt faire $liste[] = ?
A mon avis il ne voit qu'un seul élément pour ta variable, c'est pour cela qu'il ne tique pas sur [0] en revanche il n'a pas l'aire de voir plus d'une seule case si tant est que liste est bien sous forme de tableau.
Pour être sûr affiche $liste puis $liste[0] et si les valeurs sont les même alors tu as un problème d'explode je crois.
Bonjour
Ça m'étonnait beaucoup que ton tableau s'affiche correctement.. Alors j'ai essayé ton programme et effectivement, le contenu du fichier n'est pas CSV est affiché correctement. Ça n'est pas possible avec ton programme.
Mais pourquoi ne dis-tu pas tout ? Ta description de ton, problème est fausse : tu ne dis pas qu'il affiche taille=1, mais surtout que les 3 erreurs que tu mentionnes sont répétées 9 fois. Enfin tu dis que ton tableau est correct alors qu'il ne l'est pas : tout est dans la colonne code !
Une prochaine fois, pour obtenir de l'aide, donne une description complète et exacte de ce qui se passe.
Et ne donne pas un programme source avec les numéros de ligne : Comment veux-tu qu'on le recopie pour l'essayer ? Il faut enlever tous les numéros de ligne à la main ! Heureusement que c'est un double post, j'ai repris le programme de ton message d'hier.
Pour en revenir à ton problème, voici la raison. Tu as recopié ce script depuis quelque part sans comprendre comment il marche, tu as modifié, alors tu as obtenu n'importe quoi.
$liste = explode( ";",$ligne); : Cette ligne sert à découper chaque ligne lue de ton fichier au niveau des points-virgules. Or, tu n'as pas de points virgules dans ton fichier : les lignes ne sont pas découpées en champs.
Si tu veux obtenir le bon résultat, il faut que tu découpes au niveau des '='.
Ça va déjà mieux marcher mais ça n'est pas tout. Les lignes faites de ======= ne peuvent pas être traitées comme les autres : elles ne correspondent pas à des informations à afficher et il faut les écarter.
Enfin, pour information, mais ça n'empêche pas ton script de marcher, le csv ce n'est pas ça. Si ton fichier doit vraiment être du CSV, tu ferais mieux d'utiliser les fonctions CSV du PHP, qui traitent correctement, en particulier, le cas où il y aurait un = dans les données.
Ça m'étonnait beaucoup que ton tableau s'affiche correctement.. Alors j'ai essayé ton programme et effectivement, le contenu du fichier n'est pas CSV est affiché correctement. Ça n'est pas possible avec ton programme.
Mais pourquoi ne dis-tu pas tout ? Ta description de ton, problème est fausse : tu ne dis pas qu'il affiche taille=1, mais surtout que les 3 erreurs que tu mentionnes sont répétées 9 fois. Enfin tu dis que ton tableau est correct alors qu'il ne l'est pas : tout est dans la colonne code !
Une prochaine fois, pour obtenir de l'aide, donne une description complète et exacte de ce qui se passe.
Et ne donne pas un programme source avec les numéros de ligne : Comment veux-tu qu'on le recopie pour l'essayer ? Il faut enlever tous les numéros de ligne à la main ! Heureusement que c'est un double post, j'ai repris le programme de ton message d'hier.
Pour en revenir à ton problème, voici la raison. Tu as recopié ce script depuis quelque part sans comprendre comment il marche, tu as modifié, alors tu as obtenu n'importe quoi.
$liste = explode( ";",$ligne); : Cette ligne sert à découper chaque ligne lue de ton fichier au niveau des points-virgules. Or, tu n'as pas de points virgules dans ton fichier : les lignes ne sont pas découpées en champs.
Si tu veux obtenir le bon résultat, il faut que tu découpes au niveau des '='.
Ça va déjà mieux marcher mais ça n'est pas tout. Les lignes faites de ======= ne peuvent pas être traitées comme les autres : elles ne correspondent pas à des informations à afficher et il faut les écarter.
Enfin, pour information, mais ça n'empêche pas ton script de marcher, le csv ce n'est pas ça. Si ton fichier doit vraiment être du CSV, tu ferais mieux d'utiliser les fonctions CSV du PHP, qui traitent correctement, en particulier, le cas où il y aurait un = dans les données.
Merci, toto
je crois que tous les programmeurs utilisent les codes écrits par d'autres personnes en les modifiant à leur mesure. est ce que j'avais tort quand je le fasse.
concernant le fichier que je suis en train d'utiliser(découper) c'est vraiment un fichier CSV que j'ai enregistré avec Excel2007 de cette façon : CSV(séparateur : point-virgule ;)(*.csv).
et c'est pour cette raison que j'ai fait l'explode selon les ';' et non pas au niveau des '=' car les lignes faites de ======= : ne sont qu'une simple représentation pour vous montrer bien le continu de mon fichier CSV qui contient 4 lignes et 5 colonnes dont la description est la suivante :
ab120 aaaaaa bbbbbbbbb 20
cd250 gggggg ddddddddd 35
mk570 qqqqqq vvvvvvvvvv 72
bd984 nnnnnnn ppppppppp 67
je t'informe que j'ai cité les numéros de lignes à titre explicatif pour te montrer lesquelles sont sources d'erreurs.
enfin mes sincères gratitudes.
je crois que tous les programmeurs utilisent les codes écrits par d'autres personnes en les modifiant à leur mesure. est ce que j'avais tort quand je le fasse.
concernant le fichier que je suis en train d'utiliser(découper) c'est vraiment un fichier CSV que j'ai enregistré avec Excel2007 de cette façon : CSV(séparateur : point-virgule ;)(*.csv).
et c'est pour cette raison que j'ai fait l'explode selon les ';' et non pas au niveau des '=' car les lignes faites de ======= : ne sont qu'une simple représentation pour vous montrer bien le continu de mon fichier CSV qui contient 4 lignes et 5 colonnes dont la description est la suivante :
ab120 aaaaaa bbbbbbbbb 20
cd250 gggggg ddddddddd 35
mk570 qqqqqq vvvvvvvvvv 72
bd984 nnnnnnn ppppppppp 67
je t'informe que j'ai cité les numéros de lignes à titre explicatif pour te montrer lesquelles sont sources d'erreurs.
enfin mes sincères gratitudes.
Salut arth,
quand j'affiche $liste puis $liste[0] il me donne respectivement comme résultat : Array ab120.
pour l'explode au niveau des ';' c'est justifié vue que mon fichier a été enregistré comme suit :
CSV(séparateur : point-virgule ;)(*.csv)..
Merci beaucoup.
quand j'affiche $liste puis $liste[0] il me donne respectivement comme résultat : Array ab120.
pour l'explode au niveau des ';' c'est justifié vue que mon fichier a été enregistré comme suit :
CSV(séparateur : point-virgule ;)(*.csv)..
Merci beaucoup.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pourquoi nous donnes-tu un fichier avec des = si ce sont des ; ? J'ai essayé de comprendre d'après les éléments que tu avais donnés, ils étaient faux, tu m'as fait perdre mon temps en même temps que le tien.
Et dans ton message 3, il n'y a plus ni =, ni ; pour séparer les champs.
Tu parles de fichier de 4 lignes et 5 colonnes. Pourquoi dis-tu et 5 colonnes alors que partout on n'en voit que 4 ?
Pas facile de te suivre !
Avec ce nouvelles données, j'ai reproduit le problème avec la série de 3 messages d'erreurs affichée une seule fois. Cela vient simplement du fait que fgets essaye de lire une ligne au-delà de la fin du fichier.
Pour éviter cela, ne traite pas les lignes de longueur 0.
Mais de toutes manières, je répète ce que j'ai dit plus haut, traiter les fichier CSV à l'aide d'explode est une erreur. Sauf si tu es sûr que tes champs ne contiendront jamais de ;. Il faut utiliser les fonctions csv du PHP, elles sont faites pour ça.
Et dans ton message 3, il n'y a plus ni =, ni ; pour séparer les champs.
Tu parles de fichier de 4 lignes et 5 colonnes. Pourquoi dis-tu et 5 colonnes alors que partout on n'en voit que 4 ?
Pas facile de te suivre !
Avec ce nouvelles données, j'ai reproduit le problème avec la série de 3 messages d'erreurs affichée une seule fois. Cela vient simplement du fait que fgets essaye de lire une ligne au-delà de la fin du fichier.
Pour éviter cela, ne traite pas les lignes de longueur 0.
Mais de toutes manières, je répète ce que j'ai dit plus haut, traiter les fichier CSV à l'aide d'explode est une erreur. Sauf si tu es sûr que tes champs ne contiendront jamais de ;. Il faut utiliser les fonctions csv du PHP, elles sont faites pour ça.