php ошибка проверки даты mysql

предостережение: я новичок в php

Я читаю 2 даты из формы в формате mysql (т.е. ГГГГ-ММ-ДД) и пытаюсь проверить их правильность на наличие ошибок, и что одна из них меньше другой

if(!empty($day1) && !empty($day2)){
$sndate=array();
$sndate = explode('-',$day1);
$sndtnum = implode($sndate);
$sndtnum = (int) $sndtnum;

$unsndate=array();
$unsndate = explode('-',$day2);
$unsndtnum = implode($unsndate);
$unsndtnum = (int) $unsndtnum;
if (!checkdate($sndate[1],$sndate[2],sndate[0]) || !checkdate($unsndate[1],$unsndate[2],unsndate[0]) || $unsndtnum<$sndtnum)
{ $error=True; $errtext .="Date field is filled in wrong \n";
}else {$error=False;}
}

Это не похоже на работу. Я почти уверен, что это из-за контрольной даты, но я не уверен, что нет также проблемы с имплозой / кастом.

Любые идеи о том, как это исправить?

0

Решение

Отдельно от sndate[0] а также unsndate[0] переменные, у которых отсутствуют знаки доллара, ваш чек фактически не будет работать, если злой пользователь введет нечисловые символы в $day1 (например. 2015-09abc-01 будет считаться менее 2015-05-01).

Следующий подход проверяет даты, преобразовывая их из известного формата в объект DateTime, а затем снова обратно, проверяя, что две отформатированные даты равны:

$f = 'Y-m-d';
$ok1 = ($d1 = DateTime::createFromFormat($f, $day1)) && $d1->format($f) == $day1;
$ok2 = ($d2 = DateTime::createFromFormat($f, $day2)) && $d2->format($f) == $day2;

if ($ok1 && $ok2 && $d1 <= $d2) {
// Ok
} else {
// Error
}

Надеюсь это поможет 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]