我要求以正确的格式输入日期,如果不是,则会显示错误。我的PHP程序如下所示:
if (empty($_POST["date"])) {
$dateErr = "Date is required";
} else {
$date = test_input($_POST["date"]); etc
这只是显示不正确日期格式错误的标准方法。但我的问题是,即使显示错误,也没有什么能阻止该日期(格式错误)传递到数据库中。当我检查我的数据库时,我看到了那个日期,这不是我想要的。是否有一种方法可以阻止以错误格式写入的日期结束我的数据库?就像过滤器一样,我的意思是。
答案 0 :(得分:1)
使用强大的DateTime类,DateTime :: createFromFormat在这里很有用,它会在失败时返回一个新的DateTime实例或FALSE。
所以它会这样:
if (empty($_POST["date"])) {
$dateErr = "Date is required";
} else {
$format = 'Y-m-d'; // write your format here
$date = DateTime::createFromFormat($format, $_POST["date"]);
if($date)
{
// add to database
}
此外,您的数据库字段应设置为日期时间,格式为Y-m-d,因此在插入之前,您必须使用PHP将其格式化为Y-m-d,如:
$date->format('Y-m-d');
这将返回一个在数据库中插入的正确字符串。
答案 1 :(得分:0)
您可以使用strtotime进行检查。不需要正则表达式
$date = strtotime($_POST["date"]);
if($date === false) $dateErr = "Unrecognized Date format";
else $date = date('m/d/Y', $date); // Set your own date format here
答案 2 :(得分:0)
在开始db事务之前,您应该使用函数检查给定的日期是否采用适当的格式。您可以使用正则表达式在以下方法中执行此操作,如提到的@Subhanker以匹配以下格式YYYY-MM-DD:
if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $_POST['date']))
{
//Start DB transaction here
// Create connection
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables for security
$form_date = mysqli_real_escape_string($con, $_POST['date']);
$sql="INSERT INTO dates_table (dates)
VALUES ('$form_date')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
}else{
$dateErr = "Date is required";
}
如果您有任何疑问,请与我们联系!
答案 3 :(得分:0)
if (preg_match("/^(19|20)\d\d[\-\/.](0*[1-9]|1[012])[\-\/.](0*[1-9]|[12][0-9]|3[01])$/", $date )){//This will match the input in format YYYY-MM-DD
//Date ok
}else{
//Invalid Date
}