如何让用户选择日期/时间 - 仅限PHP?

时间:2010-11-14 04:07:01

标签: php

我想要一个完整的服务器端解决方案,所以没有JS等等。

我能想到的只有三个日/月/撕裂的组合框,但当然用户可以选择无效的日/月组合。

当我不被允许使用任何客户端代码时,让使用选择日期的最佳方式是什么?

5 个答案:

答案 0 :(得分:4)

无论用户输入表单,您都必须检查该用户输入。如果你有一个花哨的JS小部件迫使用户输入有效的内容,那没关系。绕过这些on-rails小部件并将任何数据发送到服务器端非常容易。

那就是说,我对日期做的是使用文本输入作为格式为YYYY-MM-DD的日期的表单输入。用户可以手动输入日期,也可以使用我设置的日期选择器。当他们提交表单时,PHP解构输入并检查以确保日期有效。

$Date = trim($_REQUEST['date']);
$DateError = null;
if (!preg_match("/^(\\d{4,4})-(\\d{2,2})-(\\d{2,2})$/", $Date, $Matches))
{
   $DateError = 'Date must be in the format of YYYY-MM-DD';
}
else
{
    $Year = $Matches[1];
    $Month = $Matches[2];
    $Day = $Matches[3];
    if (!checkdate($Month, $Day, $Year))
    {
        $DateError = 'Invalid date given';
    }
}

答案 1 :(得分:3)

除非您想在页面上列出每个可能的有效日期,否则您必须接受您的界面允许选择无效日期,并在选择其中一个日期时重新​​显示错误消息。

答案 2 :(得分:1)

如果您不想使用任何客户端代码,则必须强制用户选择月份,然后您必须重新加载页面才允许他们选择当天。

或者您可以允许他们选择无效日期,然后将其踢回到表单并显示错误消息。

答案 3 :(得分:1)

只需返回从第一天到最后一天包含的BIG选择框

如1970-01-01直到...... 2038-01-19?

另外,需要注意的事项

http://bugs.php.net/44209

http://php.net/ChangeLog-5.php(查找错误#44209)

答案 4 :(得分:0)

嗯,是的,如果您无法在客户端应用任何Javascript,客户端可以向您发送任何,甚至是无效信息(请注意,即使客户端验证也是如此)。因此,您需要在服务器上进行验证,无论如何都要如此。并且由于您无法通过Javascript动态告诉客户端输入错误,您必须通过POST / validate / GET页面重新加载周期来告诉客户端输入无效。

没有更好的解决方案。