ho un piccolo problema che mi affligge da ieri pomeriggio. sicuramente sarà una stupidata ma più guardo e riguardo il codice e più non riesco a venirne a capo.
in poche parole, sono partito da un ciclo while per estrarre alcuni contenuti dal database e popolare una form select
dato che questo codice è inserito in un form per il caricamento di alcuni dati nel database, ho deciso di utilizzare una sessione per memorizzare i dati appena caricati e riportarli nella schermata successiva (questo per risparmiare tempo nel caso in cui voglio aggiungere un articolo simile a quello appena inserito).Codice PHP:while ( $row = mysql_fetch_array($sql_results) )
{
$id = $row["id"];
$nome = $row["nome"];
echo "<option value='" . $id . "'>" . $nome . "</option>\n";
}
// RISULTATO
<option value='1'>Nome 1</option>
<option value='2'>Nome 2</option>
<option value='3'>Nome 3</option>
<option value='4'>Nome 4</option>
<option value='5'>Nome 5</option>
all'interno del ciclo while ho aggiunto un ciclo for per estrarre i dati dalla sessione e al suo interno ho aggiunto la condizione che se id e contenuto della sessione sono uguali, allora il campo option deve essere selezionato.
il problema è che, nel caso in cui la sessione contiene più valori, viene selezionato solo l'ultimo, trascurando quelli precedenti.
ho provato quindi ad includere nel ciclo for anche il risultato ma, se è vero che ho risolto il problema precedente (ogni valore viene selezionato correttamente), ciascuna option viene ripetuta "X" volte, dove "X" corrisponde al numero di valori contenuti nella sessione.Codice PHP:while ( $row = mysql_fetch_array($sql_results) )
{
$id = $row["id"];
$nome = $row["nome"];
// la $_SESSION['sessione'] contiene i valori 1, 2 e 3
for ($i=0; $i<count($_SESSION['sessione']); $i++)
{
if ($id == $_SESSION['sessione'][$i])
{
$selected = " selected";
}
else
{
$selected = "";
}
}
echo "<option value='" . $id . "'" . $selected . ">" . $nome . "</option>\n";
}
// RISULTATO
<option value='1'>Nome 1</option>
<option value='2'>Nome 2</option>
<option value='3' selected>Nome 3</option> // seleziona solo l'ultimo dei 3 valori presenti nella sessione
<option value='4'>Nome 4</option>
<option value='5'>Nome 5</option>
qualcuno può farmi capire dov'è che sbaglio?
Codice PHP:while ( $row = mysql_fetch_array($sql_results) )
{
$id = $row["id"];
$nome = $row["nome"];
// la $_SESSION['sessione'] contiene i valori 1, 2 e 3
for ($i=0; $i<count($_SESSION['sessione']); $i++)
{
if ($id == $_SESSION['sessione'][$i])
{
$selected = " selected";
}
else
{
$selected = "";
}
echo "<option value='" . $id . "'" . $selected . ">" . $nome . "</option>\n";
}
}
// RISULTATO
// crea tanti "cloni" quanti sono i valori contenuti nella sessione (quindi non va bene)
// ma nello stesso tempo individua e seleziona quelli corretti
<option value='1' selected>Nome 1</option>
<option value='1'>Nome 1</option>
<option value='1'>Nome 1</option>
<option value='2' selected>Nome 2</option>
<option value='2'>Nome 2</option>
<option value='2'>Nome 2</option>
<option value='3' selected>Nome 3</option>
<option value='3'>Nome 3</option>
<option value='3'>Nome 3</option>
<option value='4'>Nome 4</option>
<option value='4'>Nome 4</option>
<option value='4'>Nome 4</option>
<option value='5'>Nome 5</option>
<option value='5'>Nome 5</option>
<option value='5'>Nome 5</option>

Rispondi quotando

