Validare una data

Ciao

Vorrei fare in modo di controllare se l'utente ha inserito la data nel formato corretto:

18/12/2010 (18 dicembre 2010)

L'utente può anche non inserire la data ma se la inserisce deve essere sempre nel formato di cui sopra.

Ho provato a usare un po' le funzioni checkdate ma sbaglio qualcosa.

Questo il codice:

      // $inizio è la variabile in cui è salvata la data inserita dall'utente in un campo imput del form
    
      function checkData($date)
{
    if (!isset($date) || $date=="")
    {
        return false;
    }
  
    list($dd,$mm,$yy)=explode("/",$date);
    if ($dd!="" && $mm!="" && $yy!="")
    {
    if (is_numeric($yy) && is_numeric($mm) && is_numeric($dd))
        {
            return checkdate($mm,$dd,$yy);

        }
    }  
    return false;

}

$controllo = checkData($inizio);

if(($controllo != 1)|| ($inizio != ""))
{ 
   echo "data sbagliata";
                        
   }else{echo "data formato esatta!";}
   }

Potete aiutarmi?

Grazie

inviato 5 anni fa
frankphp
modificato 5 anni fa
X 0 X

accidenti  ;D :buck: :-[ :-[ :-[

con questa modifica sembra funzionare:

if(($controllo != 1)&& ($inizio != ''))

Se avete comunque qualche suggerimento...

grazie

risposto 5 anni fa
frankphp
X 0 X

uff mi sono incartato di nuovo  :-[ :o ;D

Posto tutto il codice della funzione di ricerca nel db in base alle date inserite:

function ricerca($inizio, $fine){      

 

   function checkData($date)

  {  

    list($dd,$mm,$yy)=explode("/",$date);

    if ($dd!="" && $mm!="" && $yy!="")

    {

    if (is_numeric($yy) && is_numeric($mm) && is_numeric($dd))

        {

            return checkdate($mm,$dd,$yy);

        }

    }  

    return false;

}

$controlloin = checkData($inizio);

$controllofin = checkData($fine);

if ((($controlloin != 1)&& ($inizio != '')) && (($controllofin != 1)&& ($fine != '')))

 {

      echo "<center><b>Le date inserite non sono valide</b> &nbsp;&nbsp;

      <input type=\"button\" value=\"Indietro\" onclick=\"history.back(1)\"></center>";

   }

elseif(($controlloin != 1)&& ($inizio != ''))

{ 

   echo "<center><b>la data d'inizio inserita non è valida.</b> &nbsp;&nbsp;

      <input type=\"button\" value=\"Indietro\" onclick=\"history.back(1)\"></center>";                        

   }

   

  elseif(($controllofin != 1)&& ($fine != ''))

 { 

   echo "<center><b>la data finale inserita non è valida.</b> &nbsp;&nbsp;

      <input type=\"button\" value=\"Indietro\" onclick=\"history.back(1)\"></center>";                  

   }

   

   if ((($controlloin == 1)&& ($inizio != '')) && (($controllofin == 1)&& ($fine != '')))  

   {

      

       list($giorno,$mese,$anno) = split("/",$inizio);

    $datain = mktime(0,0,0,$mese,$giorno,$anno);

    

     list($giorno,$mese,$anno) = split("/",$fine);

    $datafin = mktime(0,0,0,$mese,$giorno,$anno);

    

    if ($datain>$datafin)

    {

      echo "<center><b>la data d'inizio ricerca non può essere posteriore alla data di fine ricerca.</b> &nbsp;&nbsp;

      <input type=\"button\" value=\"Indietro\" onclick=\"history.back(1)\"></center>";

   }

   

}

  }

..allora la funzione di cui sopra prima di lanciare le query di ricerca (ancora da scrivere) fa alcuni controlli.

Come dicevo sopra l'utente può anche non inserire la data ma se la inserisce deve essere sempre nel formato

che ho scelto.

La funzione controlla quindi se è nel formato richiesto: entrambe, la prima e la seconda; altrimenti avverte l'utente che può tornare alla pagina precedente.

Il problema ce l'ho con il controllo finale che verifica se la data iniziale è posteriore.

Se è posteriore stampa il solito messaggio di errore ma dopo non so come procedere.

Se le date sono state inserite NO PROBLEM ma poi

non so come comportarmi se la prima o la seconda data non è stata inserita, perchè queste due ipotesi sono entrambe giuste (l'Utente inserendo solo la prima avvia una query che seleziona tutti i record a partire da quella data in poi e viceversa se inserisce la seconda data avvia una query che seleziona tutti i record fino a una certa data). Con il codice delle query non dovrei avere difficoltà, ho già fatto una cosa del genere,

però ora non so come comportarmi con gli if che incominciano a cozzare fra loro.

Mi potete aiutare a venirne a capo?

grazie

ps: si lo so il codice non è un granchè :'(

risposto 5 anni fa
frankphp
modificato 5 anni fa
X 0 X

una modifica alla funzione checkData($date)

in questo modo:

if ($date =='')

      {return true;}

.....

Potrebbe farmi risparmiare di inserire anche il controllo sul campo vuoto (con true lo rendo valido),

ma c'è il problema poi che la funzione mktime() dell'ultimo controllo mi restituisce errore:

Warning: mktime() expects parameter 5 to be long, string given in.......etc

 :-\

Grazie ancora

risposto 5 anni fa
frankphp
modificato 5 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda