Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 日期输入字段验证_Php_Html_Mysql_Sql - Fatal编程技术网

Php 日期输入字段验证

Php 日期输入字段验证,php,html,mysql,sql,Php,Html,Mysql,Sql,我正在建立一个网站,要求用户输入他们的出生日期作为表单的一部分。当他们单击submit时,表单被提交到MySQL数据库 其中一个列类型(dob)被设置为带有PHPmyAdmin的日期。我有三个五[DD][MM][YYY] 我的问题是,如果用户只在[DD]或[MM]字段中输入1个字符,则会在数据库中完全取消日期 例如,如果用户输入[01][02][2000],我将在数据库中接收2000-02-01。如果用户输入[1][2][2000],我在数据库中收到0000-20-12 我的问题是,如何使用某种

我正在建立一个网站,要求用户输入他们的出生日期作为表单的一部分。当他们单击submit时,表单被提交到MySQL数据库

其中一个列类型(dob)被设置为带有PHPmyAdmin的日期。我有三个五[DD][MM][YYY]

我的问题是,如果用户只在[DD]或[MM]字段中输入1个字符,则会在数据库中完全取消日期

例如,如果用户输入[01][02][2000],我将在数据库中接收2000-02-01。如果用户输入[1][2][2000],我在数据库中收到0000-20-12

我的问题是,如何使用某种验证来检查这一点,以提示用户在开始时添加一个0,或者如果表单未随用户一起提交,则在后端添加0

如果有人提供代码,他们是否可以添加注释来解释每个部分的功能?我只是想边走边学

非常感谢

PHP中的杰克

if(strlen($DD) === 1) {
   $DD = '0' .$DD;
}

if(strlen($MM) === 1) {
   $MM = '0' .$MM;
}
这将检查已输入字符串的长度,如果长度为1,则在字符串开头添加0

或者您可以将用户的出生日期存储为单个变量,并使用PHP的date函数设置其格式

$input = '2/1/2000';
$birthday = date('Y-m-d', strtotime($input));

生日输出“2000/02/01”

您需要应用此代码

<!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>&nbsp;</li>  
<li class="submit"><input type="submit" name="submit" value="Submit" onclick="validatedate(document.form1.text1)"/></li>  
<li>&nbsp;</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;  
  }  
  }  
li {list-style-type: none;  
font-size: 16pt;  
}  
.mail {  
margin: auto;  
padding-top: 10px;  
padding-bottom: 10px;  
width: 400px;  
background : #D8F1F8;  
border: 1px soild silver;  
}  
.mail h2 {  
margin-left: 38px;  
}  
input {  
font-size: 20pt;  
}  
input:focus, textarea:focus{  
background-color: lightyellow;  
}  
input submit {  
font-size: 12pt;  
}  
.rq {  
color: #FF0000;  
font-size: 10pt;  
}  

我想说你有几个选择

1.通过正确使用参数化查询和正确的对象类型,完全避免这个问题。一旦输入的文本未经初始化就进入数据库,就会让自己面临注入和恶意攻击

如果字段的类型为
date
,则应将其作为日期传递,依此类推。Pintxo在上面的评论中提供了一个很好的链接,您应该真正熟悉:


如果您打算坚持当前的方法(同样,不推荐):

2。使框
列表而不是文本框

3.合并输入并使用HTML5的“日期”输入:

4.使用PHP检查月和日字段的长度。如果输入长度仅为一个字符,则在
0
前加前缀

5.使用一些简单的JavaScript检查字段的长度,如果它们是一个字符,则通知用户必须使用所需的格式



如果您让输入数据直接进入您的数据库,那么实际上您将为任何知道如何使用它的用户留下一个开放的MySQL面板。如果这只是一个看不到曙光的个人项目,你可以使用其中的一种方法——但是,一旦它公开,你就必须重新考虑这一点。

我建议你阅读此摘要,然后带着剩余的问题回来:输入值的验证/卫生是安全应用程序的一个主要关键,“所以继续学习吧!”桑蒂,谢谢你。我当然会通读一遍,并继续学习。感谢您的建议,SQLinjection是我希望解决的问题,但我希望前端在进入下一步之前能够正常工作。只是一个私人项目。谢谢您的输入。我决定改为使用选择框,列出月份和年份的日期,并将值设置为01、02等