Notice: Undefined offset: 5 in f:......script.php on line 40 Ce qui correspond à cette ligne : $dataPair=explode(",",$line[$i]);
Une idée?
avec $i=0; et while($i <= sizeof($line)
tu tombe dans la situation suivante, si $line (qui est un tableau si j'ai bien suivi) est vide, la condition sera vrai malgré tout, ce qui signifie que tu essayeras de faire un explode sur une valeur NULL ce qui est interdit.
tu peux corriger soit par $i = 1; while($i <= sizeof($line)
ou
par $i = 0; while($i < sizeof($line);
qui plus est puisque le but est d'explorer un tableau j'aurais personnellement procédé ainsi:
$auth = 2; foreach($line as $value) { $tmp =(!empty($value))?explode(',',$value):'';
if(!empty($tmp) AND ($tmp[0] == $login)) $auth = 1; }
Notice: Undefined offset: 5 in f:......script.php on line 40
Ce qui correspond à cette ligne : $dataPair=explode(",",$line[$i]);
Une idée?
avec $i=0; et while($i <= sizeof($line)
tu tombe dans la situation suivante, si $line (qui est un tableau si
j'ai bien suivi) est vide, la condition sera vrai malgré tout, ce qui
signifie que tu essayeras de faire un explode sur une valeur NULL ce qui
est interdit.
tu peux corriger soit par $i = 1; while($i <= sizeof($line)
ou
par $i = 0; while($i < sizeof($line);
qui plus est puisque le but est d'explorer un tableau j'aurais
personnellement procédé ainsi:
$auth = 2;
foreach($line as $value)
{
$tmp =(!empty($value))?explode(',',$value):'';
if(!empty($tmp) AND ($tmp[0] == $login))
$auth = 1;
}
Notice: Undefined offset: 5 in f:......script.php on line 40 Ce qui correspond à cette ligne : $dataPair=explode(",",$line[$i]);
Une idée?
avec $i=0; et while($i <= sizeof($line)
tu tombe dans la situation suivante, si $line (qui est un tableau si j'ai bien suivi) est vide, la condition sera vrai malgré tout, ce qui signifie que tu essayeras de faire un explode sur une valeur NULL ce qui est interdit.
tu peux corriger soit par $i = 1; while($i <= sizeof($line)
ou
par $i = 0; while($i < sizeof($line);
qui plus est puisque le but est d'explorer un tableau j'aurais personnellement procédé ainsi:
$auth = 2; foreach($line as $value) { $tmp =(!empty($value))?explode(',',$value):'';
if(!empty($tmp) AND ($tmp[0] == $login)) $auth = 1; }
Notice: Undefined offset: 5 in f:......script.php on line 40
Suppose que ton tableau $line ne contient qu'un élément, sizeof renvoit 1, par contre l'index de cet élément dans ton tableau est 0.
Tu vas donc rentrer dans la boucle à la première passe puisque $i=0 bien inférieure ou égale à ton sizeof
Arrivé à la fin tu incrément $i qui devient 1, rebranchement sur ta condition while, tu vas de nouveau rentrer dans la boucle puisque $i est cette fois = à sizeof($line), mais $line[1] n'existe pas, tu n'avais qu'une valeur dans ton tableau indexée $line[0], d'ou erreur sur la ligne suivante qui tente d'accéder à un index de tableau inexistant.
De la même manière tu as une erreur de logique, puisqu'au cas ou sizeof($line) te renvoit 0 (tableau vide) tu procède quand même au traitement dans la boucle.
Enfin, tu demandes à PHP de recalculer la taille de $line qui ne ne varie pas à chaque itération.
1ère solution :
$i=-1; $max=sizeof($line); while($i<$max){ $i++; le reste de ton code.... }
2ème solution qui en fait est la plus adaptée, te pencher dans la documentation sur la structure For each qui est tout spécialement adaptée à l'examen séquentiel d'un tableau et évite d'avoir à utiliser un compteur d'index.
Notice: Undefined offset: 5 in f:......script.php on line 40
Suppose que ton tableau $line ne contient qu'un élément, sizeof renvoit 1,
par contre l'index de cet élément dans ton tableau est 0.
Tu vas donc rentrer dans la boucle à la première passe puisque $i=0 bien
inférieure ou égale à ton sizeof
Arrivé à la fin tu incrément $i qui devient 1, rebranchement sur ta
condition while, tu vas de nouveau rentrer dans la boucle puisque $i est
cette fois = à sizeof($line), mais $line[1] n'existe pas, tu n'avais qu'une
valeur dans ton tableau indexée $line[0], d'ou erreur sur la ligne suivante
qui tente d'accéder à un index de tableau inexistant.
De la même manière tu as une erreur de logique, puisqu'au cas ou
sizeof($line) te renvoit 0 (tableau vide) tu procède quand même au
traitement dans la boucle.
Enfin, tu demandes à PHP de recalculer la taille de $line qui ne ne varie
pas à chaque itération.
1ère solution :
$i=-1;
$max=sizeof($line);
while($i<$max){
$i++;
le reste de ton code....
}
2ème solution qui en fait est la plus adaptée, te pencher dans la
documentation sur la structure For each qui est tout spécialement adaptée à
l'examen séquentiel d'un tableau et évite d'avoir à utiliser un compteur
d'index.
Notice: Undefined offset: 5 in f:......script.php on line 40
Suppose que ton tableau $line ne contient qu'un élément, sizeof renvoit 1, par contre l'index de cet élément dans ton tableau est 0.
Tu vas donc rentrer dans la boucle à la première passe puisque $i=0 bien inférieure ou égale à ton sizeof
Arrivé à la fin tu incrément $i qui devient 1, rebranchement sur ta condition while, tu vas de nouveau rentrer dans la boucle puisque $i est cette fois = à sizeof($line), mais $line[1] n'existe pas, tu n'avais qu'une valeur dans ton tableau indexée $line[0], d'ou erreur sur la ligne suivante qui tente d'accéder à un index de tableau inexistant.
De la même manière tu as une erreur de logique, puisqu'au cas ou sizeof($line) te renvoit 0 (tableau vide) tu procède quand même au traitement dans la boucle.
Enfin, tu demandes à PHP de recalculer la taille de $line qui ne ne varie pas à chaque itération.
1ère solution :
$i=-1; $max=sizeof($line); while($i<$max){ $i++; le reste de ton code.... }
2ème solution qui en fait est la plus adaptée, te pencher dans la documentation sur la structure For each qui est tout spécialement adaptée à l'examen séquentiel d'un tableau et évite d'avoir à utiliser un compteur d'index.
En retirant ton test d'égalité sur le while effectivement tu vas régler ton problème qui se produit autrement systématiquement après le dernier enregistrement de ton tableau $line.
Par contre tu ne gères toujours pas le cas ou ton tableau $line ne contient aucun élément ($i=0 et sizeof($line)=0), dans ce cas le code dans ta boucle sera quand même exécuté avec une erreur à la clé. Ca ne te gènes peut-être pas parcque tu est sure que ton tableau $line ne sera jamais vide...mais bon autant prendre de bonnes habitudes.
Pour vraiment être sure de ne pas avoir d'erreur il faut que tu remplaces tes deux premières lignes par :
$i=-1; $max=sizeof($line); '<- pour éviter le recalcul du sizeof à chaque boucle while($i<$max){ $i++;
et bien sur que tu enlève le $i++ à la fin de ton code initial.
Par contre comme dit dans le précédent post, la méthode la plus propre et plus rapide est celle basée sur une boucle for each dont Renaud t'as donné un exemple.
En retirant ton test d'égalité sur le while effectivement tu vas régler ton
problème qui se produit autrement systématiquement après le dernier
enregistrement de ton tableau $line.
Par contre tu ne gères toujours pas le cas ou ton tableau $line ne contient
aucun élément ($i=0 et sizeof($line)=0), dans ce cas le code dans ta boucle
sera quand même exécuté avec une erreur à la clé. Ca ne te gènes peut-être
pas parcque tu est sure que ton tableau $line ne sera jamais vide...mais bon
autant prendre de bonnes habitudes.
Pour vraiment être sure de ne pas avoir d'erreur il faut que tu remplaces
tes deux premières lignes par :
$i=-1;
$max=sizeof($line); '<- pour éviter le recalcul du sizeof à chaque boucle
while($i<$max){
$i++;
et bien sur que tu enlève le $i++ à la fin de ton code initial.
Par contre comme dit dans le précédent post, la méthode la plus propre et
plus rapide est celle basée sur une boucle for each dont Renaud t'as donné
un exemple.
En retirant ton test d'égalité sur le while effectivement tu vas régler ton problème qui se produit autrement systématiquement après le dernier enregistrement de ton tableau $line.
Par contre tu ne gères toujours pas le cas ou ton tableau $line ne contient aucun élément ($i=0 et sizeof($line)=0), dans ce cas le code dans ta boucle sera quand même exécuté avec une erreur à la clé. Ca ne te gènes peut-être pas parcque tu est sure que ton tableau $line ne sera jamais vide...mais bon autant prendre de bonnes habitudes.
Pour vraiment être sure de ne pas avoir d'erreur il faut que tu remplaces tes deux premières lignes par :
$i=-1; $max=sizeof($line); '<- pour éviter le recalcul du sizeof à chaque boucle while($i<$max){ $i++;
et bien sur que tu enlève le $i++ à la fin de ton code initial.
Par contre comme dit dans le précédent post, la méthode la plus propre et plus rapide est celle basée sur une boucle for each dont Renaud t'as donné un exemple.
En retirant ton test d'égalité sur le while effectivement tu vas régler ton problème qui se produit autrement systématiquement après le dernier enregistrement de ton tableau $line.
Par contre tu ne gères toujours pas le cas ou ton tableau $line ne contient aucun élément ($i=0 et sizeof($line)=0), dans ce cas le code dans ta boucle sera quand même exécuté avec une erreur à la clé.
Non, pour que la boucle s'exécute au moins une fois le test doit valoir 'vrai'. Or c'est faux meme la premiere fois si le tableau $line est vide, puisque la condition requiert que $i soit inférieur à 0, dans le cas d'un tableau vide, soit -1. Valeur que sizeof() ne renvoie jamais. Donc, impossible de rentrer dans la boucle avec un tableau vide.
Meme si foreach() peut s'avérer plus efficace dans ce cas précis, While() est plus souple et permet de sortir de la boucle proprement en provoquant la condition à 'vrai' dans un cas exceptionnel avant la fin de la boucle.
@++
Stephane Pineau wrote:
Le 22 May 2004 13:31:10 GMT, "Lea"
<enleverlepremiermot.lea_809@hotmail.com> écrivait:
En retirant ton test d'égalité sur le while effectivement tu vas régler
ton problème qui se produit autrement systématiquement après le dernier
enregistrement de ton tableau $line.
Par contre tu ne gères toujours pas le cas ou ton tableau $line ne
contient aucun élément ($i=0 et sizeof($line)=0), dans ce cas le code dans
ta boucle sera quand même exécuté avec une erreur à la clé.
Non, pour que la boucle s'exécute au moins une fois le test doit valoir
'vrai'. Or c'est faux meme la premiere fois si le tableau $line est vide,
puisque la condition requiert que $i soit inférieur à 0, dans le cas d'un
tableau vide, soit -1. Valeur que sizeof() ne renvoie jamais. Donc,
impossible de rentrer dans la boucle avec un tableau vide.
Meme si foreach() peut s'avérer plus efficace dans ce cas précis, While()
est plus souple et permet de sortir de la boucle proprement en provoquant
la condition à 'vrai' dans un cas exceptionnel avant la fin de la boucle.
En retirant ton test d'égalité sur le while effectivement tu vas régler ton problème qui se produit autrement systématiquement après le dernier enregistrement de ton tableau $line.
Par contre tu ne gères toujours pas le cas ou ton tableau $line ne contient aucun élément ($i=0 et sizeof($line)=0), dans ce cas le code dans ta boucle sera quand même exécuté avec une erreur à la clé.
Non, pour que la boucle s'exécute au moins une fois le test doit valoir 'vrai'. Or c'est faux meme la premiere fois si le tableau $line est vide, puisque la condition requiert que $i soit inférieur à 0, dans le cas d'un tableau vide, soit -1. Valeur que sizeof() ne renvoie jamais. Donc, impossible de rentrer dans la boucle avec un tableau vide.
Meme si foreach() peut s'avérer plus efficace dans ce cas précis, While() est plus souple et permet de sortir de la boucle proprement en provoquant la condition à 'vrai' dans un cas exceptionnel avant la fin de la boucle.
Non, pour que la boucle s'exécute au moins une fois le test doit valoir 'vrai'. Or c'est faux meme la premiere fois si le tableau $line est vide,
Oupss merci d'avoir relevé cette énormité dans mon message...
Meme si foreach() peut s'avérer plus efficace dans ce cas précis, While() est plus souple et permet de sortir de la boucle proprement en provoquant la condition à 'vrai' dans un cas exceptionnel avant la fin de la boucle.
En php tu peux sortir de n'importe quel type boucle selon une condition donnée par l'instruction break et celà fonctionne également pour les boucles foreach().
Non, pour que la boucle s'exécute au moins une fois le test doit valoir
'vrai'. Or c'est faux meme la premiere fois si le tableau $line est vide,
Oupss merci d'avoir relevé cette énormité dans mon message...
Meme si foreach() peut s'avérer plus efficace dans ce cas précis, While()
est plus souple et permet de sortir de la boucle proprement en provoquant
la condition à 'vrai' dans un cas exceptionnel avant la fin de la boucle.
En php tu peux sortir de n'importe quel type boucle selon une condition
donnée par l'instruction break et celà fonctionne également pour les boucles
foreach().
Non, pour que la boucle s'exécute au moins une fois le test doit valoir 'vrai'. Or c'est faux meme la premiere fois si le tableau $line est vide,
Oupss merci d'avoir relevé cette énormité dans mon message...
Meme si foreach() peut s'avérer plus efficace dans ce cas précis, While() est plus souple et permet de sortir de la boucle proprement en provoquant la condition à 'vrai' dans un cas exceptionnel avant la fin de la boucle.
En php tu peux sortir de n'importe quel type boucle selon une condition donnée par l'instruction break et celà fonctionne également pour les boucles foreach().