Failed to compare dates before writing to bank

4

I'm trying to do a date validation, if the date DataInicial is less than DataAtual , ie it can not be retroactive the script should return me an error message with json_encode not allowing the stream continue, which is not happening. What I did was, see:

 if ($_POST["Operacao"] == 'Inserir') { 

    $IdColaborador = $_POST['IdColaborador'];
    $IdUnidade = $_POST['IdUnidade'];
    $IdDepartamento = $_POST['IdDepartamento']; 

    // DATA ATUAL
    $DataAtual = date('Y-m-d');

    // FORMATANDO A DATA PARA GRAVAÇÃO NO BD    
    $DataInicial = date('Y-m-d',strtotime(str_replace('/', '-', $_POST['dDataInicial']))); // converte datas em formato 'br' para sql.
    $DataFinal = date('Y-m-d',strtotime(str_replace('/', '-', $_POST['dDataFinal']))); // converte datas em formato 'br' para sql.  

    // VERIFICANDO SE DATA É RETROATIVA
    if ( strtotime($DataInicial) < strtotime($DataAtual) ) {
        $aretorno["msg"] = "A data não pode ser retroativa";
        $aretorno["status"] = "ERRO";   
    }

    $dHoraInicial = $_POST['dHoraInicial'];
    $dHoraFinal = $_POST['dHoraFinal'];
    $sAssunto = $_POST['sAssunto'];
    $sLocal = $_POST['sLocal']; 
    $sDescricao = $_POST['sDescricao'];

    mysql_select_db($database_pcon, $pcon);
    $sql = "INSERT INTO agendaMural (IdColaborador, IdUnidade, IdDepto, DataInicial, HoraInicial, DataFinal, HoraFinal, Assunto, Local, Descricao ) VALUES ('$IdColaborador', '$IdUnidade', '$IdDepartamento', '$DataInicial', '$dHoraInicial', '$DataFinal', '$dHoraFinal', '$sAssunto', '$sLocal', '$sDescricao')";
    $query = @mysql_query($sql,$pcon);

    if ($query) {
        $aretorno["msg"] = "Registro inserido com sucesso";
    } else {
        $aretorno["msg"] = "Erro: " . $sql . "<br>" . mysql_error($pcon);
        $aretorno["status"] = "ERRO";
    }
}

// FECHA CONEXÃO COM BD
mysql_close($pcon);

// RETORNAR STATUS - MENSAGEM DA EXECUÇÃO
header('Content-Type: application/json');
echo json_encode($aretorno);
    
asked by anonymous 12.11.2015 / 18:29

2 answers

5

You can check whether the date is retroactive with the DateTime class by using the invert , returning% with% means that the result of the calculation is negative if 1 is positive, use diff () to calculate the difference between the dates.

<?php

$hoje = new DateTime();
$dataInicial = DateTime::createFromFormat('d/m/Y', '10/11/2015');

$resultado = $hoje->diff($dataInicial);

if($resultado->invert){
    echo 'data retroativa';
}else{
    echo 'data no periodo';
}
    
12.11.2015 / 18:39
1
<?php

$hoje = new DateTime();
$dataInicial = DateTime::createFromFormat('d/m/Y', '10/11/201<?php

$hoje = new DateTime();
$dataInicial = DateTime::createFromFormat('d/m/Y', '10/11/2015');

$resultado = $hoje->diff($dataInicial);

if($resultado->invert){
    echo 'data retroativa';
}else{
    echo 'data no periodo';
}5');

$resultado = $hoje->diff($dataInicial);

if($resultado->invert){
    echo 'data retroativa';
}else{
    echo 'data no periodo';
}

And if in this example of invert I want to put an else if for the date is the same I put an evo type "In day"?

    
17.07.2018 / 23:26