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.