Archivi tag: gestione date

PHP: gestione delle date

Qui di seguito riporto uno stralcio di codice PHP che permette di verificare la validità della data e dell’ora inserita in un apposito campo di input testuale. Per la precisione tale codice può essere utilizzato nell’ambito dell’invio posticipato degli SMS. Se la data è futura o uguale a quella odierna e l’ora è strettamente maggiore di quella attuale, l’SMS può essere salvato nel database in attesa dell’invio programmato.

if(isset($_POST['data']) && $_POST['data'] != '' && $_POST['data'] != 'Data')
{
$data = $_POST['data'];
if(preg_match('/^[0-9]{2}-{1}[0-9]{2}-{1}[0-9]{4}$/', $data) && strlen($data) <= 10) //il backslash (da inserire prima dei "-") è il carattere di escape da usare poichè il "-" ha un significato anche nell'ambito dell'espressione regolare. Controllo inoltre (lato server) che la data inserita non sia costituita da più di 10 caratteri
{
$data1=explode("-",$data); //ricavo il giorno, il mese e l'anno usando il "-" come separatore

$giorno = $data1[0];
$mese = $data1[1];
$anno = $data1[2];
if (@checkdate($mese, $giorno, $anno) == TRUE) //nel caso in cui non è vera la condizione, devo silenziare l'errore restituito da checkdate (misura necessaria per contrastare eventuali attacchi basati sul blind SQL Injection
{ //se la data è corretta controllo l'ora
if(isset($_POST['ora']) && $_POST['ora'] != '' && $_POST['ora'] != 'Ora')
{
$ora = $_POST['ora'];
if(preg_match('/^[0-9]{2}:{1}[0-9]{2}:{1}[0-9]{2}/', $ora) && strlen($ora) <= 8)
{
$ora1=explode(":",$ora);
//con il casting converto la stringa in intero
$ore = (int) $ora1[0];
$minuti = (int) $ora1[1];
$secondi = (int) $ora1[2];
if ($ore <= 24 && $ore >= 00 && $minuti <= 59 && $minuti >= 00 && $secondi <= 59 && $secondi >= 00) //nel caso in cui non è vera la condizione, devo silenziare l'errore restituito da checkdate
{
$time = mktime($ore,$minuti,$secondi,$mese,$giorno,$anno);
if($time > time()) //se la data è futura
{
$datatotale = $anno . "-" . $mese . "-" . $giorno . " " . $ore . ":" . $minuti . ":" . $secondi;
}
}
else
{
$errore = 'Ora non valida';
}
}
else
{
$errore = 'Formato ora non valido';
}
}
else
{
$errore = "Devi scegliere l'ora in cui inviare il messaggio";
}
}
else
{
$errore = 'Data non valida';
}
}
else
{
$errore = 'Formato data non valido';
}
}
else
{   
$timestamp = time(); //se non è stata settata alcuna data utilizzo il timestamp attuale
$datatotale = date("Y-m-d H:i:s", $timestamp);
}

Il codice è ampiamente commentato. Per ulteriori chiarimenti non esitate a contattarmi. A presto.