undefined offset

undefined offset - PHP - Programmation

Marsh Posté le 26-04-2005 à 11:40:24    

Voila j'obtiens des erreurs que j'ai du mal a comprendre alors j'espere que vous pouvez m'aider a les résoudre!
 
J'obtiens des undefined offset sur les lignes suivantes :
$line_dir[$level].= "
$line_file[$level].= "
$line = $the_line_dir[0] . $the_line_file[0];
$added_line = $the_line_dir[$j] . $the_line_file[$j];
 
Savez pkoi? Moi j'ai du mal a saisir ce que signifie l'erreur undefined offset!
 
Merci a tous

Reply

Marsh Posté le 26-04-2005 à 11:40:24   

Reply

Marsh Posté le 26-04-2005 à 11:50:46    

tu as tester la valeur de $level ??
de $j ??

Reply

Marsh Posté le 26-04-2005 à 11:59:40    

en fait je pense que ca ne fonctionne pas car $line_file et $line_dir ne sont pas initialisées!!!
 
mais le truc c'est que je ne sais pas a quoi les initialiser!! j'ai effectué plusieurs tentatives mais rien de concluant...
 
HELP!!!

Reply

Marsh Posté le 26-04-2005 à 12:06:55    

beh, c'est a toi de savoir, on peut pas savoir à ta place ce que tu veut mettre.
déjà, $line_file = array(); $line_dir = array(); m'a l'air approprié à ton cas

Reply

Marsh Posté le 26-04-2005 à 12:09:37    

Je comprens pas!!
 
Quoi que je mette pour $line_file et $line_dir j'ai toujours les memes erreurs!!
 
Notice: Undefined variable: line_file  
Notice: Undefined variable: line_dir
 
!!!

Reply

Marsh Posté le 26-04-2005 à 12:16:05    

tu utilises line_file et line_dir dans ton code comme si c'était des tableaux.
Dans ce cas, initialise des tableaux :
$line_file = array();
$line_dir = array();
 
sinon, post un peu + de ton code, car la, c'est pas facile de tout savoir

Reply

Marsh Posté le 26-04-2005 à 12:26:04    

nORKy a écrit :

tu utilises line_file et line_dir dans ton code comme si c'était des tableaux.
Dans ce cas, initialise des tableaux :
$line_file = array();
$line_dir = array();
 
sinon, post un peu + de ton code, car la, c'est pas facile de tout savoir


 
mon code est assez long alors jvé essayer d'envoyer juste ce qu'il faut
 
pour ce qui est "initialise tes tableaux" c'est ce que j'ai fais et ca ne fonctionne tjs pas (tjs la meme erreur)!!!
 
erreur ligne 36!!!

Code :
  1. function p_get_file($directory,$level){
  2. // $directory = str_replace (" ", "%20", $directory);
  3. $nb_file = get_nb_file($directory);
  4. $i = 0;
  5. $handle=opendir($directory);
  6. while ($file = readdir($handle)) {
  7.  if ($file != "." && $file != ".." ) {   // Que des fichiers
  8.   if (p_is_file($file)){
  9.    $i++;
  10.    $file_name = $file;
  11.    $file_path = $directory . $file;
  12.    $file_size = filesize($file_path);
  13.    $file_size = $file_size / 1000;
  14.    $file_size = $file_size . " Ko";
  15.    if (p_is_last($i,$nb_file))
  16.     $image_l="_icon/b_vert_last_file.gif";
  17.    else
  18.     $image_l="_icon/b_vert_file.gif";
  19.    $image = get_type($file_name);
  20.    $b_vert = "";
  21.    $b_vert = p_level($b_vert, $level);
  22.    $line_file[$level].= "
  23.       <tr align=\"left\" valign=\"middle\">
  24.         <td valign=\"middle\" colspan=\"2\">$b_vert<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><img src=\"$image_l\" width=\"15\" height=\"20\" align=\"absmiddle\" border=\"0\"><a href=\"$file_path\" target=\"_blank\">$image</a>&nbsp;<a href=\"$file_path\" target=\"_blank\">$file_name</a></font></td>
  25.         <td width=\"100\" align=\"left\"><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\">$file_size</font></td>
  26.       </tr>
  27.    ";
  28.   }
  29.  }
  30. }
  31. closedir($handle);
  32. return($line_file);
  33. }


 
 
ici erreur ligne 25!!!

Code :
  1. function p_get_dir($directory,$level,$dir_no){
  2. // $directory = str_replace (" ", "%20", $directory);
  3. $arr_dir = explode ("/",$directory);
  4. $nb_dir = get_nb_all($directory);
  5. $i = 0;
  6. $handle=opendir($directory);
  7. while ($file = readdir($handle)) {
  8.  if ($file != "." && $file != ".." ){
  9.   if (!p_is_file($file)){
  10.    $i++;
  11.    $file_name = $file;
  12.    $new_dir = $directory . $file_name . "/";
  13.    if (p_is_last($i,$nb_dir))
  14.     if ($file_name == $dir_no)
  15.      $image="<img src=\"_icon/b_last_dir_open.gif\" width=\"15\" height=\"20\" align=\"absmiddle\" border=\"0\">";
  16.     else
  17.      $image="<img src=\"_icon/b_last_dir_closed.gif\" width=\"15\" height=\"20\" align=\"absmiddle\" border=\"0\">";
  18.    else
  19.     if ($file_name == $dir_no)
  20.      $image="<img src=\"_icon/b_dir_open.gif\" width=\"15\" height=\"20\" align=\"absmiddle\" border=\"0\">";
  21.     else
  22.      $image="<img src=\"_icon/b_dir_closed.gif\" width=\"15\" height=\"20\" align=\"absmiddle\" border=\"0\">";
  23.    $image = p_level($image,$level);
  24.    $line_dir[$level].= "
  25.       <tr align=\"left\" valign=\"middle\">
  26.         <td valign=\"middle\" colspan=\"3\"><a href=\"index.php?directory=$new_dir\">$image</a><font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"2\"><a href=\"index.php?directory=$new_dir\"><img src=\"_icon/i_dir.gif\" width=\"15\" height=\"13\" align=\"absmiddle\" border=\"0\"></a>&nbsp;<a href=\"index.php?directory=$new_dir\">$file_name</a></font></td>
  27.       </tr>
  28.    ";
  29.   }
  30.  }
  31.  if ($file == $dir_no){
  32.    $line_dir[$level].= "x?x?x" . $level . "x?x?x";
  33.  }
  34. }
  35. closedir($handle);
  36. return($line_dir);
  37. }


 
Di moi si ce n'est pas assez clair...
 
Merci pour ton aide :jap:

Reply

Marsh Posté le 26-04-2005 à 13:33:22    

HELP!!
 
Je ne sais plus quoi faire pour trouver le problème...

Reply

Marsh Posté le 26-04-2005 à 13:40:34    

il faut que tu checks tout ce que contiennent tes variables qui aurait un rapport de pres ou de loin à ces erreurs.
Car je viens de faire des tests chez moi, je n'ai aucune erreur. Tout ce que tu as écris est valid.
En initialisant rien du tout, j'ai le droit de faire un $line_file[53] .= "toto";
car print_r($line_file); me renvoi :
Array ( [53] => toto )
 
il faut verifier ce que contienne toutes tes variables à mon avis

Reply

Marsh Posté le 26-04-2005 à 14:07:18    

nORKy a écrit :

il faut que tu checks tout ce que contiennent tes variables qui aurait un rapport de pres ou de loin à ces erreurs.
Car je viens de faire des tests chez moi, je n'ai aucune erreur. Tout ce que tu as écris est valid.
En initialisant rien du tout, j'ai le droit de faire un $line_file[53] .= "toto";
car print_r($line_file); me renvoi :
Array ( [53] => toto )
 
il faut verifier ce que contienne toutes tes variables à mon avis


 
j'utilise ces variables dans les fonctions précedemment citées et aussi ici :

Code :
  1. // traitement directory
  2. // $arr_dir[0] = folders
  3. $arr_dir = explode ("/",$directory);
  4. $level = sizeof($arr_dir)-2;
  5. $cpt = 1;
  6. $j=0;
  7. while ($j <= $level){
  8. $dir_cur = $dir_cur . $arr_dir[$j] . "/";
  9. $dir_no = $arr_dir[$j+1];
  10. $line_dir = p_get_dir($dir_cur, $j, $dir_no,$cpt);
  11. $line_file = p_get_file($dir_cur,$j,$cpt);
  12. if ($line_dir[$j] != "" )
  13.  $the_line_dir[$j] = $line_dir[$j];
  14. if ($line_file[$j] != "" )
  15.  $the_line_file[$j] = $line_file[$j];
  16. $j++;
  17. }
  18. $j=1;
  19. $line = $the_line_dir[0] . $the_line_file[0];
  20. while ($j <= $level){
  21. // echo "$the_line_dir[$j]";
  22. // echo "$the_line_file[$j]";
  23. $rep = $j - 1;
  24. $replace_str = "x?x?x" . $rep . "x?x?x";
  25. $added_line = $the_line_dir[$j] . $the_line_file[$j];
  26. $line = str_replace ($replace_str, $added_line, $line);
  27. $j++;
  28. }
  29. echo "$line";


Je ne vois pa ou est l'erreur
 
Si qqn a une idée merci de me le dire parce que la je suis a bout de nerf!! lol

Reply

Marsh Posté le 26-04-2005 à 14:07:18   

Reply

Marsh Posté le 26-04-2005 à 14:23:17    

déjà, utilise plutot count au lieu de sizeof :
$level = count($arr_dir)-2;
 
p_get_* renvoit-ils bient des tableaux ?
 
je suis un peu perdu la... y'a des $*_line_* un peu partout ;-)
au pire, si tu m'envoi tout donc code, je trouverais le prob, mais la, je m'emmelle !

Reply

Marsh Posté le 26-04-2005 à 14:42:55    

Au fait, juste en passant, les "Notice" ne sont pas des erreurs, hein http://forum-images.hardware.fr/images/perso/itm.gif
 
Si neanmoins tu etais deja au courant, et que tu veux un code propre de chez propre, je ne peux que te feliciter et t'encourager dans cette voie qui consiste a eradiquer les notices.


Message édité par cerel le 26-04-2005 à 14:46:06
Reply

Marsh Posté le 26-04-2005 à 14:44:56    

Oui je sais pour les notices mais le probleme c'est que c'est ligne s'affiche ce qui ne fait pas terrible pour les utilisateurs!
 
PS : nORKy je t'ai envoyé un MP

Reply

Marsh Posté le 27-04-2005 à 09:25:03    

j'ai testé ton code. Je suis usr php 4.1.2 et je n'ai aucune erreur. Ceci est pt etre dût a nos configuration de php différentes.
 
Par contre, je crois que j'ai trouvé d'ou vient le prob.
Tu as une des fonctions qui renvoi des tableaux avec des entrées qui ne commenses pas par 0.
Je m'explique :
A ta fonction p_get_file (par exemple, le cas est present aussi sur  p_get_dir et pt etre d'autres), tu lui passes une variable $level. Cette veriable n'est pas forcément à 0 (chez moi, elle est a 1) ; et avec cette variable tu remplis un tableau avec
$line_file[$level]. Comme $level ne varie jamais, tu renvois un tableau avec :
array([1] => "bidule" )
et non pas array([0] => "", [1] => "bidule" );
Hors, un tableau commence toujours à l'offset 0 !
donc, en thérorie, si après tu tapes sur $line[1], tu vas  
taper sur l'offset 1 et non pas à l'entré "1";
hors, dans ton cas, l'offset 1 n'existe pas; puisque le tableau n'a qu'une seule entrée et comme a 0.
 
Donc, plusieurs solution, soit tu tapes sur $line_file["$level"]
soit, tu changes tes fonctions pour renvoyé juste une chaine de caratères sans tableau, car je ne vois pas l'interet de renvoyé un tableau avec toujours une seule ligne de remplis (surtout quand on sait laquelle)

Reply

Marsh Posté le 27-04-2005 à 09:26:38    

En gros, tu devrais revoir commence marche les tableaux en php.
Tu ne fais pas la différence entre les tableaux, et les tableaux associatifs.

Reply

Marsh Posté le 27-04-2005 à 10:12:41    

Et pour toi ca vient de la si j'ai
line_file et line_dir : undefined variable
alors qu'au début j'ai écris $line_file = array(); et line_dir = array();
???

Reply

Marsh Posté le 27-04-2005 à 11:13:05    

oui

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed