我想要一个完整的服务器端解决方案,所以没有JS等等。
我能想到的只有三个日/月/撕裂的组合框,但当然用户可以选择无效的日/月组合。
当我不被允许使用任何客户端代码时,让使用选择日期的最佳方式是什么?
答案 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://php.net/ChangeLog-5.php(查找错误#44209)
答案 4 :(得分:0)
嗯,是的,如果您无法在客户端应用任何Javascript,客户端可以向您发送任何,甚至是无效信息(请注意,即使客户端验证也是如此)。因此,您需要在服务器上进行验证,无论如何都要如此。并且由于您无法通过Javascript动态告诉客户端输入错误,您必须通过POST / validate / GET页面重新加载周期来告诉客户端输入无效。
没有更好的解决方案。