将多个字段合并为一个值以进行表单提交

时间:2010-06-23 15:00:29

标签: php javascript html forms

继续my earlier question,如何将月,日和年<select>合并为一个“日期”值,以便它以

的形式到达我的PHP脚本

$_POST['date'],采用MySQL格式YYYY-MM-DD

8 个答案:

答案 0 :(得分:11)

你可以使用一个隐藏字段并在onSubmit上构建它的值,但是如果我是你,我只是在name属性中使用数组表示法,并用' - '作为粘合剂内爆数组:像这样

<select name="date[year]">
...
<select name="date[month]">
...
<select name="date[day]">
...

php:

$date = implode('-', $_POST['date'])
//validate date format here

答案 1 :(得分:6)

将它与PHP脚本结合使用,没有理由为此添加对JavaScript的依赖。 Build on things that work。此外,如果您在服务器上执行此操作,则不会受到太多潜在的恶意或意外干扰。

答案 2 :(得分:2)

如果你想这样做,我建议你采取以下步骤:

  1. 编写HTML页面,以便即使没有JS也是有意义的 - 请使用正常的<input type="text" name="wtv" />,并在消息中指明预期的格式YYYY-MM-DD
  2. 然后添加JavaScript以使<input type="text" name="wtv" />成为type="hidden";还添加了三个<select>元素 - 一个用于日,月和年。请勿提供这些<select>元素name属性。
  3. 你需要一些JS来确保当用户选择不同的月份时,不会出现不可能的日期;所以,如果我在几个月内选择“2月”,则不应该有28天的时间;但如果这是闰年......
  4. 为这三个onchange元素添加<select>事件处理程序,以便在修改后,更改原始<input type="hidden" name="wtv" />的值以反映所选值。
  5. 表单提交后,由于<select>元素没有name属性,因此不会将其信息发送到服务器,但隐藏的<input />确实有名称,因此它将被发送,格式化为日期。

    我之前实际上已经编写过这样的小部件...我会尝试获取一个演示页面并链接到它。

答案 3 :(得分:2)

如果您执行以下操作,则可以获得所需的结果。

<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']);

答案 4 :(得分:1)

您可以创建隐藏字段,并在表单提交之前填写

答案 5 :(得分:1)

分别收集这些数据的目的是确保其格式正确。如果您向php脚本提交完整的日期,那么php脚本的验证选项将更加复杂。最好提交3个表单字段,以简单的方式验证它们,然后在php中创建日期。

如果您坚持提交完整的日期,隐藏字段(如@kgb所说)可能是最简单的方法。

答案 6 :(得分:0)

您可以使用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

答案 7 :(得分:0)

我从你的原帖中注意到你正在使用jQuery的Datepicker()插件来获取日期。为什么不将default date format设置为'yy-mm-dd'

如果要在到达PHP时验证格式,请使用

date('Y-m-d', strtotime($_POST['date']));