Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [PHP] Estrarre dati da array, ciclarli in un form insieme a caselle di input

    Salve a tutti.
    Avrei bisogno di una guida più esperta di me su un problema che non riesco a risolvere.

    Ho tre file:

    1) studenti.php, che è una sorta di database e contiene un elenco (in array) di studenti, con relativi nomi e numeri di matricola;
    2) visualizza_studenti.php, dove viene stampato a video l'elenco studenti, assieme alle caselle di input (radiobutton, caselle di testo, ecc..) di un form che permette di modificare i parametri (la media voti, per esempio) di ogni studente;
    3) verifica.php, che riceve le variabili appena passate tramite metodo post dal file precedente e va a scriverle in un quarto file (db.php).


    Il file studenti.php si presenta così

    Codice PHP:
    <?php

    $studente
    [] = "Marco Arancio|1234|1980";
    $studente[] = "Mario Verdi|2345|1980";
    $studente[] = "Gino Rossi|3456|1981";
    $studente[] = "Lucio Neri|4567|1981";

    ?>
    Il file visualizza_studenti.php, come già accennato, serve ad inserire voti e altre notizie sugli studenti. Ecco il codice di visualizza_studenti.php:


    Codice PHP:
    <?php

    require("studenti.php");

    fopen("studenti.php");
    $conta_studente count($studente);

    echo = 
    "<form name='GestioneStudenti' method='post' action='verifica.php' id='GestioneStudenti'>".


    #### eseguo un ciclo for per estrarre i dati dagli array ####
    ######  quindi scompongo ogni array in 3 variabili  ######

    for($a 0$a $conta_studentea++){
    list(
    $nome$matricola$anno_nascita) = explode("|"$studente[$a]);

    // adesso subordino la scelta degli studenti al loro anno di nascita
    // quindi stampo a video i nomi e i campi di input

    if($anno_nascita === "1980"){

    echo 
    "$nome $matricola <input type='text' name='voto'> ".
            
    "<input type='radio' checked value='NO' name='ordinamento'> ".
            
    "Nuovo Ordinamento <input type='radio' value='VO' name='ordinamento'> ".
            
    "Vecchio Ordinamento
    "
    ;

    }
    }

    echo 
    "<input type='submit' name='Invia' value='Invia'>".
            
    "</form>";


    ?>
    Inserendo poi degli input di tipo "hydden", potrei passare a verifica.php anche le variabili $nome, $matricola e $anno_nascita. Ma non so materialmente come fare, perché c'è qualche intoppo per strada: visualizza_studenti.php usa un ciclo for perché l'elenco studenti potrebbe essere virtualmente infinito, quindi devo avere una gestione necessariamente dinamica degli array e il ciclo mi risolve il problema.
    Però quando vado a passare le variabile tramite $_POST al file verifica.php viene passato solo l'ultimo valore $voto e $ordinamento.
    Ho provato anche con le funzioni serialize e unserialize, come avevo letto in un altro post del forum, ma non ho risolto nulla. Evidentemente mi sfugge la soluzione.
    Come posso risolvere?

    Grazie in anticipo
    Non ragioniam di lor, ma guarda e passa

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    128

    ma quanti errori...

    Così adesso funziona a parte un errore nella list che ti devi risolvere guardando il manuale su php.net
    Hai fatto molti errori basilari, confronta il codice qua sotto col tuo per capire quali sono!
    Saluti

    Codice PHP:
    <?php 

    require("studenti.php"); 

    echo 
    "<form name=\"GestioneStudenti\" method=\"post\" action=\"verifica.php\" id=\"GestioneStudenti\">\n";


    #### eseguo un ciclo for per estrarre i dati dagli array #### 
    ######  quindi scompongo ogni array in 3 variabili  ###### 

    for ($i=0;$studente[$i];$i++)

        list(
    $nome$matricola$anno_nascita) = explode("|"$studente[$i]); 

        
    // adesso subordino la scelta degli studenti al loro anno di nascita 
        // quindi stampo a video i nomi e i campi di input 

        
    if($anno_nascita == "1980")
        { 

            echo 
    "$nome $matricola <input type=\"text\" name=\"voto\"\>";
            echo 
    "<input type=\"radio\" checked value=\"NO\" name=\"ordinamento\">";
            echo 
    "Nuovo Ordinamento <input type=\"radio\" value=\"VO\" name=\"ordinamento\">";
            echo 
    "Vecchio Ordinamento
    \n"


        } 


    echo 
    "<input type=\"submit\" name=\"Invia\" value=\"Invia\">\n";
    echo 
    "</form>\n"


    ?>

  3. #3
    In linea di massima so che la mia "sintassi" php è grezza e molto poco canonica, però l'ho sempre usata così perché funziona e mi semplifica leggermente il lavoro. Altri errori che ho fatto nella scrittura del codice (tipo: echo =), sono frutto di distrazione. Trovo molto interessante invece il contenuto della funzione for che hai postato nel tuo codice. Non sapevo che si potesse scrivere anche così. Ne farò tesoro.
    Purtroppo però il codice che mia hai postato non funziona come vorrei.
    Quando viene processato il form viene passato al file verifica.php solo l'ultimo array inserito all'interno del ciclo for (nel caso specifico solo le variabili inserite nelle caselle relative allo studente Mario Verdi), quando io vorrei che visualizzasse le variabili di tutti gli studenti del 1980.
    Nel file visualizza_studenti.php, poi, se provi a selezionare Vecchio Ordinamento per Marco Arancio e Nuovo Ordinamento per Mario Verdi, vedrai che non consente di fare una scelta multipla e quindi puoi spuntare la variabile ordinamento dell'uno o dell'altro, ma non una per studente.
    Nei fatti il tuo codice equivale al mio (con le dovute distinzioni perché il tuo è scritto bene) corretto in questo modo:


    Codice PHP:

    <?php

    require("studenti.php");

    fopen("studenti.php");
    $conta_studente count($studente);

    echo 
    "<form name='GestioneStudenti' method='post' action='verifica.php' id='GestioneStudenti'>";


    #### eseguo un ciclo for per estrarre i dati dagli array ####
    ######  quindi scompongo ogni array in 3 variabili  ######

    for($a 0$a $conta_studente$a++){
    list(
    $nome$matricola$anno_nascita) = explode("|"$studente[$a]);

    // adesso subordino la scelta degli studenti al loro anno di nascita
    // quindi stampo a video i nomi e i campi di input

    if($anno_nascita === "1980"){

    echo 
    "$nome $matricola <input type='text' name='voto'> ".
            
    "<input type='radio' checked value='NO' name='ordinamento'> ".
            
    "Nuovo Ordinamento <input type='radio' value='VO' name='ordinamento'> ".
            
    "Vecchio Ordinamento
    "
    ;

    }
    }

    echo 
    "<input type='submit' name='Invia' value='Invia'>".
            
    "</form>";

    ?>
    Allego anche il codice del file verifica.php

    Codice PHP:

    <?php

    $nome 
    $_POST['nome'];
    $matricola $_POST['matricola'];
    $voto $_POST['voto'];
    $ordinamento $_POST['ordinamento'];

    echo 
    "$nome Matr. $matricola $ordinamento Voto $voto
    "
    ;

    ?>
    Dove sbaglio? Come si può fare per passare al file verifica.php tutte le variabili di ogni singolo studente compreso nell'elenco del 1980?
    Non ragioniam di lor, ma guarda e passa

  4. #4
    Perfetto.
    Ho risolto così:

    in visualizza_studenti.php, impostando il codice in maniera più convenzionale e sfruttando il ciclo for come mi hai spiegato tu:

    Codice PHP:

    <?php

    require("studenti.php");

    echo 
    "<form name=\"GestioneStudenti\" method=\"post\" action=\"verifica.php\" id=\"GestioneStudenti\">\n";


    #### eseguo un ciclo for per estrarre i dati dagli array ####
    ######  quindi scompongo ogni array in 3 variabili  ######

    for ($a=0$studente[$a]; $a++)
    {
        list(
    $nome$matricola$anno_nascita) = explode("|"$studente[$a]);

        
    // adesso subordino la scelta degli studenti al loro anno di nascita
        // quindi stampo a video i nomi e i campi di input

        
    if($anno_nascita == "1980")
        {

            echo 
    "$nome $matricola <input type=\"text\" name=\"voto[{$a}]\">".
                    
    "<input type=\"radio\" checked value=\"NO\" name=\"ordinamento[{$a}]\">".
                    
    "Nuovo Ordinamento <input type=\"radio\" value=\"VO\" name=\"ordinamento[{$a}]\">".
                    
    "Vecchio Ordinamento
    \n"
    ;

        }
    }

    echo 
    "<input type=\"submit\" name=\"Invia\" value=\"Invia\">\n".
           
    "</form>\n";


    ?>
    ed ecco come richiamo le variabili in verifica.php, stampandole all'interno di una tabella:

    Codice PHP:
    <?php

    require("studenti.php");

    $nome $_POST['nome'];
    $matricola $_POST['matricola'];
    $voto $_POST['voto'];
    $ordinamento $_POST['ordinamento'];

    echo 
    "<table border=\"0\" cellpadding=\"2\" cellspacing=\"1\" width=\"500\" align=\"center\"\n>".
        
    "<tr>\n".
        
    "<td width=\"200\" align=\"justify\">\n".
        
    "[b]Studente[/b]\n".     
        
    "</td>\n".
        
    "<td width=\"100\" align=\"center\">\n".
        
    "[b]Matricola[/b]\n".    
        
    "</td>\n".
        
    "<td width=\"100\" align=\"center\">\n".
        
    "[b]Ordin.[/b]\n".     
        
    "</td>\n".
        
    "<td width=\"100\" align=\"center\">\n".
        
    "[b]Voto[/b]\n".     
        
    "</td>\n".
        
    "</tr>\n";

    for(
    $i=0$studente[$i]; $i++)
    {
        list(
    $nome$matricola$anno_nascita) = explode("|"$studente[$i]); 
        
        if(
    $anno_nascita == "1980"){
        
    echo  
    "<tr>\n".
        
    "<td width=\"200\" align=\"justify\">\n".
        
    "$nome\n".     
        
    "</td>\n".
        
    "<td width=\"100\" align=\"center\">\n".
        
    "$matricola\n".    
        
    "</td>\n".
        
    "<td width=\"100\" align=\"center\">\n".
        
    "$ordinamento[$i]\n".     
        
    "</td>\n".
        
    "<td width=\"100\" align=\"center\">\n".
        
    "$voto[$i]\n".     
        
    "</td>\n".
        
    "</tr>\n";
        }
    }

    echo 
    "</table>\n";

    ?>
    Resta solo da vedere fino a che punto regge e quanto sia corretto nella forma. Per ora sembra funzionare, speriamo bene.
    Grazie di tutto

    Non ragioniam di lor, ma guarda e passa

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.