警告:我是php新手
我正在从mysql格式的表格(即YYYY-MM-DD)中读取2个日期,并尝试对它们的有效性进行错误检查,并且其中一个小于另一个
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;}
}
这似乎不起作用。我很确定这是因为检查日期,但是我不太肯定爆破/浇铸也没有问题。
有想法该怎么解决这个吗?
最佳答案
除了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
}
希望这可以帮助 :)