我正在建立一个网站,要求用户输入他们的出生日期作为表格的一部分。当他们点击提交时,表单将提交给MySQL数据库。
其中一个colums类型(dob)被设置为PHPmyAdmin的日期。我有3个fiels [DD] [MM] [YYY]。
我的问题是,如果用户只在[DD]或[MM]字段中输入1个字符,则会在数据库中完全抛出日期。
例如,如果用户输入[01] [02] [2000],我会在我的数据库中收到2000-02-01。如果用户输入[1] [2] [2000],我在我的数据库中收到0000-20-12。
我的问题是,我如何使用某种验证来检查这一点,或者提示用户在开头添加0 - 或者 - 如果表单未提交,则在后端添加0。
如果有人提供代码,他们是否可以添加评论来解释每个部分的作用?我试着去学习。
非常感谢!
杰克
答案 0 :(得分:0)
在PHP中
if(strlen($DD) === 1) {
$DD = '0' .$DD;
}
if(strlen($MM) === 1) {
$MM = '0' .$MM;
}
这将检查已输入的字符串的长度,如果长度为1,则在字符串的开头添加0。
或者您可以将用户的出生日期存储为单个变量,并使用PHP的日期函数格式化。
$input = '2/1/2000';
$birthday = date('Y-m-d', strtotime($input));
生日输出" 2000/02 02"
答案 1 :(得分:0)
您需要应用此代码。
£\d{1,3}([1-9]|[1-9][0-9]|1[0-5][0-5])(?:[,.])?\d{1,2}
<强> JS 强>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JavaScript form validation - checking date</title>
</head><br><body onload='document.form1.text1.focus()'>
<div class="mail">
<h2>Input a valid date [dd/mm/yyyy or dd-mm-yyyy format]</h2>
<form name="form1" action="#">
<ul>
<li><input type='text' name='text1'/></li>
<li> </li>
<li class="submit"><input type="submit" name="submit" value="Submit" onclick="validatedate(document.form1.text1)"/></li>
<li> </li>
</ul>
</form>
</div>
</body>
</html>
<强> CSS 强>
function validatedate(inputText)
{
var dateformat = /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/;
// Match the date format through regular expression
if(inputText.value.match(dateformat))
{
document.form1.text1.focus();
//Test which seperator is used '/' or '-'
var opera1 = inputText.value.split('/');
var opera2 = inputText.value.split('-');
lopera1 = opera1.length;
lopera2 = opera2.length;
// Extract the string into month, date and year
if (lopera1>1)
{
var pdate = inputText.value.split('/');
}
else if (lopera2>1)
{
var pdate = inputText.value.split('-');
}
var dd = parseInt(pdate[0]);
var mm = parseInt(pdate[1]);
var yy = parseInt(pdate[2]);
// Create list of days of a month [assume there is no leap year by default]
var ListofDays = [31,28,31,30,31,30,31,31,30,31,30,31];
if (mm==1 || mm>2)
{
if (dd>ListofDays[mm-1])
{
alert('Invalid date format!');
return false;
}
}
if (mm==2)
{
var lyear = false;
if ( (!(yy % 4) && yy % 100) || !(yy % 400))
{
lyear = true;
}
if ((lyear==false) && (dd>=29))
{
alert('Invalid date format!');
return false;
}
if ((lyear==true) && (dd>29))
{
alert('Invalid date format!');
return false;
}
}
}
else
{
alert("Invalid date format!");
document.form1.text1.focus();
return false;
}
}
答案 2 :(得分:0)
好吧,我说你有几个选择......
1。通过正确使用参数化查询和正确的对象类型,完全避免此问题。第二个你让文本从你的输入到你的数据库未经过大量处理,你会留下自己的注射和恶意攻击。
如果字段的类型为date
,那么您应该将其作为日期传递,依此类推。 Pintxo在上面的评论中提供了一个很好的链接,你应该真正熟悉:https://stackoverflow.com/a/3126175/683977
如果您打算坚持使用当前的方法(再次,不推荐):
2。制作<select>
个列表而不是文本框。
3。合并输入并使用HTML5的“日期”输入:<input type="date" />
4. 使用PHP,检查“月”和“日”字段的长度。如果输入的长度只有一个字符,则前置0
。
5. 使用一些简单的JavaScript来检查字段的长度,如果它们是一个字符,请注意用户必须使用所需的格式。
如果您让输入数据直接进入您的数据库,那么您实际上是为任何知道如何使用它的用户留下了一个开放的MySQL面板。如果这只是一个看不到光明的个人项目,你可以使用其中一种方法 - 但是,第二种方法是公开的,你必须重新考虑这一点。