Newsgroup: it.comp.www.php
Titolo: problema errore

Salve, nella home page del mio sito si visualizza un errore(indice non 
definito).
Qualcuno può aiutarmi?
Questo è il codice:
<?php
function fai_edizione($e, $n, $y=''){
 $romani = array( 1=>"I", 2=>"II", 3=>"III", 4=>"IV", 5=>"V", 6=>"VI", 
7=>"VII",
  8=>"VIII", 9=>"IX", 10=>"X", 11=>"XI", 12=>"XII", 13=>"XIII", 14=>"XIV", 
15=>"XV");
$mesi = array(1=>"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", 
"Giugno",
  "Luglio/Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre");
if($y != "2001"){
 $mese = $mesi[$n];   //l'errore è in questa riga
 }else{
 $mesi_2001 = array(1=>"Ottobre", 2=>"Novembre", 3=>"Dicembre");
 $mese = $mesi_2001[$n];
 }
$annata = "anno ".$romani[$e]." n.".$n." ".$mese." ".$y." ";
return $annata;
}
?> 

 ?>
La prima cosa che mi salta all'occhio:
function fai_edizione($e, $n, $y='')
non hai chiuso i doppi apici alla $y.
Dovrebbe essere $y="" .
Secondaria cosa:
$mesi = array(1=>"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio",
"Giugno",
  "Luglio/Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre");
Hai associato solo "Gennaio" ad un indice. Prova 1=>"Gennaio",
2=>"Febbraio", etc ....
Ciao.
gp

  $mese = $mesi[$n];   //l'errore è in questa riga
Forse il messaggio è giusto e l'indice non è definito. Per essere
sicuro controlla i valori di $n.
Un metodo veloce per capire il problema: if (!isset($mesi[$n])) die
("Indice non valido: $n");
<snip>

 2=>"Febbraio", etc ....
Questo non dovrebbe essere necessario. PHP autoincrementa l'indice.
Secondo me viene passato un $n sbagliato alla funzione.
Bye.

  "Luglio/Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre");
Domanda stupida, ma visto che hai raggruppato luglio e agosto, sei 
conscio del fatto che, per esempio, $mesi[9] NON è settembre?
-- 
Jax

 conscio del fatto che, per esempio, $mesi[9] NON è settembre?
e soprattutto che $mesi[12] NON esiste... dato che casualmente siamo a
dicembre... ;^)
bye!

 dicembre... ;^)
Arguto :)
-- 
Jax

 ha scritto nel messaggio 
news:gifiei$c60$2...@tdi.cu.mi.it...


 (luglio/agosto è un numero unico).
sì, questo era facile intuirlo. Ma il punto è da dove ti viene
quell'$n che usi come indice dell'array. Ho dato una sbirciata nella
mia palla di cristallo - visto che non hai ritenuto che questa fosse
un'informazione importante da condividere - e madame zabrinsky mi ha
suggerito che forse potrebbe venire da una funzione date() o qualcosa
del genere, che essendo adesso a dicembre potrebbe pure restituire 12.
Peccato che quell'array, a causa del numero doppio, abbia solo undici
elementi, e se provi a richiedere il numero 12, guarda un po', ti
becchi esattamente l'errore da te riportato.
O è cosi, o è un classico OBOE (cfr. 
http://en.wikipedia.org/wiki/Off-by-one_error
)
E' più chiaro ora?
bye!

 O è cosi, o è un classico OBOE (cfr. 
http://en.wikipedia.org/wiki/Off-by-one_error
)
Non sapevo che avesse un nome questo errore.
Certo che gli inglesi hanno un acronimo davvero per tutto :)
-- 
Jax

 Certo che gli inglesi hanno un acronimo davvero per tutto :)
vero :)
comunque è un errore che capita spesso di fare, quando si itera su
vettori.

 (luglio/agosto č un numero unico).
sě, questo era facile intuirlo. Ma il punto č da dove ti viene
quell'$n che usi come indice dell'array. Ho dato una sbirciata nella
mia palla di cristallo - visto che non hai ritenuto che questa fosse
un'informazione importante da condividere - e madame zabrinsky mi ha
suggerito che forse potrebbe venire da una funzione date() o qualcosa
del genere, che essendo adesso a dicembre potrebbe pure restituire 12.
Peccato che quell'array, a causa del numero doppio, abbia solo undici
elementi, e se provi a richiedere il numero 12, guarda un po', ti
becchi esattamente l'errore da te riportato.
O č cosi, o č un classico OBOE (cfr. 
http://en.wikipedia.org/wiki/Off-by-one_error
)
E' piů chiaro ora?
bye! 


Allora è tutto chiaro.

 $n è un parametro della funzione fai_edizione.
Lapalissiano...
Il fatto è che evidentemente qualche funzione che richiama fai_edizione 
gli passa un $n che non è compreso tra 1 e 11.
Metti un "print_r $n;" prima dell'istruzione incriminata e vedi qual è 
il valore di $n al momento dell'errore.
-- 
Jax

$n è un parametro della funzione fai_edizione.
Perfetto: ti basta vedere in quale script viene chiamata la funzione
fai_edizione, e da dove questo script prende il secondo parametro.
In alternativa cambia
if($y != "2001"){
 $mese = $mesi[$n];
 }else
in, che so?,
if ($y != 2001){
	$mese = $mesi[isset($mesi[$n])?$n:--$n];
}else
Leonardo
-- 
And where the black and corkscrew towers climb,
Lost and athirst the ragged pack abides,
Old as the aeons, trapped in tombs of time,
Sailing the tortuous temporal tides

 ha scritto nel messaggio 
news:gigjg9$irs$1...@tdi.cu.mi.it...


> il valore di $n al momento dell'errore.
Anzi, posta il risultato di questa query:
select distinct edmese from edizioni
-- 
Jax