Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.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_Mysql - Fatal编程技术网

Php 请插入出生日期

Php 请插入出生日期,php,mysql,Php,Mysql,我需要一些帮助。 我有一张登记表,上面有姓名、姓氏、出生日期、电子邮件等字段。 当我试图插入我的数据库时,除了dob,一切都正常 dob是我从3个选项菜单中得到的,比如$_POST['year']、$_POST['month']、$_POST['day'],但我还没有找到如何将这3个值放在一个(dob)中,以便正确地将其插入数据库,而不使用0000-00-00值 任何帮助都将不胜感激。您希望如何将它们存储在您的数据库中?您希望它们作为UNIX时间戳还是其他格式 如果您不知道要如何格式化,我们将无

我需要一些帮助。 我有一张登记表,上面有姓名、姓氏、出生日期、电子邮件等字段。 当我试图插入我的数据库时,除了dob,一切都正常

dob是我从3个选项菜单中得到的,比如$_POST['year']、$_POST['month']、$_POST['day'],但我还没有找到如何将这3个值放在一个(dob)中,以便正确地将其插入数据库,而不使用0000-00-00值


任何帮助都将不胜感激。

您希望如何将它们存储在您的数据库中?您希望它们作为UNIX时间戳还是其他格式

如果您不知道要如何格式化,我们将无能为力


无论哪种方式,您都应该使用
mktime()
转换为UNIX时间戳,然后在您知道如何格式化它时使用
date()

如果您的Apache在Linux服务器上,您可以使用时间戳。为什么只在Linux服务器上?因为Linux理解负时间戳,如果您有人出生在1.1.1970之前,您可能需要它们

$timestamp = mktime(0,0,0,$month,$day,$year);
将时间戳另存为int

echo date('d.m.Y',$timestamp);
来回应它

$timestamp=mktime(0,0,0,$_POST['month'],$_POST['day'],$_POST['year']);
$dob=date('Y-m-d',$timestamp);
$dob值已准备好插入数据库

或者,您也可以这样做:

$dob=$_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'];

但是在将值插入数据库之前,应该首先转义这些值,或者在rootatwc的回复基础上使用PDO,插入数据库时的一个关键因素是日期时间值必须像字符串一样引用

$name = "Sepp";
$surname = "Blatter";
$dob=$_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'];

"insert into birthdays (name, surname, dob) values ('$name', '$surname', '$dob')"
您还会发现mysql非常宽容,例如June可以表示为-06-或-6-

至于提取某一年的所有条目,这非常简单,不需要将它们放在数据库中的单独字段中:

select name from birthdays where YEAR(dob) = '1950';
编辑

重读这个问题,OP实际上使用的是一个日期字段并不明显,嘿,OP,使用一个日期字段-然后你可以浏览你的数据库,了解什么是日期,而不必尝试破译一个10位数的数字。。。您可以使用Mysql附带的所有精彩的日期功能

我从3个选项菜单中获得dob,如$\u POST['year']、$\u POST['month']、$\u POST['day']

只需验证并连接:

$yr=(integer)$_POST['year'];
$mo=(integer)$_POST['month'];
$da=(integer)$_POST['day'];
if (($yr>1910 && $yr<(integer)date('Y')) 
    && ($mo>0 && $mo<13)
    && ($da>0 && $da<32)) {
      $mysqldate=sprintf("%04d-%02d-%02d", $yr, $mo, $da);
} else {
    trigger_error('date is not valid');
}
$yr=(整数)$\u POST['year'];
$mo=(整数)$_POST['month'];
$da=(整数)$_POST['day'];

如果($yr>1910&&$yr0&&$mo0&&$da将DOB字段更改为
HTML5将为您生成一个日期时间选择器。然后您就可以获得它
$\u POST['DOB']


对于通用日期格式,数据库中的dob字段应该是
TIMESTAMP
DATETIME
DATE
格式。

数据库中的DATETIME字段的数据类型是什么?您能给我们显示数据库信息吗(dob列是哪种值)?为什么不将每个值存储在自己的列中?年/月/日?通过这种方式,您可以轻松地对出生在指定年/月/日组合中的所有用户进行选择…这对1970年1月1日之前出生的人不起作用它将成为负UNIX时间戳!:)@Pekka:如果您使用的是带符号的数据类型,它会工作,但无论如何这不是一个好主意,因为Y2K38(UNIX时间戳仅在1901-2038年工作,因为这是自1970-01-01年以来,在带符号的32位int中可能存在的秒数范围)。如果您在1901年之前或2038年之后需要任何东西,它将以有趣的方式中断(我在这两方面都遇到了麻烦).他不想重复,这是错误的格式database@rootatwc他总有一天会想把它打印出来……至于格式,从“整数”开始数据库的格式是错误的吗?我很确定他的数据库字段设置为日期而不是日期INT@rootatwc好的,但它也可以更改。当然,如果数据库已经包含几十个条目,这有点困难。但是如果他只是从一个空数据库开始,他仍然可以更改字段类型。尽管如此,我理解你的评论和建议接受它,你是对的。与unixtime相比,原生日期类型的破坏性到底有多小?提示:你可能不想将30年后过期的内容存储到unixtime列中,因为它不适合。此外,如果你需要跟踪1901年之前出生的人,你就有麻烦了。