格式化日期选择器以发布到 MySQL DB
Posted
技术标签:
【中文标题】格式化日期选择器以发布到 MySQL DB【英文标题】:Formatting Date Picker for Posting to MySQL DB 【发布时间】:2015-04-26 18:00:15 【问题描述】:我正在尝试将已从日期选择器填充的文本框的值发布到我的数据库,但我不断收到值 1970-01-01 被发布。我对此进行了研究,看不出哪里出错了,下面是输入类型。
<label for="from">From:</label>
<input type="text" id="from" name="from">
<label for="to">To:</label>
<input type="text" id="to" name="to">
在我的表格里面:
$fromdate = date('Y-m-d', strtotime($_POST['from']));
$todate = date('Y-m-d', strtotime($_POST['to']));
$request = mysql_query("INSERT INTO messages (fromdate, todate) VALUES ('$fromdate', '$todate')") or die(mysql_error());
有谁知道我该如何解决这个问题?
谢谢
【问题讨论】:
【参考方案1】:strtotime() 无法正确猜测格式的问题。
因此你可以:
重新格式化 DatePicker 的标准输出: option-altField - 您可以忽略常规字段并将 altField 发送到 db
在 php 输出中重新格式化
取而代之的是strtotime($_POST['from']))
你可以使用这样的东西
$myDate = DateTime::createFromFormat('date-time-format-from-datepicker',$_POST['from'])->format('Y-m-d')
要使“日期时间格式-from-datepicker”的格式正确,您可以使用php date formatting symbols table - 这需要一些时间,但它必须有效
【讨论】:
我尝试重新格式化它,但它现在没有向数据库发布任何内容,知道为什么吗? 在插入数据库之前尝试转储重新格式化日期后得到的内容。可能它的格式仍然不正确。或者只是转储您的查询并尝试在控制台中执行。也许你在插入执行时有 mysql 警告。然后从 mysql 控制台启动“显示警告”并获取描述。【参考方案2】:你插入的是一个字符串。如果要将其插入 DATE 字段,则需要将其转换为日期。其语法将根据您使用的数据库而有所不同。 MySQL 为此使用 STR_TO_DATE,而 Oracle 使用 TO_DATE。如果我知道您使用的是什么类型的数据库,我可以帮助您构建查询。
编辑:这是您的代码。您需要在查询本身中利用 MySQL STR_TO_DATE 函数。
$request = mysql_query("INSERT INTO messages (fromdate, todate)
VALUES (STR_TO_DATE(\''.$fromdate.'\',\'%Y-%m-%d\'),
STR_TO_DATE(\''.$todate.'\',\'%Y-%m-%d\')")
or die(mysql_error());
此外,当您投入生产时,使用 die() 处理 mysql 错误并不是一个很好的做法。它可能会向恶意用户提供您不希望他们拥有的信息。
【讨论】:
谢谢迈克尔,我正在使用 MySQL。只是做 $fromdate = date('Y-m-d', strtodate($_POST['from'])); 的问题吗? 已经尝试过了,但现在它根本没有发布到数据库中。我没有改变这些 - $fromdate = date('Y-m-d', strtotime($_POST['from'])); $todate = date('Y-m-d', strtotime($_POST['to']));我应该有吗? 我认为我的答案存在语法错误。您需要转义您不想被 PHP 解析的任何单引号。我已经编辑了我的答案以反映这一点。此外,可以很方便地查看您从 POST 数据中获得的日期字符串类型。在 SQL 中使用 STR_TO_DATE 应该消除在 PHP 中进行任何日期操作的需要。 我也没有高兴地尝试过:(我应该将起始日期和截止日期存储在隐藏的输入字段中吗? 他们应该按原样工作。尝试运行查询时是否遇到任何 SQL 错误?以上是关于格式化日期选择器以发布到 MySQL DB的主要内容,如果未能解决你的问题,请参考以下文章