-1

我在简单的$dob表单输入和使用 PDO 将数据库插入到 datatype 的 mysql 表中时遇到了一些奇怪的问题date

输入表格(示例):

<select name="dob-month">
    <option value="1">January</option>
</select>
<select name="dob-day">
    <option value="01">1</option>
</select>
<select name="dob-year">
    <option>2013</option>
</select>

PHP(基本):

$data = $_POST; //passed through mvc

$day = trim($data['dob-day']);
$month = trim($data['dob-month']);
$year = trim($data['dob-year']);

$birthdate = date('Y-m-d', strtotime($year."-".$month."-".$day));

$stmt = $this->core->dbh->prepare("INSERT INTO userinfo (birthdate) VALUES (:birthdate)");
$stmt->bindParam(':birthdate', $birthdate, PDO::PARAM_STR);
$stmt->execute();

但它给出了没有日期的日期?所以只是 2013-12 工作正常,但这一天总是-01?

它与日期的选择格式有关吗?

4

3 回答 3

1

第二个参数

  date()

是整数值(自然数),而不是破折号分隔的字符串。阅读date() 的手册页

就像你想做这样的事情:

date('Y-m-d', strtotime( $year."-".$month."-".$day ));

另一方面:此操作构造一个日期字符串并将其传递给 date() - 反过来又返回相同的日期字符串;-)

于 2013-08-27T22:50:52.860 回答
1

首先,PHPdate()命令只接受一个官方的 UNIX 时间戳来转换成指定的格式。其次,虽然您的表单有名为dob-month,dob-day和的变量,dob-year但看起来您正试图在变量和PHP 处理脚本中使用它们。为什么不从一个很好的 PHP教程开始,解释DATE STRINGDATE OBJECTUNIX TIMESTAMP之间的区别。阅读 PHP 的函数和 mySQL 的函数。当你完成这些事情时,你应该得到足够的信息来返回并提交一个受过云纹教育的问题。$month$day$yeardatestrtotime()DATE_FORMAT()

编辑/附加信息

<select name="dob-month">
    <option value="1">January</option>
    <option value="6">June</option>
    <option value="12">December</option>
</select>
<select name="dob-day">
    <option>1</option> // Same here - stick to a single digit
    <option>15</option>
    <option>31</option>
</select>
<select name="dob-year">
    <option>2013</option>
</select>

PHP

$day = intval(trim($data['dob-day']));
$month = intval(trim($data['dob-month']));
$year = intval(trim($data['dob-year']));
$birthdate = date('Y-m-d', mktime(0,0,0,$month,$day,$year));
于 2013-08-27T22:51:07.360 回答
0

使用此代码

$birthdate = $_POST['dob-year']."/".$_POST['dob-month']."/".$_POST['dob-date'];

而不是这段代码

$birthdate = date('Y-m-d', strtotime($year."-".$month."-".$day));
$birthdate = date('Y-m-d', mktime(0,0,0,$month,$day,$year));
于 2014-11-25T18:08:55.483 回答