Pagina 1 di 2 12 UltimoUltimo
Visualizzazione risultati 1 fino 30 di 42
Like Tree2Likes

Discussione: problemi con l'inserimento della data di nascita

  1. #1
    Guest

    Predefinito problemi con l'inserimento della data di nascita

    Salve a tutti,

    Come da titolo ho problemi per l'inserimento della data o meglio confugsione. Io vorrei poter fare tre select per il giorno, per il mese e per l'anno. Ora però non so come poterle gestire una volta che le ho realizzate, fra le altre codcie sto cercando anche un esempio per il mese e per l'anno cosa che non sono riuscito a trovare. Spero che mi possiate aiutare e dare consigli grazie.

  2. #2
    Guest

    Predefinito problemi con l'inserimento della data di nascita

    Salve a tutti,

    Allora mi sono schiarito le idee sulla data di nascita. Ho provato a butare qualcosa giù. Ma il risultato è che l'etichetta c'è ma non ci sono le selezioni. Posto quello che ho fatto:

    Codice PHP:
    <p> <p><label for =campo-nascita"> Selezionare la data di nascita: </label>

    //Giorno

    echo "
    Giorno: ";
    echo '<select name = giorno>';
    echo '<option value=""> seleziona </option>';
    for(
    $gg=1; $gg<=31; $gg++){
    if(strlen(
    $gg)< 2){$gg = "0".$gg;}
    echo '<option value="
    $gg"> $gg </option>';
    }
    echo "
    </select>";


    //Mese

    echo "
    Mese: ";

    echo '<select name="
    mese">';
    foreach(
    $mese as $valore){
    echo '<option value="
    $valore">$valore';
    //echo "
    <option value=""$valore">$valore";
    echo
    "</option> ";
    }
    echo
    "</select>";

    //Anno

    echo " Anno: ";
    $da=1972;
    $al=2014;
    echo
    '<select name="anno">';
    echo
    '<option value=""> seleziona </option>';
    for(
    $aa=$da; $aa<=$al; $aa++){
    echo
    '<option value="$aa> $aa </option>';
    }
    echo
    "</select>";
    Dove sbaglio ??? Grazie spero fiducioso in voi.

  3. #3
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Codice PHP:
    echo '<option value="$gg"> $gg </option>';
    L'interpolazione funziona con i doppi apici, non con quelli singoli. Prova piuttosto:
    Codice PHP:
    echo "<option value='$gg'> $gg </option>";
    Naturalmente vale anche per gli altri frammenti di codice analoghi.

  4. #4
    Guest

    Predefinito

    Nel foreach metti html dentro a php perche commenti l'echo... togli il commento ovvero:
    Codice PHP:
    foreach($mese as $valore){
    echo
    '<option value="$valore">$valore';
    echo
    '<option value="$valore">$valore';
    echo
    "</option> ";
    }

  5. #5
    Guest

    Predefinito

    Le avevo corrette ma evidentemente quello mi era sfuggito. Grazie della segnalazione

  6. #6
    Guest

    Predefinito

    Però continuo ad avere l'etichetta senza la visualizzazione dell'inserimento data :( Corretto tutto e tolto il commento.

  7. #7
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Potresti mostrare il codice con le correzioni apportate?

  8. #8
    Guest

    Predefinito

    Si certo mi sembrava di averlo fatto ma ho verificato nada. Ora posto:


    Codice PHP:
    <p> <p><label for =campo-nascita"> Selezionare la data di nascita: </label>

    //Giorno

    echo "
    Giorno: ";
    echo '<select name = giorno>';
    echo '<option value=""> seleziona </option>';
    for(
    $gg=1; $gg<=31; $gg++){
    if(strlen(
    $gg)< 2){$gg = "0".$gg;}
    echo "
    <option value='$gg'> $gg </option>";
    }
    echo "
    </select>";


    //Mese

    echo "
    Mese: ";

    echo '<select name="
    mese">';
    foreach(
    $mese as $valore){
    echo '<option value="
    $valore">$valore';
    echo "
    </option> ";
    }
    echo "
    </select>";

    //Anno

    echo "
    Anno: ";
    $da=1972;
    $al=2014;
    echo '<select name="
    anno">';
    echo '<option value=""> seleziona </option>';
    for(
    $aa=$da; $aa<=$al; $aa++){
    echo '<option value="
    $aa> $aa </option>';
    }
    echo "</select>";
    Fatto grazie.

  9. #9
    Guest

    Predefinito problemi con l'inserimento della data di nascita

    Una parte della data l'ho rislsa in quetsa maniera forse nello scrivere il codice non p molto elegante per alcuni. Posto la soluzione:

    Codice PHP:
    <form method="POST" autocomplete ="off" action="<?php $_SERVER['PHP_SELF'] ?>">
    <p> <p> <p>
    <label for =campo-cognome"> Cognome: </label> <input type ="text" name = "cognome" required />

    </p> </p> </p>
    <p> <p><label for =campo-nome"> Nome: </label> <input type ="text" name = "nome" required/> </p></p>

    Selezionare la data di nascita:

    <select name="giorno">
    <?php
    for($i=1;$i<32;$i++){
    echo
    "<option value=\"" . $i . "\">" . $i . "</option>\n";
    }
    ?>
    </select>
    <select name="mese">
    <?php
    for($i=1;$i<13;$i++){
    echo
    "<option value=\"" . $i . "\">" . $i . "</option>\n";
    }
    ?>
    </select>
    <select name="anno">
    <?php
    for($i=1920;$i<2012;$i++){
    echo
    "<option value=\"" . $i . "\">" . $i . "</option>\n";
    }
    ?>
    Solo che a fianco dell'anno mi compare un input non richiesto. Ossia questo:

    http://s32.postimg.org/4hmaaxgwl/inp..._richiesto.png

    E poi volevo sapere come si memorizzavano ii tre campi giorno, mese anno. Grazie.

  10. #10
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    L'"input non richiesto" dipende probabilmente da qualcosa dopo il codice che hai mostrato. Forse non hai chiuso l'ultima select?

    E poi volevo sapere come si memorizzavano ii tre campi giorno, mese anno. Grazie.
    Hai già il database o devi ancora disegnarlo? In quest'ultimo caso, c'è il tipo DATE di SQL, che accetta valori nella forma aaaa-mm-dd.
    Altrimenti dipende da come hai scelto di impostare la base di dati.

  11. #11
    Guest

    Predefinito

    Allora per la prima domanda controllo le chiusure dei select e ti farò sapere, se c'è la faccio entro stasera. Per la seconda domanda ho letto diversi post che preveriscon (e anche io) mettere varchar(8), la struttura del db c'è ma indifferente perchè la posso rifare. Come ripeto è in locale non provoco nessun danno. Io preferirei optare per la scelta del varchar.

  12. #12
    Guest

    Predefinito

    Ho verificato ora e mi ero mangiato una select alla fine. Inoltre ti volevo chiedere se era possibile mettere un opzione vuota di scelta su entrambi i campi. In modo tale che non compare di primo acchitto 01/01/1990, ma compare "vuoto". Grazie della dritta ella select non chiusa.

  13. #13
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    se era possibile mettere un opzione vuota di scelta su entrambi i campi
    Che io sappia non c'è un metodo "nativo", ma http://stackoverflow.com/a/8442831/6277986 suggerisce un trucco.

    Per la memorizzazione, se vuoi usare VARCHAR(8) (o CHAR(8), dato che le date hanno esattamente lunghezza 8 caratteri), una codifica abbastanza furba potrebbe essere [la stessa di DATE]: yyyymmdd.
    Memorizzando prima l'anno, l'ordinamento lessicografico sulle stringhe corrisponde all'ordinamento temporale sulle date (...circa, in quanto puoi avere stringhe che non sono date).
    La codifica è una semplice concatenazione con 0-pad:
    Codice PHP:
    $date_encoded = sprintf("%04d%02d%02d", $year, $month, $day);
    La decodifica è l'operazione inversa:
    Codice PHP:
    list($year, $month, $day) = sscanf($date_encoded, "%4d%2d%2d");
    La decodifica può fallire se l'input non è una valida codifica di una data (ad esempio "aaaaaaaa" è un valore lecito per un CHAR(8), ma la decodifica fallisce).

    In alternativa puoi rappresentare una data come un intero (classico timestamp, modulo il fatto che ti interessano i giorni e non i secondi), il che fa risparmiare sull'occupazione della base di dati (di fatto è così che viene memorizzato il tipo DATE).

  14. #14
    Guest

    Predefinito

    Grazie per le spiegazioni. Quindi nell'inserimento dovrei mettere semplicemente $nascita e lui dovrebbe memorizzare nel Db ????

  15. #15
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Sì, se in $nascita codifichi la data poi la puoi inserire nel database.

  16. #16
    Guest

    Predefinito

    Ok grazie. La discussione si può chiudere. Ti farò sapere appena possibile

  17. #17
    L'avatar di tdef
    tdef non è connesso Utente giovane
    Data registrazione
    12-12-2011
    Residenza
    Udine
    Messaggi
    81

    Predefinito

    C'è un errore di fondo in quello che fai :) che succede se scrivo che sono nato il 31 febbraio?
    In altre parole ma lo fai un controllo sui dati immessi o ti fidi di chiunque passi dal tuo sito? Spero vivamente di no :D
    Poi sul database, meglio di varchar o char è usare le cose così come sono state fatte :) per un campo data usa sicuramente un campo DATE, che come ti hanno già segnalato crea una campo in formato ISO8601 cioè anno-mese-giorno questo poi rende facili le conversioni.
    In effetti la data è un problema serio, io l'ho risolto così:
    Codice PHP:
    // formazione dei tre select:
    // giorno
    echo '<p><label for="giorno">Giorno:</option><select name="giorno">';
    $option = "<option value=\"0\">Scegli il giorno</option>\n";
    for (
    $i = 0; $i <= 31; $i++ ) $option .= "<option value=\"$i\">$i</option>\n";
    echo
    $option . "</select>\n";
    unset(
    $option );

    // mese
    $mese = array( '','gennaio','febbraio','marzo','aprile','maggio','giugno','luglio','agosto','settembre','ottobre','novembre','dicembre' );
    echo
    '<p><label for="mese">Mese:</option><select name="mese">';
    $option = "<option value=\"0\">Scegli il mese</option>\n";
    for (
    $i = 1; $i <= 12; $i++ ) $option .= "<option value=\"$i\">{$mese[$i]}</option>\n";
    echo
    $option . "</select>\n";
    unset(
    $option );

    // anno
    echo '<p><label for="anno">Anno:</option><select name="anno">';
    $option = "<option value=\"0\">Scegli l'anno</option>\n";
    for (
    $i = date( 'Y' ); $i > 1900; $i-- ) $option .= "<option value=\"$i\">$i</option>\n";
    echo
    $option . "</select>\n";
    unset(
    $option );
    quindi una volta premuto il tasto di invio del form, verifico i dati e tra l'altro anche il giorno, il mese e l'anno.
    In realtà nel mio caso ho fatto tutto con l'uso dei filtri del php, ma comunque la parte di controllo di quanto immesso va fatta a mano ed è molto complessa perché come si sa... con maggio, giugno e settembre ... di 28 ce nè uno... tutti gli altri ne han 31... insomma la filastrocca la dice lunga e nemmeno tiene conto degli anni bisestili, quindi:
    Codice PHP:
    switch ( (int)$input['mese'] ) {
    case
    4: case 6: case 9: case 11: // Mesi di 30 giorni
    if ( (int)$input['giorno'] > 30 ) {
    $errore = 'Controlla il tuo giorno di nascita, il mese di ' . $mesi[ (int)$input['mese'] ] . ' che hai inserito, ha al massimo 30 giorni.';
    }
    break;
    case
    2: // Febbraio
    if (( (int)$input['anno'] % 4 == 0 && (int)$input['anno'] % 100 !=0 ) || (int)$input['anno'] % 400 == 0 ) {
    if ( (int)
    $input['giorno'] > 29 ) {
    $errore = 'Controlla il tuo giorno di nascita, il mese di ' . $mesi[ (int)$input['mese'] ] . ' ha al massimo 29 giorni per l\'anno ' .$input['anno'] . ' che è bisestile';
    }
    } else {
    if ( (int)
    $input['giorno'] > 28 ) {
    $errore = 'Controlla il tuo giorno di nascita, il mese di ' . $mesi[ (int)$input['mese'] ] . ' ha al massimo 28 giorni.';
    }
    }
    break;
    }
    Dove $input è un array che viene dal controllo generale di quanto immesso via post e contiene tra gli altri dati anche la data nel formato giorno, mese e anno.
    Lo switch ovviamente non controlla i mesi di 31 giorni in quanto è inutile farlo, mentre verifica che i mesi di 30 giorni non superino appunto il 30° giorno nel mese e così pure per febbraio che non superi 28 giorni o 29 quando l'anno è bisestile.
    La parte implementativa del database ovviamente la lascio a te, come pure il controllo sull'array post ( o get ). :D
    Ultima modifica di tdef : 18-05-2016 alle ore 14.45.08
    Tower Defense giochi in Flash

  18. #18
    Guest

    Predefinito

    Grazue delle dritte. Spero di poterlo provare al più presto. Come controllo ho messo request x ogni campo

  19. #19
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    In realtà nel mio caso ho fatto tutto con l'uso dei filtri del php, ma comunque la parte di controllo di quanto immesso va fatta a mano ed è molto complessa perché [...]
    Perché farla a mano, quando c'è checkdate?

  20. #20
    L'avatar di tdef
    tdef non è connesso Utente giovane
    Data registrazione
    12-12-2011
    Residenza
    Udine
    Messaggi
    81

    Predefinito

    Citazione Originalmente inviato da fabiodefe Visualizza messaggio
    Grazue delle dritte. Spero di poterlo provare al più presto. Come controllo ho messo request x ogni campo
    Scusa e perché? Non sai se usi l'array POST o GET?
    $_REQUEST si usa se devi usare campi da valori eterogenei ma se sai di usare solo post o get usa questi.
    Con Request inoltre è possibile facilmente sovrascrivere a runtime i valori di get e post ( http://php.net/manual/it/reserved.variables.request.php )
    Tower Defense giochi in Flash

  21. #21
    Guest

    Predefinito

    Scusa sbaliate a scrivere volevo dire required
    Ultima modifica di fabiodefe : 18-05-2016 alle ore 15.40.02

  22. #22
    Guest

    Predefinito

    Salve a tutti,

    Chiedo scusa per la mia assenza ma sono stato fuori una settimanella e tempo per programmare zero. Ma ieri sera siamo ritornati ed oggi ho tutta una giornata davanti. Finalmente potrò attuare i vosrti consigli e suggerimenti. Sepro di non trovare eccessive difficoltà. Grazie innanzi tutto derll'aiuto e della collaborazione.

  23. #23
    Guest

    Predefinito

    Ciao tdef,

    Oggi ho potuto finalmente mettere in pratica il tuo esempio della selezione data di nascita. Vorrei chiederti una cosa che non ci sono riuscito. Se io volessi mettere ua riga vuota nel selettore ossia: "seleziona Giorn: " e poi sotto una riga vuota come debbo fare ???? So che è na stronzata (scusa il termine ma al mio occhi piace di più se c'è la riga. Grazie.

  24. #24
    Guest

    Predefinito problemi con l'inserimento della data di nascita

    Ciao a tutti,

    Allora ho eseguito una prova per la memorizzazione dati nonchè della data di nascita strutturata con tre select suggeritomi da tdef, e ho messo come campo $nascita sia nel db che come etichetta, ma mi da il seguente errore quando vado a cliccare su "invio dati"

    Inserimento non eseguito. Errore: Column count doesn't match value count at row 1
    Cosa vuol dire ????? Questo è un parziale del listato:

    Codice PHP:

    <form method="POST" autocomplete ="off" action="<?php $_SERVER['PHP_SELF'] ?>">
    <p> <p> <p>
    <label for =campo-cognome"> Cognome: </label> <input type ="text" name = "cognome" required />

    </p> </p> </p>
    <p> <p><label for =campo-nome"> Nome: </label> <input type ="text" name = "nome" required/> </p></p>

    Selezionare la data di nascita (gg/mm/yyyy):

    <?php

    // formazione dei tre select:
    // giorno
    echo '<label for="giorno"></option><select name="giorno" required>';
    $option = "<option value=\"0\">Scegli il giorno:</option> \n";
    for (
    $i = 1; $i <= 31; $i++ ) $option .= "<option value=\"$i\">$i</option>\n";
    echo
    $option . "</select>\n";
    unset(
    $option );

    // mese
    $mese = array( '','01','02','03','04','05','06','07','08','09','10','11','12' );
    echo
    '<label for="mese"> </option><select name="mese">';
    $option = "<option value=\"0\">Scegli il mese: <p></option> \n";
    for (
    $i = 1; $i <= 12; $i++ ) $option .= "<option value=\"$i\">{$mese[$i]}</option>\n";
    echo
    $option . "</select>\n";
    unset(
    $option );

    // anno
    echo '<label for="anno"> </option><select name="anno">';
    $option = "<option value=\"0\">Scegli l'anno</option>\n";
    for (
    $i = date( 'Y' ); $i > 1900; $i-- ) $option .= "<option value=\"$i\">$i</option>\n";
    echo
    $option . "</select>\n";
    unset(
    $option );

    switch ( (int)
    $input['mese'] ) {
    case
    4: case 6: case 9: case 11: // Mesi di 30 giorni
    if ( (int)$input['giorno'] > 30 ) {
    $errore = 'Controlla il tuo giorno di nascita, il mese di ' . $mesi[ (int)$input['mese'] ] . ' che hai inserito, ha al massimo 30 giorni.';
    }
    break;
    case
    2: // Febbraio
    if (( (int)$input['anno'] % 4 == 0 && (int)$input['anno'] % 100 !=0 ) || (int)$input['anno'] % 400 == 0 ) {
    if ( (int)
    $input['giorno'] > 29 ) {
    $errore = 'Controlla il tuo giorno di nascita, il mese di ' . $mesi[ (int)$input['mese'] ] . ' ha al massimo 29 giorni per l\'anno ' .$input['anno'] . ' che è bisestile';
    }
    } else {
    if ( (int)
    $input['giorno'] > 28 ) {
    $errore = 'Controlla il tuo giorno di nascita, il mese di ' . $mesi[ (int)$input['mese'] ] . ' ha al massimo 28 giorni.';
    }
    }
    break;
    }
    ?>
    </select>
    <p> <p><label for =campo-username"> Username: </label> <input type ="text" name = "username" required/> </p></p>

    <p> <p><label for =campo-email"> E-Mail: </label> <input type ="email" name = "email" required/> </p></p>

    <p> <p><label for =campo-ripemail"> Ripeti-Email: </label> <input type ="email" name = "ripemail" required/> </p></p>

    <p> <p><label for =campo-password"> Password: </label> <input type ="password" name = "password" required/> </p></p>

    <p> <p><label for =campo-rippassword"> Ripeti-password: </label> <input type ="password" name = "rippassword" required/> </p></p>

    <p> <p><label for =campo-nascita"> Selezionare la data di nascita: </label>

    <div align ="center">
    <input type="submit" name="reg" value="Invio Iscrizione" />
    </div>
    </div>

    </form>

    </head>
    <body>
    poi qui sotto c'è l'insert:

    Codice PHP:

    if(!empty($_POST)){

    # Inizializzazioni variabili

    $id = mysqli_real_escape_string($con, $_POST['id']);
    $cognome = mysqli_real_escape_string($con, $_POST['cognome']);
    $nome = mysqli_real_escape_string($con, $_POST['nome']);
    $nascita = mysqli_real_escape_string($con, $_POST['nascita']);
    $nazionalita = mysqli_real_escape_string($con, $_POST['nazionalita']);
    $citta = mysqli_real_escape_string($con, $_POST['citta']);
    $prov = mysqli_real_escape_string($con, $_POST['prov']);
    $username = mysqli_real_escape_string($con, $_POST['username']);
    $email = mysqli_real_escape_string($con, $_POST['email']);
    $ripemail = mysqli_real_escape_string($con, $_POST['ripemail']);
    $password = mysqli_real_escape_string($con, $_POST['password']);
    $rippassword = mysqli_real_escape_string($con, $_POST['rippassword']);

    .....

    $query=("INSERT INTO utenti (cognome, nome, nascita, nazionalità, citta, prov, email, password, nascita) "
    . "VALUES('$cognome','$nome','$nascita','$username','$password')");
    $result=mysqli_query($con,$query);


    if(
    $result){
    echo(
    "<p> Inserimento avvenuto correttamente <p>");
    } else{
    echo(
    "Inserimento non eseguito. Errore: ".mysqli_error($con));
    }
    }


    ?>
    Ovviamente alcuni dati ancora non ci sono ma me li sono preparati come città, nazionalità, prov. Dove sbaglio ??? Grazie spero che qualcuno mi possa aiutare. Grazie e buon pranzo a tutti.

  25. #25
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Quell'errore nello specifico si riferisce all'inserimento:
    Codice PHP:
    $query=("INSERT INTO utenti (cognome, nome, nascita, nazionalità, citta, prov, email, password, nascita) "
    . "VALUES('$cognome','$nome','$nascita','$username','$password')");
    Nella query indichi che stai per inserire "cognome, nome, nascita, nazionalità, citta, prov, email, password, nascita", ma poi passi solo cognome, nome, data di nascita, nome utente e password. Da qui l'errore "Column count doesn't match value count", ovvero "il numero di colonne indicate non coincide col numero di valori passati".
    Passa tutti i valori richiesti, oppure indicane di meno nella prima parte della query (se possibile, ovvero se i campi omessi accettano NULL o hanno un valore di default).

    Edit: Ho anche notato che il seguente brano di codice ha qualche problema:
    Codice PHP:
    switch ( (int)$input['mese'] ) {
    case
    4: case 6: case 9: case 11: // Mesi di 30 giorni
    if ( (int)$input['giorno'] > 30 ) {
    $errore = 'Controlla il tuo giorno di nascita, il mese di ' . $mesi[ (int)$input['mese'] ] . ' che hai inserito, ha al massimo 30 giorni.';
    }
    break;
    case
    2: // Febbraio
    if (( (int)$input['anno'] % 4 == 0 && (int)$input['anno'] % 100 !=0 ) || (int)$input['anno'] % 400 == 0 ) {
    if ( (int)
    $input['giorno'] > 29 ) {
    $errore = 'Controlla il tuo giorno di nascita, il mese di ' . $mesi[ (int)$input['mese'] ] . ' ha al massimo 29 giorni per l\'anno ' .$input['anno'] . ' che è bisestile';
    }
    } else {
    if ( (int)
    $input['giorno'] > 28 ) {
    $errore = 'Controlla il tuo giorno di nascita, il mese di ' . $mesi[ (int)$input['mese'] ] . ' ha al massimo 28 giorni.';
    }
    }
    break;
    }
    • I cast espliciti non sono necessari, le stringhe contenenti numeri sono convertite implicitamente quando operandi di operatori aritmetici
    • mancano i controlli sui mesi di 31 giorni: il codice attualmente accetta date come "92 di gennaio"
    • non c'è controllo sul numero del mese: il codice attualmente accetta "54" come mese

    Si possono inserire altri controlli, oppure sostituire l'intero codice:
    Codice PHP:
    if (!checkdate($input['mese'], $input['giorno'], $input['anno'])) {
    $errore = "Data non valida";
    }
    (PS: non credo ci sia necessità di stampare un messaggio d'errore come "aprile ha al massimo 30 giorni", la maggior parte degli utenti over 5 dovrebbe essere in grado di rendersene conto da sola )
    Ultima modifica di mzanella : 26-05-2016 alle ore 14.28.19

  26. #26
    Guest

    Predefinito

    Ciao mzanella,

    Ero andato molto vicino al capire l'errore ma volevo un ulteriore conferma. In pratica i campi debbono essere quelle ne uno di più o ne uno di meno a meno che non si amplia il db. Solo un ultimo dubbio, come hai potuto notare ho suddvisio gg/mm/aaaa in tre select ora l'etichetta non esiste, ossia è solo testo html. Come faccio a memorizzare le tre select ??? Devono essere tre campi separati ??? Quindi in questa maniera qua:


    $giorno = mysqli_real_escape_string($con, $_POST['giorno']);
    $mese = mysqli_real_escape_string($con, $_POST['mese']);
    $anno = mysqli_real_escape_string($con, $_POST['anno']);
    Oppure c'è qualche altro metodo e poi a posto di nascita dovrei mettere $giorno, $mese, $anno ??? Grazie.

  27. #27
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Per la colonna nascita nel database mi sembra di ricordare stessi usando VARCHAR(8). In questo caso:
    Codice PHP:
    $nascita = sprintf("%04d%02d%02d", $anno, $mese, $giorno);
    che produce valori come "20160526" (26 maggio 2016). Fatto questo puoi inserire $nascita nella base di dati con il codice che già stai usando (ovviamente dopo aver sistemato la questione del numero di campi che non coincide).

  28. #28
    Guest

    Predefinito

    Ok grazie e la scritta in html ovviamente la lascio

  29. #29
    Guest

    Predefinito problemi con l'inserimento della data di nascita

    Ciao mzanella,

    Grazie della segnalazione io avrei corretto in questa maniera qua:

    Codice PHP:

    Selezionare la data di nascita (gg/mm/yyyy):

    <?php

    // formazione dei tre select:
    // giorno
    echo '<label for="giorno"></option><select name="giorno" required>';
    $option = "<option value=\"0\">Scegli il giorno:</option> \n";
    for (
    $i = 1; $i <= 31; $i++ ) $option .= "<option value=\"$i\">$i</option>\n";
    echo
    $option . "</select>\n";
    unset(
    $option );

    // mese
    $mese = array( '','01','02','03','04','05','06','07','08','09','10','11','12' );
    echo
    '<label for="mese"> </option><select name="mese">';
    $option = "<option value=\"0\">Scegli il mese: <p></option> \n";
    for (
    $i = 1; $i <= 12; $i++ ) $option .= "<option value=\"$i\">{$mese[$i]}</option>\n";
    echo
    $option . "</select>\n";
    unset(
    $option );

    // anno
    echo '<label for="anno"> </option><select name="anno">';
    $option = "<option value=\"0\">Scegli l'anno</option>\n";
    for (
    $i = date( 'Y' ); $i > 1900; $i-- ) $option .= "<option value=\"$i\">$i</option>\n";
    echo
    $option . "</select>\n";
    unset(
    $option );

    switch ( (int)
    $input['mese'] ) {
    case
    4: case 6: case 9: case 11: // Mesi di 30 giorni
    if ( (int)$input['giorno'] > 30 ) {
    $errore = 'Controlla il tuo giorno di nascita, il mese di ' . $mesi[ (int)$input['mese'] ] . ' che hai inserito, ha al massimo 30 giorni.';
    }
    break;
    case
    2: // Febbraio
    if (( (int)$input['anno'] % 4 == 0 && (int)$input['anno'] % 100 !=0 ) || (int)$input['anno'] % 400 == 0 ) {
    if ( (int)
    $input['giorno'] > 29 ) {
    $errore = 'Controlla il tuo giorno di nascita, il mese di ' . $mesi[ (int)$input['mese'] ] . ' ha al massimo 29 giorni per l\'anno ' .$input['anno'] . ' che è bisestile';
    }
    } else {
    if ( (int)
    $input['giorno'] > 28 ) {
    $errore = 'Controlla il tuo giorno di nascita, il mese di ' . $mesi[ (int)$input['mese'] ] . ' ha al massimo 28 giorni.';
    }
    }
    break;
    }

    A posto dello switch ho sotstituio con checkdate come da te suggeritomi. Quind il listato corretto è il seguente:

    Codice PHP:
    Selezionare la data di nascita (gg/mm/yyyy):

    <?php

    // formazione dei tre select:
    // giorno
    echo '<label for="giorno"></option><select name="giorno" required>';
    $option = "<option value=\"0\">Scegli il giorno:</option> \n";
    for (
    $i = 1; $i <= 31; $i++ ) $option .= "<option value=\"$i\">$i</option>\n";
    echo
    $option . "</select>\n";
    unset(
    $option );

    // mese
    $mese = array( '','01','02','03','04','05','06','07','08','09','10','11','12' );
    echo
    '<label for="mese"> </option><select name="mese">';
    $option = "<option value=\"0\">Scegli il mese: <p></option> \n";
    for (
    $i = 1; $i <= 12; $i++ ) $option .= "<option value=\"$i\">{$mese[$i]}</option>\n";
    echo
    $option . "</select>\n";
    unset(
    $option );

    // anno
    echo '<label for="anno"> </option><select name="anno">';
    $option = "<option value=\"0\">Scegli l'anno</option>\n";
    for (
    $i = date( 'Y' ); $i > 1900; $i-- ) $option .= "<option value=\"$i\">$i</option>\n";
    echo
    $option . "</select>\n";
    unset(
    $option );

    if (!
    checkdate($input['mese'], $input['giorno'], $input['anno'])) {
    $errore = "Data non valida";
    }
    Se non ho capito male in questo modo è corretto giusto ???? Grazie.

  30. #30
    Guest

    Predefinito

    Ciao mzanella,

    Allora ho modificatìo ecorretto tutto quanto quello che mi avete suggerito di fare. Ho fatto una prova, mi memorizza ora tutto correttamente, ma non mi memorizza la data come mai ????? Il campo rimane vuoto. Ho paura che la semplice scritta in html non vada bene ma non saprei come aggirare l'ostacolo. Qualche idea in merito ??? Grazie.

Pagina 1 di 2 12 UltimoUltimo

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •