【问题标题】:php form with two dates validation (before submit)带有两个日期验证的 php 表单(提交前)
【发布时间】:2016-03-20 06:40:30
【问题描述】:

我正在尝试为“”创建验证,但我不明白如何。

表格有两个日期:

  1. 开始日期
  2. Datestop(必须在 Datestart 之后)。

这些变量存储为关联数组 (routine['col'] =>'val')。 我创建了这个:

<form ..>
 ...
 <tr>
     <td>Star date: </td>
     <td><input type="date" name="routine[Datestart]"></td>
 </tr><?php $routine['Datestart']; ?>
 <tr>
     <td>Stop Date: </td>
     <td><input type="date" name="routine[Datestop]"
         min="routine[Datestart]"></td>
 </tr>
 ...
</form>

显然,min 选项不起作用。

我看到 Javascripts 提供了一些解决方案,但我从未使用过 Java,所以如果我能用一个简单的 php 变量来做会更好,但我正在寻找最聪明的解决方案,所以我问你只是如何做到这一点。

【问题讨论】:

  • Javascript 和 Java 是完全不同的东西。 Javascript 只是有一个非常愚蠢的名字,因为 Java 在当时是很酷的新事物。
  • 您不能在提交表单之前执行任何 PHP 验证。在提交表单之前执行验证的唯一方法是使用 Javascript。 jQuery 将使您的生活在这里变得轻松 ;) jquery.com
  • 如果您希望用户在浏览器中输入日期时被告知修复无效日期,Javascript 是唯一的方法。当然,您还必须在提交页面时在 PHP 中进行此验证,因为当然可以关闭 javascript 或伪造提交,而无需靠近您的实际页面
  • min 属性必须是有效日期。它不支持对其他元素的引用。

标签: php forms validation date


【解决方案1】:

网络上的验证在两个地方完成:

在服务器上 (PHP)。 在将来自野外网络的数据插入数据库之前,您始终需要检查服务器上的用户输入。检查字段是否为空的最简单的验证方法是:

<?php

$errors = array();

if ( empty($POST["foo"]) || count($POST["foo"]) < 1) {
  $errors["foo"] = "Foo can't be blank";
}

if ( empty($errors) ) {
  // all good here
} else {
  // display errors to user.
}

这是一个非常简单的示例,已经编写了大量关于验证用户输入的不同方法的文章。

要在 PHP 中比较两个日期,您需要将输入字符串解析为两个 DateTime 对象,然后您可以进行比较:

$start = DateTime::createFromFormat(DateTime::RFC3339, $routine['Datestart']);
$end = DateTime::createFromFormat(DateTime::RFC3339, $routine['Dateend']);

if ($start > $end) {
  // its not valid.
} 

在浏览器中。由于服务器端验证要求用户在获得反馈之前按下发送,这有时很慢,因此它们通常辅以客户端验证,在用户输入时提供即时反馈。它们是用 Javascript [不要与 Java 混淆] 编写的,因为它是浏览器的通用语言。

但是,它们永远不能替代客户端验证,因为脚本错误或未启用 javascript 的用户会禁用验证。

【讨论】:

    【解决方案2】:

    你应该像这样使用 jquery。

    jquery 代码

    <script type="text/javascript">
            $(function () {
    
                $("#DateFrom").datepicker(
                        {
                            dateFormat: "dd-mm-yy",
                            changeMonth: true,
                            changeYear: true,
                            yearRange: '-50:+50',
                            maxDate: 'today',
                            onSelect: function (selectedDate) {
                                $("#DateTo").datepicker("option", "minDate", selectedDate);
                            }
                        }
                );
    
                $("#DateTo").datepicker(
                        {
                            dateFormat: "dd-mm-yy",
                            changeMonth: true,
                            changeYear: true,
                            yearRange: '-50:+50',
                            maxDate: 'today',
                            onSelect: function (selectedDate) {
                                $("#DateFrom").datepicker("option", "maxDate", selectedDate);
                            }
                        }
                );
    
            });
        </script>
    

    HTHML 代码或将其包含在您的表单中

    <center>
            <input type="text" id="DateFrom"> To
            <input type="text" id="DateTo">
        </center>
    

    你必须包含 jquery datepicker js 和 css。文件。

    试试这个,它会起作用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-04
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多