Undefined offset: 1 in list.php on line 78 ...

Petit nouveau ! | 1 Messages

22 août 2007, 11:41

Bonjour .

Je me suis fait un petit code php qui genere un tableau avec des entrés d'une bdd .

Mais je me suis rendu compte que j'avais une erreur dans mes fichiers de log .

L'erreur est :

Undefined offset: 1 in list.php on line 78 ...
mysql_connect($host,$user,$password) or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnee");
 
$query=mysql_query("SELECT title, aid FROM `section` ORDER BY title"); 
$num=mysql_numrows($query); 
for($i=0;$i<$num;$i++) 
{ 
$n=mysql_result($query,$i,'title'); 
$array1[$n[0]][]=$n;
$array2[$n[0]][]=mysql_result($query,$i,'aid');
}
 
$i=0; $m=0;
foreach($array1 as $lettre=>$arr) 
{
if($m) { echo "</td><td valign=\"top\">"; $m=0; }
 $e=-1;
 echo "<b> $lettre </b><br />"; 
 while($array1[$lettre][++$e])
 {
  echo "<a href='../lien-{$array2[$lettre][$e]}.html'>{$array1[$lettre][$e]}</a><br />";
  $i++;
  if($i%NUM_PER_CASE==0) $m=1;
 }
 echo "<br />"; 
}
?>
la ligne 78 c :
while($array1[$lettre][++$e])
J'ai fait quelques recherche et cet erreur serait du a une generation de tableau trop grande ou trop petite ..
Mais je ne sais pas comment le résoudre vu que mon tableau s'auto adapte en fonction du nombre d'elements de la bdd .

que faire ?
merci

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

22 août 2007, 11:47

A quoi sert le ++$e ?
Le message d'erreur est : l'index 1 du tableau n'existe pas, càd : $tab[1] n'existe pas
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Invité
Invité n'ayant pas de compte PHPfrance

22 août 2007, 18:26

la bdd est une liste alphabetique de nom , de A & Z .
Qui evolue sans cesse , le but du script est de creer un tableau avec la liste classé par Ordre Alphabetique et avec la lettre A , B ... en 1er ligne .

le e++ augmente le compteur e=-1 qui integre les noms dans les cases .

avec e=0 , je rate le 1er nom de chaque lettre .

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

22 août 2007, 18:30

A SAVOIR :
++$e incrémente la variable et réalise le traitement
$e++ réalise le traitement et incrémente la variable

donc
$i = 0;
echo ++$i; // affiche 1
echo $i; // affiche 1

$e = 0;
echo $e++; // affiche 0
echo $e; // affiche 1
Du coup, tu peux faire $e = 0 et remplacer ton ++$e par $e++ ;)
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

Invité
Invité n'ayant pas de compte PHPfrance

22 août 2007, 19:17

Zeus ..
 $e=0;
 echo "<b> $lettre </b><br />"; 
 while($array1[$lettre][$e++])
ben j'ai pas le 1er de la liste ..

Note :

j'ai plusieurs erreurs ( dans le fichier d'origine ) qui se repete :

PHP Notice: Undefined offset: 9
PHP Notice: Undefined offset: 10
PHP Notice: Undefined offset: 7

...

ViPHP
ViPHP | 5924 Messages

22 août 2007, 22:20

Utilise isset pour voir si ta variable, ou ton élément de tableau existe.
Et sinon, si tu fais un foreach, utilises le résultat :
while(isset($arr[$e++]))

Invité
Invité n'ayant pas de compte PHPfrance

23 août 2007, 09:36

Effectivement en rajoutant isset dans la boucle , je n'ai plus l'erreur , la page s'affiche correctement , j'ai bien toute la liste .

C'etait tout con quoi mais comme toute chose conne , suffit de le savoir ;)

merci