invalid argument foreach

Silen

Utente Attivo
24 Nov 2008
64
0
0
silen.netsons.org
salve, ho uno strano problema con questo codice

questo è il pezzo di form da cui vengono inseriti i dati

PHP:
	echo "<div><label id=\"type0[]\" for=\"type0[]\"> ".TYPE_0." </label>";
	echo "<select name=\"type0[]\" multiple=\"multiple\" size=\"5\">";
	echo "<option value=\" ".NESSUNO." \" \"selected\"> ".NESSUNO." </option>";
	$v=mysql_query("SELECT nome_type FROM type WHERE type='0' ORDER BY nome_type", $conn);
	while ($t=mysql_fetch_array($v)) {
	echo "<option value=\"".$t["nome_type"]."\">".$t["nome_type"]."</option>";
	}
	echo "</select></div>";
	echo "<div><label id=\"type1[]\" for=\"type1[]\"> ".TYPE_1." </label>";
	echo "<select name=\"type1[]\" multiple=\"multiple\" size=\"5\">";
	echo "<option value=\" ".NESSUNO." \" \"selected\"> ".NESSUNO." </option>";
	$r=mysql_query("SELECT nome_type FROM type WHERE type='1' ORDER BY nome_type", $conn);
	while ($q=mysql_fetch_array($r)) {
	echo "<option value=\"".$q["nome_type"]."\">".$q["nome_type"]."</option>";
	}
	echo "</select></div>";

e questo è il relativo pezzo di codice che poi mi produce l'output

PHP:
	$type0=array();
	foreach ($_POST['type0'] as $valore) {
	$type0[]=$valore;
	}
	foreach ($type0 as $x) $ty .= $x.", ";
	$type1=array();
	foreach ($_POST['type1'] as $valore) {
	$type1[]=$valore;
	}
	foreach ($type1 as $y) $typ .=$y.", ";

il problema è che questo form è ripetuto due volte, nel senso che è presente in due case di uno switch
il primo serve ad aggiungere mentre il secondo a modificare, cioè, per farvi capire a cosa serve a grandi linee:
io aggiungo con il form del case "new" e seleziono gli elementi 1,2,3 dal select; poi, una volta aggiunto mi rendo conto che gli elementi dovevano essere 1,2,5 quindi vado a usare il case "mod"

il "problema" è che mi viene restituito, quando vado a fare modifica, l'errore di cui in oggetto
e la cosa strana che non lo da quando invece aggiungo
:confused:
ringrazio anticipatamente chi mi illuminerà
 
In teroia è perché nel foreach usi uno scalare anziché un vettore.

Tu metti $_POST['type0'] e $_POST['type1'] al suo interno, invece la sitassi giusta dovrebbe essere solo $_POST.

Dopo metti $type1[] = $valore; anche qui fai un assegnamento di uno scalare ad un vettore, dovresti mettere un indice del tipo:

$type1[$i] = $valore;

In questi casi ti consiglio di usare un for, fai una cosa tipo:

PHP:
$len = sizeof($_POST);
for($i = 0; $i < $len; $i++){
[...]
}

Ciao.
 
grazie della risposta michele.b26
il tuo suggerimento mi è stato utile per andarmi a studiare l'utilizzo di for e foreach, e ho capito che nel mio caso va bene usare il secondo, perché io devo avere un array in quei due campi che inserisco e/o modifico con il form tramite input type0 e type1

infatti il problema stava a monte del codice dello script, cioè proprio nel form che non manteneva i vari valori che venivano inseriti
cioè nella pagina di inserimento mettevo "caso1, caso2, caso3", poi provavo a modificare e ho notato che, sebbene fossero stati memorizzati nel database, i valori non rimanevano selezionati nel form di modifica, quindi, se non li riselezionavo di nuovo, la modifica mi sovrascriveva quelli precedentemente insieriti con il nulla e l'array diventava vuoto dando quell'errore
inoltre ho letto che quell'errore che dava a me significa proprio che l'array è vuoto, cioè è piuttosto un avvertimento che un mancato funzionamento, ma tanto io quei campi non li avrò mai vuoti, almeno un elemento sempre ci sarà dentro l'array

posto il codice del form corretto, che magari serva a qualcun altro
PHP:
	echo "<div><label id=\"type0[]\" for \"type0[]\"> ".TYPE_0." </label><select name=\"type0[]\" size=\"5\" multiple=\"multiple\"><option 

value=\"".NESSUNO."\"";
	if ($genere_storia[0]==NESSUNO) echo "selected=\"selected\"";
	echo ">".NESSUNO."</option>";
	$v=mysql_query("SELECT nome_type FROM type WHERE type='0' ORDER BY nome_type ASC", $conn);
	while ($t=mysql_fetch_array($v)) {
	echo "<option value=\"$t[nome_type]\"";
	foreach($genere_storia as $y) {
	if ($y=="$t[nome_type]") echo "selected=\"selected\"";
	}
	echo ">".$t[nome_type]."</option>";
	}
	echo "</select><label id=\"type1[]\" for \"type1[]\"> ".TYPE_1." </label><select name=\"type1[]\" size=\"5\" multiple=\"multiple\"><option 

value=\"".NESSUNA."\"";
	if ($note_storia[0]==NESSUNA) echo "selected=\"selected\"";
	echo ">".NESSUNA."</option>";
	$r=mysql_query("SELECT nome_type FROM type WHERE type='1' ORDER BY nome_type ASC", $conn);
	while ($q=mysql_fetch_array($r)) {
	echo "<option value=\"$q[nome_type]\"";
	foreach($note_storia as $y) {
	if ($y=="$q[nome_type]") echo "selected=\"selected\"";
	}
	echo ">".$q[nome_type]."</option>";
	}
	echo "</select></div>
 
Ultima modifica:
rettifica

no, ha funzionato per un pezzo, poi devo aver fatto qualche variazione che non ricordo e ora ritorno di nuovo allo stesso problema:

quando vado a modificare i dati inseriti, il form modifica non mi mantiene selezionati i valori letti dall'array del database

ogni aiuto sarà molto apprezzato

:(
 
risolto

problema risolto, il codice postato è corretto, solo c'erano due variabili invertite che non riuscivo a vedere nella query di modifica sul database :mavieni: finalmente ora funziona tutto

:book: sperando che a qualcun altro possa servire
 

Discussioni simili