2011-04-09 17 views
1

嗨,我,我需要得到出生的用户的日期的形式...你怎么想我应该去这样做呢?我想只要保持简单的文本字段,但我还需要验证。获取用户出生日期? PHP的MySQL

之后,我需要将其存储在我的数据库,该数据库有一个字段是一个时间戳是正确的,或者我应该使用不同的东西? (MYSQL)

我有它做什么工作的,但它也显示了时间,在数据库中的00:00:00。

我使用这个

 $DOB = strtotime($DOB); 

应该怎么办呢?有没有更好的办法?这就要求他们输入出生日期为YYYY/MM/DD是有办法,我可以做的更好......

这个我还需要确保他们年满18岁后。那么我应该怎么做呢?

回答

4

要获取用户输入的日期,你可以使用类似jQuery's Datepicker:它会允许用户输入输入日期或使用某个日历小工具选择它。


要存储在MySQL数据库中的日期,您应该使用DATE场 - 而不是:

  • 一个DATETIME,其中包括时间
  • 也不让TIMESTAMP,其中包括时间,并仅限于1970年 -2038 (不觉得出生日期完全正确)


为了使用strtotime(),您的日期应该像YYYY-MM-DD(如数据库,使用DATE场时),而不是DD/MM/YYYY也不MM/DD/YYYY(那些可能会造成混淆)

在PHP ,你也应该使用DateTime类,而不是UNIX Timestamps:那些是有限的,以1970年至2038年(32位平台)

+0

我不能在此使用jquery项目,这是为了一个班级的任务,如果我使用额外的东西,我会被标记下来。 – 2011-04-09 11:35:39

+1

Humph,太糟糕了:-(*(而且太糟糕了,仍然有学校与公司的工作方式,工作时间等方面的现实脱节)* – 2011-04-09 11:39:08

+0

我认为这更多是因为老师懒惰标记它哈哈,我需要使用一些描述的功能创建一个简单的约会网站。稍后,我们必须做一个更复杂的版本的网站。这就像一个意义上的小里程碑。 – 2011-04-09 11:41:39

2

将其转换这样的日期(“YM-d”的strtotime($ DOB))

1

您应该使用字段类型“DATE”,它只存储日期部分。否则,您可以在选择时使用选择DATE(fieldname)...。

要验证用户年龄,可以使用DATE_SUB从今天的日期计算年龄,然后减去用户的生日。

2

在您的客户端脚本或HTML文件:

<form action="myphp.php"> 

Day 
<select size="1" name="day"> 
<option value="01" label="1st">1st</option> 
<option value="02" label="2nd">2nd</option> 
... 
</select> 

Month 
<select size="1" name="month"> 
<option value="01" label="Jan">Jan</option> 
<option value="02" label="Feb">Feb</option> 
... 
</select> 

Year <select size="1" name="year"> 
... 
<option value="1979" label="1979">1979</option> 
<option value="1980" label="1980">1980</option> 
... 
</select> 

</form> 

你。PHP的后端:

$DOB = $_REQUEST['year']."/".$_REQUEST['month'].$_REQUEST['day']; 

现在$DOB是可用的格式,你可以验证$_REQUEST[...]无论你有多喜欢。但我建议在HTML页面上使用JQuery以及服务器端验证。

1

首先,您不能使用时间戳来存储生日,因为时间戳从1970年开始计数,并且世界上有一些ppl超过40,因此使用日期而不是日期时间,因为您不需要存储时间,只是出生日期)

您可以通过简单的文本字段获取用户的日期,但您应该通知他有关预期的日期格式(d/m/y,m/d/y,...) 2/4/2011可以代表2011年2月4 2011年4月2日

你知道后,你除了你使用正则表达式检查输入

例如,$ _ POST [ '生日'] = '11/3/2011' ,我们除了格式M/d/Y

$birthday = $_POST['birthday']; 
if(preg_match('/^(\d){1,2}\/(\d){1,2}\/(\d){4}$/',$birthday)){ 
     list($month,$day,$year) = explode('/',$birthday); 
     // here you should check that $day isn't bigger then days_in_month($month), and $month is between 1-12 
     if(date('Y')-$year<18){ // you need to take into account $month to be more strict 
     // user under 18 
     } 
} 

希望它帮助