Manipolare numero indefinito di variabili $_POST['var_x']

di il
4 risposte

Manipolare numero indefinito di variabili $_POST['var_x']

Salve a tutti.

Una pagina php riceve per post, o per get indifferentemente, un numero imprecisato di valori che hanno tutti il nome contenente lo stesso prefisso, e seguito da un numero, per esempio
var_1, var_2, var_3,... ecc
e io voglio memorizzarli in un array
lista[0], lista[1], lista[2],... ecc
di questi valori è possibile che non ne venga passato nessuno, così come è possibile che ne vengano passati diversi.
Oltre a questi valori sopracitati, nella pagina ve ne sono molti altri con nomi diversi e totalmente ininfluenti, se non per il fatto di escludere uno sviluppo del problema attraverso un generico

foreach($_POST as $var => $value)
....
// tagliato
Il problema va quindi risolto in maniera alternativa, e la mia soluzione, criticata da alcuni utenti di un altro forum è la seguente.
Le critiche che mi vengono mosse sono vaghe, ovvero "non viene condiviso il mio approccio", (forse) soltanto per il modo in cui sviluppo il ciclo while...
Ditemi cosa ne pensate

<?php
if(isset($_POST['cmd'])){
	$lista = Array();       // array contenente gli ipotetici valori passati
	$lista_counter=1;     // contatore del numero di elementi dell'array

	while($lista[]=$_POST['var_'.($lista_counter)]){   // ciclo while incriminato
		$lista_counter++;
	}
	
	var_dump($lista);       // output di prova
}
?>
<form action='' method='post'>
<input type='hidden' name='cmd' value='do'>
<script language='Javascript'>
var n=Math.floor(Math.random()*11);

for(var i=0; i<=n; i++){
	document.write("<input type='hidden' name='var_"+i+"' value='"+i+"'>");
}
</script>
<input type='submit'>
</form>

4 Risposte

  • Re: Manipolare numero indefinito di variabili $_POST['var_x']

    Ciao leonixyz,
    forse la critica che ti rivolgono al while è dovuta al fatto che genera un PHP Notice verificabile negli error log. Mi sono permesso di dare un'aggiustatina al tuo codice. Ti allego il diff:
    
    4c4
    <        $lista_counter=1;     // contatore del numero di elementi dell'array
    ---
    >        $lista_counter=0;     // contatore del numero di elementi dell'array
    6,7c6,7
    <        while($lista[]=$_POST['var_'.($lista_counter)]){   // ciclo while incriminato
    <           $lista_counter++;
    ---
    >        while(isset($_POST['var_'.($lista_counter)])){   // ciclo while incriminato
    >           $lista[]=$_POST['var_'.($lista_counter++)];
    18c18
    <     for(var i=0; i<=n; i++){
    ---
    >     for(var i=0; i<n; i++){
    
  • Re: Manipolare numero indefinito di variabili $_POST['var_x']

    Grazie!

    ma cosa vuol dire che genera un php notice? e perchè succede? come si fa ad accorgersene? apparentemente la pagina viene eseguita senza errori...
  • Re: Manipolare numero indefinito di variabili $_POST['var_x']

    Ciao,

    Il PHP Notice è un warning che viene generato a run-time dall'esecuzione del codice e riportato nel error_log del server.
    Il notice in questione è:"Undefined index" e si presenta sull'ultimo indice non inizializzato.
    Non è un errore grave, neanche bloccante, ma è pur sempre un'anomalia nel codice.
    
       [error] [client x.x.x.x] PHP Notice:  Undefined index: var_8 in ...
    
    Nell'esempio var_8 non esiste. Per evitare quest'errore è sufficiente verificare il metodo col la funzione isset

    Altro punto di correzione sono le incongruenze sugli indici che vanno da 0 ad n-1.
  • Re: Manipolare numero indefinito di variabili $_POST['var_x']

    Grazie ora ho capito
Devi accedere o registrarti per scrivere nel forum
4 risposte