• User Attivo

    [Php] Recuperare dati da un form dinamico

    Eccomi qua niubbo completo del php...
    Dunque, avendo scoperto che con la funzione array_count_values() è possibile creare un primordialissimo sistema di sondaggi, ho iniziato a scriverlo.
    Ok tutto bene fino a quando nn ho pensato ad un area amministrativa.

    In due parole:

    In un primo file c'è un form in cui impostare il numero di opzioni del sondaggio.
    Questo form a seconda del numero crea una pagina con tanti campi input quante sono le opzioni impostate.
    Ogni campo input assume un "name" proprio.

    Questo è il codice che ho usato:

    
    <?
    if &#40;&#40;$_POST&#91;"opz"&#93;&#41; == ""&#41;
                echo &#40;"Non puoi lasciare vuoto questo campo!"&#41;;
    elseif &#40;&#40;$_POST&#91;"opz"&#93;&#41; == "0"&#41;
                echo &#40;"Devono esserci almeno 2 opzioni!"&#41;;
    elseif &#40;&#40;$_POST&#91;"opz"&#93;&#41; == "1"&#41;&#123;
                echo &#40;"Devono esserci almeno 2 opzioni!"&#41;;
    			&#125;
    else &#123;
    			echo &#40;"<form action='index.php' method='post'>"&#41;;
    			echo &#40;"<table>"&#41;;
    			echo &#40;"<tr><td colspan='2'><h1>Inserisci un titolo per il tuo sondaggio</h1></td></tr>"&#41;;
    			echo &#40;"<tr><td>Titolo: </td><td><input type='text' name='titolo' size='100'></td></tr>"&#41;;
    			echo &#40;"<tr><td colspan='2'><h1>Inserisci le opzioni</h1></td></tr>"&#41;;
    			
    	              for &#40;$i=0; $i<$opz; $i++&#41;&#123;
    				              $name = "opzione";
    				              echo &#40;"<tr><td colspan='2'>Opzione <input type='text' name='" . &#40;$name.$i&#41; ."' size='30'></td></tr>"&#41;;
    							  &#125;
    			echo &#40;"<tr><td colspan='2'><input type='submit' value='Crea sondaggio'></td></tr>"&#41;;
    			echo &#40;"</table></form>"&#41;;
    &#125;
    ?>
    
    

    Bene in questo modo ottengo dei campi input chiamati "opzione0", "opzione1" ecc...

    Il problema nasce adesso.
    La pagina successiva dovrebbe aprire un file di testo e inserire le varie opzioni che verranno scritte nei campi, e visualizzarle come contenuto di un array.

    Ma qui mi sono bloccato...
    O meglio come posso recuperare le opzioni?


  • User Attivo

    Posso darti un consiglio personale al di fuori della domanda?

    [url=http://www.php.net/echo]Echo() utilizzala così:

    echo "stringa";

    [url=http://www.php.net/echo]**echo() in realtà non è una funzione (è un costrutto del linguaggio) pertanto non richiede l'uso di parametri. Infatti, se si vuole passare più di un parametro, non bisogna racchiuderli tra parentesi**.
     :)

  • User Attivo
    $opzione0 = $_POST&#91;'opzione0'&#93;;
    $opzione1 = $_POST&#91;'opzione1'&#93;;
    

    🙂


  • Super User

    passi in hidden il numero delle opzioni che hai generato dinamicamente e poi,
    con un ciclo for $i=0->$n_opzioni recuperi tutti i campi.

    hai due scelte per leggere il valore della funzione:$_POST['opzione'.$i]

    ma ti ricordo anche questo sistema:
    $var ='opzione'.$i;

    echo $$var;

    il doppio dollaro fa in modo che il contenuto di una variabile diventi il nome di un'altra.


  • User Attivo
    
    <?
    $opzioni = array &#40;&#41;;
    $MAX_OPT = 1000;
    
    for &#40;$i = 0; $i < $MAX_OPT; $i++&#41;
    &#123;
    	if &#40;isset&#40;$_POST&#91;"opzione$i"&#93;&#41;&#41;
    	&#123;
    		$aggiungi = $_POST&#91;"opzione$i"&#93;;
    		array_push &#40;$opzioni,$aggiungi&#41;;
    		echo&#40;$_POST&#91;"opzione$i"&#93;."
    "&#41;;
    	&#125;
    &#125;
    foreach &#40;$opzioni as $opzione&#41;&#123;
    $sondaggio = "sondaggio.txt";
    $content = $opzione."
    ";
    
    $fp = fopen&#40;$sondaggio, "a"&#41;;
    $fw = fwrite&#40;$fp, $content&#41;;
    fclose&#40;$fp&#41;;
    &#125;
    ?>
    
    

    Alla fine son riuscito utilizando il ciclo in alto...
    Grazie mille per le vostre risposte...

    Zau!


  • Super User

    no!!!

    tu ipotizzi siano mille le opzioni e fai un ciclo che occupa risorse inutili.

    al posto di usare una costante fai in modo di passare dal form il valore di quante sono le opzioni.
    risparmi tempo e risorse.

    se quella pagina (come ti auguro) dovesse avere 10.000 accessi al giorno sprechi risorse.

    in più, se proprio proprio modificalo in questo modo:

    
    for &#40;$i = 0; $i < $MAX_OPT; $i++&#41;
    &#123;
       if &#40;isset&#40;$_POST&#91;"opzione$i"&#93;&#41;&#41;
       &#123;
          $aggiungi = $_POST&#91;"opzione$i"&#93;;
          array_push &#40;$opzioni,$aggiungi&#41;;
          echo&#40;$_POST&#91;"opzione$i"&#93;."
    "&#41;;
       &#125;
    else
    break;
    
    &#125; 
    
    

    aggiungendo:
    else
    break;

    ottieni che il ciclo non viene più eseguito nel caso non esista una delle opzioni (presumento che siano in ordine crescente) è inutile testare quelle che stanno dopo in quanto sicuramente non esisteranno.


  • User Attivo

    il ciclo che hai utilizzato non è molto ottimizzato. Fa 1000 cicli anche se il numero di opzioni è 3
    se vuoi usare questo sistema potresti almeno correggerlo così:

    for &#40;$i = 0; $i < $MAX_OPT; $i++&#41;
    &#123;
       if &#40;isset&#40;$_POST&#91;"opzione$i"&#93;&#41;&#41;
       &#123;
          $aggiungi = $_POST&#91;"opzione$i"&#93;;
          array_push &#40;$opzioni,$aggiungi&#41;;
          echo&#40;$_POST&#91;"opzione$i"&#93;."
    "&#41;;
       &#125;
       else
          break;
    &#125;
    
    

    in alternativa io ti consiglio di chiamare la varibili opzione (dentro al form) così: <input name="opzione[]" ...>

    in questo modo quando recuperi la varibile opzione (l'unica variabile opzione) questa dovebbe essere un array con i valori contentui in tutti i campi
    ciao


  • User Attivo

    @ico1989 said:

    $opzione0 = $_POST&#91;'opzione0'&#93;;
    $opzione1 = $_POST&#91;'opzione1'&#93;;
    

    🙂
    Che figura... Scusate ho buttato giù d'istinto... :bagno: