Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654

    Formato della data passata

    Da un form mi arriva una variabile che dovrò rendere di tipo data; arriva nel formato aaaa-mm-gg.
    Siccome è un campo di input devo controllare che la data passata sia corretta. Qual è il modo migliore per farlo? Cioè, devo usare espressioni regolari o esistono funzioni già create allo scopo?

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    dai uno sguardo a questa per verificare che una data esista (tiene conto di anni bisestili ecc).
    http://se2.php.net/manual/it/function.checkdate.php
    Devi esplodere la tua stringa visto che devi passare g,m e a separatamente alla funzione.

    Per verificare solo che sia nel formato richiesto aaaa-mm-gg
    echo preg_match("#^\d{4}-\d{2}-\d{2}$#",$data) ? 'valida' : 'non valida';
    ovviamente questa se ne infischia se passi 2006-02-31.


    personalmente preferisco usare tre campi distinti per passare una data.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    Nel link che mi hai passato ho visto che c'è un esempio che fa al caso mio. Vedo se riesco a implementarlo.
    Grazie per l'aiuto

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Formato della data passata

    Originariamente inviato da Horus-Ra
    Da un form mi arriva una variabile che dovrò rendere di tipo data; arriva nel formato aaaa-mm-gg.
    Siccome è un campo di input devo controllare che la data passata sia corretta. Qual è il modo migliore per farlo? Cioè, devo usare espressioni regolari o esistono funzioni già create allo scopo?
    Esempio:
    codice:
    if (preg_match ("/^(\d{4})-(\d{2})-(\d{2})$/", $data, $arr_dati))
    {
        $anno = $arr_dati[1];
        $mese = $arr_dati[2];
        $giorno = $arr_dati[3];
        
        ....
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    :master: Qualcosa non torna...

    Ho scritto questa funzione prendendola dall'esempio di cui sopra:

    Codice PHP:
    function controllo_data($date_string) {
      
    $result false;
      if (
    ereg('^(([0-9]{2})|([0-9]{4}))[-]([0-9]{1,2})[-]([0-9]{1,2})$'$date_string)) {
       
    $date_array split('[-]'$date_string);
       
    /* Prova MM-DD */
       
    $m=$date_array[1]; $d=$date_array[2]; $y=$date_array[0];
       
    $result checkdate($m$d$y);
       
    /* MM-DD ha fallito, prova DD-MM */
       
    if ($result===false) {
         
    $m=$date_array[2]; $d=$date_array[1]; $y=$date_array[0];
         
    $result checkdate($m$d$y);
       }
      }
      return 
    $result;

    E l'ho richiamata con:

    Codice PHP:
    $data_passata=$_POST['data'];
    $data=controllo_data($data_passata); 
    Non mi dà errori, però se dopo faccio l'insert nel database è come se non mi prendesse la data (mi mette il valore di default che è nel database).

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Codice PHP:
    $data "2004/02-30";

    function 
    valida($stringa){
    if (!
    preg_match("#^\d{4}-\d{2}-\d{2}$#",$stringa))
    return 
    'La data deve essere inserita nel formato AAAA-MM-GG';
    else {
    list(
    $anno,$mese,$giorno) = explode('-',$stringa);
    if (!
    checkdate($mese,$giorno,$anno)) return 'La data inserita non esiste';
    }
    return 
    $stringa;
    }

    $data valida($data);
    echo 
    $data
    edit. occhio che il forum si mangia i \ prima delle d. quota il messaggio per averlo scritto correttamente.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    Grazie, adesso funziona alla grande
    Per curiosità, i simboli # all'inizio e alla fine dell'espressione regolare a cosa servono? Delimitano l'espressione?

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Esatto. Sono i delimitatori.

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Horus-Ra
    Per curiosità, i simboli # all'inizio e alla fine dell'espressione regolare a cosa servono? Delimitano l'espressione?
    Esatto, tipicamente viene usato '/' ma puoi sostituirlo, a patto che inizio/fine siano uguali.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    654
    Grazie a entrambi

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.