Undefined offset

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Undefined offset

par Truc » 10 nov. 2005, 17:05

Toujours pareil, tu dis on peut le faire mais à éviter quand meme :wink:

tu dispose de la condition d'arret de la boucle "$i == count($f)" donc tu peut faire ceci:
for($i=$pgstart;($i <= count($f)) && ($i<=$pgbreak);$i++)
{
   ...
}

par Dgse » 10 nov. 2005, 16:45

Ps : j'ai vu sur l'aide dans le site Nexen que l'on pouvait le faire.

C'etait pour l'info

par Dgse » 10 nov. 2005, 16:40

Bonjour

j'ai remplacer
 if ($i == count($f)) 
                { 
                echo "<center><br>"; 
                for($i=1;$i<$pgmax;$i++){ 
                if($i==$pg+1) echo "[".$i."]"; 
                else echo "[<a ref='".$new_name."?pg=".$i."'>".$i."</a>]"; 
                } 
                exit();
par
break;
ce qui a pour effet de ne pas arreter la boucle, elle continue j'ai verifie, et cela ne m'affiche pas non plus le message d'erreur
ce qui donne en gros
$f=file(monfichier); 
$link=array();          
for($i=0;$i<count($f);$i++) 
{ 
if(trim($f[$i])!="") $link[$i]=$f[$i]; 
} 
if ($link[0]=="") 
{ 
echo "Message"; 
} 
$pgmax = floor((count($link))/5+1); 
if(count($link)/5+1> $pgmax) $pgmax++; 
if($pg>$pgmax) $pg=$pgmax;                          
if(!$pg || $pg==1) 
{ 
$pg=0; $pgstart=0; 
$pgbreak=$pg*5+4; 
} 
elseif($pg == "end") 
{ 
$pg=$pgmax; 
$pgstart=$pgmax*5; 
$pgbreak=count($link); 
} 
else 
{ 
$pg=$pg-1; 
$pgstart=$pg*5; 
$pgbreak=$pg*5+4; 
} 
for($i=$pgstart;$i<=$pgbreak;$i++) 
{         
                if ($i == count($f)) 
                {break;} 
$link[$i] = str_replace($site,"",$link[$i]); 
echo $link[$i];$i2=$i ;      
if ($link[$i]=="") 
{echo"Message";}      
else 
{ 
echo "Autre Message"; 
} 
} 
for($i=1;$i<$pgmax;$i++){ 
if($i==$pg+1) echo "[".$i."]"; 
else echo "[".$i."]"; 
} 
@+ Dgse

par Truc » 10 nov. 2005, 16:17

Salut, je dirai que si ça marche tant mieux mais c'est une mauvaise programmation de terminer une boucle avec un exit(), qui d'ailleur prend effet dès le 1er passage dans la 1ere boucle for().

Autre probleme (sans grande importance puisque tu ne passe qu'une fois dans la boucle) les 2 boucles for() imbriqués avec la meme variable de compteur $i, rien de tel pour semer la confusion :wink:

Donc pour éviter ce probleme sans utiliser de "exit()", je pense que tu dépasse effectivement le tableau lorsque tu affecte la variable de fin de boucle => $pgbreak=$pg*5+4;

Ce qui veut dire (je pense) que tu affiche 4 par 4 .... tu devrai tester avant d'affecter directement si "$pg*5+4" existe en comparant a la derniere valeur "affichable" .... mais dans tout ca je sais pas ce qu'est la limite tu trouvera certainement :wink:

par Dgse » 10 nov. 2005, 15:06

Bonjour

j'ai mis le bout de code que j'ai ajoute en retrait cela fonctionne j'ai plus le message d'erreur mais est-ce correct.
$f=file(monfichier); 
$link=array();         
for($i=0;$i<count($f);$i++) 
{ 
if(trim($f[$i])!="") $link[$i]=$f[$i]; 
} 
if ($link[0]=="") 
{ 
echo "Message"; 
} 
$pgmax = floor((count($link))/5+1); 
if(count($link)/5+1> $pgmax) $pgmax++; 
if($pg>$pgmax) $pg=$pgmax;                         
if(!$pg || $pg==1) 
{ 
$pg=0; $pgstart=0; 
$pgbreak=$pg*5+4; 
} 
elseif($pg == "end") 
{ 
$pg=$pgmax; 
$pgstart=$pgmax*5; 
$pgbreak=count($link); 
} 
else 
{ 
$pg=$pg-1; 
$pgstart=$pg*5; 
$pgbreak=$pg*5+4; 
} 
for($i=$pgstart;$i<=$pgbreak;$i++)
{		
				if ($i == count($f))
				{
				echo "<center><br>";
				for($i=1;$i<$pgmax;$i++){
				if($i==$pg+1) echo "[".$i."]";
				else echo "[<a ref='".$new_name."?pg=".$i."'>".$i."</a>]";
				}
				exit();						}
$link[$i] = str_replace($site,"",$link[$i]); 
echo $link[$i];$i2=$i ;     
if ($link[$i]=="") 
{echo"Message";}     
else 
{ 
echo "Autre Message"; 
} 
} 
for($i=1;$i<$pgmax;$i++){ 
if($i==$pg+1) echo "[".$i."]"; 
else echo "[".$i."]"; 
} 
@+ Dgse

par Dgse » 10 nov. 2005, 12:01

Bonjour

Oui, ca je sais, je crois que le probleme viens des numeros de page
j'explique ce qui se passe je met le fichier dans un array()

quand j'affiche peut importe le nombre par page , je vais prendre 10 pour l'exemple si j'en ai 4 a afficher l'erreur s'affiche 6 fois (normal vu que je lui en ai demande 10 par page ) je sais pas comment faire pour que quand il arrive a 4 il n'affiche pas l'erreur.

Dans mon script j'ai demande 5 mais le resultat est le meme.

Merci

Dgse

par Xenon_54 » 10 nov. 2005, 04:32

Undefined offset signigie que tu tentes d'accéder à un index de tableau qui n'existe pas. Il faudrait réviser ton code afin de t'assurer que tu n'accès jamais à un index qui se trouve au delà du maximum du tableau.

par Dgse » 10 nov. 2005, 03:34

Bonjour

a l'origine la variable $pg et a 0 et $site est dans un fichier config qui definit l'url pour l'affichage des images. et j'ai besoin de le retirer pour pouvoir l'afficher dans cette page .. d'ou la fonction

merci

@+ Dgse

par Xenon_54 » 10 nov. 2005, 03:16

D'où proviennent les variables $pg et $site ?

par Dgse » 10 nov. 2005, 02:47

Bonjour

Comme je n'ai pas trouve comment faire je refais appel a vous,
j'ai essayer avec isset mais j'ai pas du mettre le bon code car cela m'affichait toujours Undefined offset
voici ce que j'utilise, tant que cela est un multiple de 5 ca colle (normal) vu que j'ai demande a afficher 5 titre dans la page si j'arrive a 6 j'ai 4 fois Undefined offset.. voila en gros.
$f=file(monfichier);
$link=array();		
for($i=0;$i<count($f);$i++)
{
if(trim($f[$i])!="") $link[$i]=$f[$i];
}
if ($link[0]=="")
{
echo "Message";
}
$pgmax = floor((count($link))/5+1);
if(count($link)/5+1> $pgmax) $pgmax++; 
if($pg>$pgmax) $pg=$pgmax;						
if(!$pg || $pg==1) 
{
$pg=0; $pgstart=0;
$pgbreak=$pg*5+4;
}
elseif($pg == "end")
{
$pg=$pgmax;
$pgstart=$pgmax*5;
$pgbreak=count($link);
}
else
{
$pg=$pg-1; 
$pgstart=$pg*5;
$pgbreak=$pg*5+4;
}
for($i=$pgstart;$i<=$pgbreak;$i++){
$link[$i] = str_replace($site,"",$link[$i]);
echo $link[$i];$i2=$i ;	
if ($link[$i]=="")
{echo"Message";}	
else
{
echo "Autre Message";
}
}
for($i=1;$i<$pgmax;$i++){
if($i==$pg+1) echo "[".$i."]";
else echo "[".$i."]";
}

Merci

Dgse

par Xenon_54 » 09 nov. 2005, 19:55

Quelle est cette manie de toujours vouloir masquer les messages d'erreurs?
Une erreur doit être corrigée et non masquée. Je te conseille, à l'avenir, de ne plus jamais donner ce conseil.

On est ici pour aider à régler des problèmes et non les masquer.

par Vaedan » 09 nov. 2005, 19:17

error_reporting( 0 ); // :P

par Xenon_54 » 08 nov. 2005, 22:01

Undefined offset

par Dgse » 08 nov. 2005, 21:13

Bonjour

Est il possible de supprimer cette notice d'erreur sous easy

Notice: Undefined offset:

Merci

Dgse