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

Ciao, ho un problema con questa funzione: nel ciclo foreach la variabile $id 
parte da 0
invece di partire da 1.
Potete aiutarmi?
<?php
function selectNextEdition(){
global $session, $romani, $disabled_flag, $mesi;
$disflag = "";
$out = "";
$query = mysql_query("SELECT * FROM edizioni WHERE edannoreale = 
DATE_FORMAT(now(), '%Y') ORDER BY edmese ASC LIMIT 12;") or 
die(log_action(mysql_error()));
    $num = mysql_num_rows($query);
    if($num>0){
    #l'anno in corso ha almeno una edizione aperta
        $full = 11;
        $mancanti = $full - $num;
        $mesi_edizione = $mesi;
        $mesi_post = array_slice($mesi_edizione,0,3);
        $mesi_fatti = array();
        while($obj = mysql_fetch_object($query)){
            $mesi_fatti[$obj->ednumero] = $mesi_edizione[$obj->ednumero];
            $mesi_fatti_ext[$obj->ednumero] = num_edizione($obj->id);
            $anno = $obj->edannoreale;
            $edanno = $obj->edanno;
            }
            $postanno = $anno + 1;
            $numanno = $edanno;                $numpost = $edanno + 1;
            $annoromano = $romani[$numanno];
            $postromano = $romani[$numpost];
        $mesi_liberi = array_diff($mesi_edizione,$mesi_fatti);
if($disabled_flag!=""){
        $out .= "<select id='selectNextEdition' name='edizione' 
style='visibility:hidden' ".$disabled_flag.">\n";
        }
        else
        {
        $out .= "<select id='selectNextEdition' name='edizione' 
".$disabled_flag.">\n";
        }
if($disabled_flag!=""){
$no_nuova = '1';
        $out .= "<optgroup label='Edizioni gi&agrave; aperte'>\n";
        foreach($mesi_fatti as $id=>$mese){
            $out .= "<option 
style='text-decoration:line-through;color:#AAA;' 
value='".$numanno.":".$id.":".$anno."'
            label='".$mesi_fatti_ext[$id]."'>".$mesi_fatti_ext[$id]."</option>\n";
            }
        $out .= "</optgroup>\n";
}
        $out .= "<optgroup label='Edizioni libere'>\n";
$i = 1;
        foreach($mesi_liberi as $id=>$mese){
        if($i == 1 && !isset($no_nuova)){ $flag = "selected='selected' 
"; }else{    $flag='';
        }
            $out .= "<option ".$flag."value='".$numanno.":".$id.":".$anno."' 
label='".$annoromano." - ".$mese." ".$anno."'>".$annoromano." - ".$mese." 
".$anno."</option>\n";
            $i++;
            }
$mese = $mese +1;
        foreach($mesi_post as $id=>$mese){
            $out .= "<option value='".$numpost.":".$id.":".$postanno."' 
label='".$postromano." - ".$mese ." ".$postanno."'>".$postromano." - 
".$mese." ".$postanno."</option>\n";
            }
        $out .= "</optgroup>";
        $out .= "</select>";
        }else{
        #l'anno in corso e' a gennaio e non ha ancora una edizione aperta
        $full = 11;
        $flag = "";
$rim = mysql_query("SELECT MAX(edannoreale) AS maxsolare, MAX(edanno) AS 
maxedizione FROM edizioni;");
$rimedio = mysql_fetch_array($rim);
        $numanno = $rimedio['maxedizione'];
        $numanno = $numanno + 1;
        $anno = $rimedio['maxsolare'];
        if($anno != date('Y')){ $anno = date('Y'); }
        $annoromano = $romani[$numanno];
        $mesi_edizione = $mesi;
        $out .= "<select id='selectNextEdition' 
name='edizione'".$disabled_flag.">\n";
        foreach($mesi_edizione as $id=>$mese){
            $out .= "<option ".$flag."value='".$numanno.":".$id.":".$anno."' 
label='".$annoromano." - ".$mese." ".$anno."'>".$annoromano." - ".$mese." 
".$anno."</option>\n";
        }
        $out .= "</select>";
        }
    echo $out;
}
?>

 Potete aiutarmi?
Quale ciclo foreach?
Enrico

 $id parte da 0 invece di partire da 1.
Per quale motivo dovrebbe partire da 1?
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
I sometimes catch myself looking up at the moon, remembering the
changes of fortune in our long voyage, thinking of the thousands
of people who worked to bring the three of us home. I look up at
the moon, and wonder: When will we be going back? And who will
that be?
    --Jim Lovell, "Apollo 13"

 ha scritto nel messaggio 
news:gj066a$hvh$2...@tdi.cu.mi.it...


 Deve partire da 1 perchè sono i numeri di una rivista.
Usare $id+1 al posto di $id ?
E comunque non penso ci sia nessun problema se internamente usi i numeri
da 0 a N... solo quando li stampi ti devi ricordare di aggiungere
uno ;-)
Enrico

 Deve partire da 1 perchè sono i numeri di una rivista.
Devi incrementarlo tu.
Purtroppo la teoria dei numeri interi e' venuta prima della numerazione delle
riviste, prenditela con gli Arabi che hanno inventato lo zero (o con gli editori
che partono dal secondo numero) :)
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
According to the obituary notices, a mean and unimportant person never dies.

 ha scritto nel messaggio 
news:gj08bl$jqc$1...@tdi.cu.mi.it...


 Mi poi dire come fare?
Soluzione rapida e sporca: metti una if all'interno del foreach che fa saltare
tutti i comandi se l'indice e' zero:
foreach (.....) {
	if ($i > 0) {
		..........
		..........
		..........
	}
}
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Death has been proven to be 99% fatal in laboratory rats.

 tutti i comandi se l'indice e' zero:
Qualcosa di un pochettino più logico IMHO sarebbe:
foreach (.....) {
        if ($i > 0) {
		continue;
	}
        ..........
        ..........
        ..........
}
Senza nulla togliere all'esempio di prima ;-)
http://it.php.net/continue
Enrico

 ha scritto nel messaggio 
news:1230224144.1...@enrico-desktop.casa...


 Potete aiutarmi?
Toglia dinamicamente con JavaScript, oppure ricarichi la pagina e
rielabori con PHP. Scegli la via che ti piace di più.
Enrico

 quella non dovrebbe essere più visibile sulla listbox.
Di solito quelle cose le fai con JavaScript o AJAX. Se non vuoi impazzire
costruendoti funzioni AJAX da zero ci sono delle librerie che si interfacciano
con PHP, come, a titolo di esempio, 
http://xajaxproject.org/
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Today at work an ethernet switch decided to take the 'N' out of NVRAM
       --Richard Letts

 ha scritto nel messaggio 
news:gj0tjg$6a4$1...@tdi.cu.mi.it...


> Mi potete dare qualche suggerimento?
il primo suggerimento che ti do è di imparare a quotare:
http://wiki.news.nic.it/QuotarBene
per ogni checkbox devi assegnare all'evento "onclick" una funzione che
lo cancella (cioè ne setta l'attributo style.display="none")
per ulteriori chiarimenti meglio spostarsi su it.comp.lang.javascript, qua
siamo andati OT