【发布时间】:2010-06-23 15:00:29
【问题描述】:
从my earlier question继续,我如何将月、日和年<select>s 组合成一个“日期”值,以便它到达我的 PHP 脚本
$_POST['date'], MySQL 格式YYYY-MM-DD?
【问题讨论】:
标签: php javascript html forms
从my earlier question继续,我如何将月、日和年<select>s 组合成一个“日期”值,以便它到达我的 PHP 脚本
$_POST['date'], MySQL 格式YYYY-MM-DD?
【问题讨论】:
标签: php javascript html forms
你可以使用隐藏字段并在提交时建立它的值,但如果我是你,我会简单地在 name 属性中使用数组表示法,并用“-”作为胶水来内爆数组:像这样
<select name="date[year]">
...
<select name="date[month]">
...
<select name="date[day]">
...
php:
$date = implode('-', $_POST['date'])
//validate date format here
【讨论】:
name属性,然后编写一个js函数,获取三个选择的值,并将其注入到隐藏的value属性中输入,最后返回true,然后将其绑定到表单的提交事件。
将它结合到您的 PHP 脚本中,没有理由为此添加对 JavaScript 的依赖。 Build on things that work。此外,如果您在服务器上执行此操作,则不会受到那么多潜在的恶意或意外干扰。
【讨论】:
如果你想这样做,我建议你采取以下步骤:
<input type="text" name="wtv" /> 和一条指示预期格式的消息 YYYY-MM-DD。<input type="text" name="wtv" /> 变为 type="hidden";还添加三个 <select> 元素 - 一个代表日、月和年。不要给这些<select> 元素name 属性。onchange 事件处理程序添加到这三个<select> 元素,以便在修改它们时更改原始<input type="hidden" name="wtv" /> 的值以反映所选值。提交表单时,由于<select> 元素没有name 属性,因此它们的信息不会发送到服务器,但您隐藏的<input /> 确实有名称,因此将被发送, 格式为日期。
实际上我以前写过这样的小部件...我会尝试建立一个演示页面并链接到它。
【讨论】:
如果您执行以下操作,您可以获得您正在寻找的结果。
<form method="post">
<select name="date[]" id="year">
<option>2010</option>
<option>2011</option>
</select>
<select name="date[]" id="month">
<option>8</option>
<option>9</option>
</select>
<select name="date[]" id="day">
<option>21</option>
<option>22</option>
</select>
<input type="submit">
</form>
生成的$_POST var 包含以下内容
Array
(
[date] => Array
(
[0] => 2011
[1] => 9
[2] => 22
)
)
那么你需要做的就是$date = implode('-', $_POST['date']);
【讨论】:
date[0][]、date[1][] 等,这太复杂了,不值得。
您可以创建一个隐藏字段,并在提交表单之前填写它
【讨论】:
单独收集这些数据的目的是确保其格式正确。如果您向 php 脚本提交完整的日期,则 php 脚本的验证选项会涉及更多。最好提交 3 个表单字段,以简单的方式验证它们,然后在 php 中创建日期。
如果您坚持提交完整的日期,隐藏字段(如@kgb 所说)可能是最简单的方法。
【讨论】:
您可以使用 javascript 或 php 本身来执行此操作,但没有本地 xhtml 方法可以做到这一点(据我所知)。
如果您使用 javascript 来实现这一点(使用隐藏字段将数据提交到您的 php 脚本),您仍然需要在使用 php 处理或将数据插入数据库之前验证服务器端的字段。出于这个原因,我将跳过 javascript 选项,直接使用我将使用的 php 方法。
我假设数字数据形式为 dd 表示日期,mm 表示月份,yyyy 表示年份:
$day = $_POST['day']; // assume 23
$month = $_POST['month']; // assume 06
$year = $_POST['year']; // assume 2010
$mysql_date_format = $year . "-" . $month . "-" . $day; // should result in 2010-06-23
根据需要在脚本中使用$mysql_date_format。
【讨论】:
我从您的原始帖子中注意到,您首先使用 jQuery 的 Datepicker() 插件来获取日期。为什么不直接将default date format 设置为'yy-mm-dd'?
如果您想在获取到 PHP 时验证格式,请使用
date('Y-m-d', strtotime($_POST['date']));
【讨论】: