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

    Form registrazione - menu a tendina con ciclo FOR non va

    Siccome sto imparando il PHP, e la sua interazione con l'HTML, dopo vari esercizi basilari (che sono riusciti), ho voluto creare un form di registrazione utente, con richiesta di pochi dati, giusto per provare.
    Ho voluto mettere nella data di nascita, i menu a tendina per il giorno e per l'anno. Ho usato un ciclo for che mi stampasse la variabile $i come option value. Vi faccio vedere il sorgente della pagina.

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Documento senza titolo</title>
    </head>
    <body>
    Registrazione di un utente
    
    
    
    <form action="registrazione.php?passo=2" method="POST">
    Nome:  <input type="text" name="nome" />
    
    Cognome:  <input type="text" name="cognome" />
    
    Data di nascita: 
    <select name="giorno">
    <option selected value="#">Giorno</option>
    Codice PHP:
    <?php
    $i 
    "1";
    for (
    $i == 1$i == 31$i++) {
      
    $menugiorno '<option value=" '$i .'">' .$i'</option>';
      echo(
    $menugiorno);
                                    }    
    ?>
    codice:
    </select>
    Mese: 
    <select name="mese">
    <option select value="#">Mese</option>
    <option value="gennaio">Gennaio</option>
    <option value="febbraio">Febbraio</option>
    <option value="marzo">Marzo</option>
    <option value="aprile">Aprile</option>
    <option value="maggio">Maggio</option>
    <option value="giugno">Giugno</option>
    <option value="luglio">Luglio</option>
    <option value="agosto">Agosto</option>
    <option value="settembre">Settembre</option>
    <option value="ottobre">Ottobre</option>
    <option value="novembre">Novembre</option>
    <option value="dicembre">Dicembre</option>
    </select>
    Anno: 
    <select name="anno">
    <option selected value="#">Anno</option>
    Codice PHP:
    <?php
    $i 
    "1900";
    for (
    $i == 1900$i == 2000$i++) {
      
    $menuanno '<option value=" '$i .'">' .$i'</option>';
      echo(
    $menuanno);
                                         }
    ?>
    codice:
    </select>
    
    
    Luogo di nascita:  <input type="text" name="luogonativo" />
    
    Indirizzo di residenza: 
    
    <input type="text" name="indirizzo" height="150" />
    
    </form>
    </body>
    </html>
    Solo che al posto dei valori all'interno dei menu a tendina (che in quello del giorno dovrebbe andare da 1 a 31 e in quello dell'anno dovrebbe andare da 1900 a 2000), non mi appare nulla, soltanto il Selected Value.
    Come faccio a risolvere ?

    Grazie in anticipo.

    PS: ho messo form diversi per maggiore leggibilità del codice. Quei codici si susseguono, quindi per creare il codice completo basta incollarli uno dopo l'altro.

  2. #2
    Utente di HTML.it L'avatar di deleted_id_48586
    Registrato dal
    Nov 2002
    Messaggi
    1,732
    I cicli sono sbagliati, occhio all'uso di = e == che sono ben differenti.

    L'inizializzazione della variabile $i deve avvenire con un solo = (operatore di assegnazione)
    e non == (operatore di confronto).

    Inoltre non serve che dichiari $i = 1 e $i = 1900 prima del ciclo.

    for ($i = 1; $i == 31; $i++) {
    $menugiorno = '<option value=" '. $i .'">' .$i. '</option>';
    echo($menugiorno);
    }


    for ($i = 1900; $i == 2000; $i++) {
    $menuanno = '<option value=" '. $i .'">' .$i. '</option>';
    echo($menuanno);
    }

    Ciao.

  3. #3
    Ti ringrazio della risposta, però non va comunque... :berto:

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    378
    Originariamente inviato da Solidus Snake
    Ti ringrazio della risposta, però non va comunque... :berto:
    esempio:
    for($i=0;$i<=10;$i++)
    echo $i."\n";

    ti stamperà:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    se avessi messo:
    i<10
    partiva da 0 e arrivava fino a 9

    in pratica ragiona cosi il for:
    dice che ( i è uguale a zero e fino a quando i e minore o uguale a dieci stampa l'echo con il valore e poi incrementa i con i+1)
    quindi compie 11 cicli nel primo caso e 10 nel secondo,questo perchè parte da zero quindi bisogna includerlo e considerarlo un ciclo.
    spero di non aveti confuso del tutto
    ciao

  5. #5
    XvOg, quello che hai detto tu non c'entra. O comunque c'entra poco. Hai utilizzato un operatore <= o comunque differente dal confronto ( == ). Lo so come ragiona il For, ma perché non posso usarlo con l'operatore di confronto ? Mi pare non ci sia nessuna limitazione che lo vieti...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    Originariamente inviato da Solidus Snake
    XvOg, quello che hai detto tu non c'entra. O comunque c'entra poco. Hai utilizzato un operatore <= o comunque differente dal confronto ( == ). Lo so come ragiona il For, ma perché non posso usarlo con l'operatore di confronto ? Mi pare non ci sia nessuna limitazione che lo vieti...
    credo che il ciclo for tu non sappia come funziona

    scrivere <= o == quando si paral di valori numerici sapendo che la base è positiva e che il numero crescerà è la stessa cosa

    == ha un peso diverso se si parla di stringhe dove magari puoi mettere a confronto casa e Casa in quel caso il risultato è false

    per il for sinceramente ho sempre trovato <= e mai ==

    è vero che non trovi contro indicazioni nell'uso di == ma è anche vero che non trovi alcuna controindicazione per nessun'altra espressione

    for ($v=startValue; condizione_su_v; istruzione_su_v)
    {

    bloccoDiIstrizioni;

    }

    la seconda espressione è quella che gestisce il ciclo..se quella è vera il cilco continua se è falsa il ciclo si ferma

    scrivere $a==$b vuol dire che il ciclo agisce solo nel caso che $a==$b quindi rende inutile
    un ciclo

    per essere più preciso
    Condizione_su_v è la condizione di controllo del ciclo. Il ciclo termina quando condizione_su_v restituisce il valore false (cioè quando la condizione su v non è più verificata, quindi falsa). Il primo controllo sulla condizione viene effettuato all'ingresso nel ciclo, prima della prima iterazione, è quindi possibile che le istruzioni appartenenti a bloccoDiIstruzioni non vengano mai eseguite. Ciò avviene quando condizione_su_v restituisce immediatamente il valore false.

  7. #7
    Se scrivi
    for ($i = 1; $i == 31; $i++) { ...
    il ciclo non funziona, non partirà neanche.

    Inoltre se inserisci l'istruzione
    echo($menugiorno);
    all'interno del ciclo for, verrà stampata ad ogni iterazione, e dopo un tag <option></option> non è formalmente corretto se prima non viene chiuso il suo naturale contenitore, il tag <select>.

    Questo è un esempio funzionante:

    Codice PHP:
    echo "<select name=\"giorno\">\n";
    for (
    $i 1$i <= 31$i++) {
         echo 
    "<option value=\"$i\">$i</option>\n";
    }
    echo 
    "</select>\n";


    echo 
    "<select name=\"anno\">\n";
    for (
    $i 1900$i <= 2000$i++) {
         echo 
    "<option value=\"$i\">$i</option>\n";
    }
    echo 
    "</select>\n"
    Se invece vuoi associare l'output ad una variabile senza stampare nulla a schermo usa:

    Codice PHP:
    $menugiorno "<select name=\"giorno\">\n";
    for (
    $i 1$i <= 31$i++) {
         
    $menugiorno .= "<option value=\"$i\">$i</option>\n";
    }
    $menugiorno .= "</select>\n";


    $menuanno "<select name=\"anno\">\n";
    for (
    $i 1900$i <= 2000$i++) {
         
    $menuanno .= "<option value=\"$i\">$i</option>\n";
    }
    $menuanno .= "</select>\n"
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  8. #8
    Sei stato molto più chiaro ... è tutto ok, grazie mille a tutti !

    EDIT: mi riferivo a nexus. Dopo aver letto te emanuele, ringrazio immensamente anche te !

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.