【问题标题】:Date validation from form input with PHP使用 PHP 从表单输入进行日期验证
【发布时间】:2021-06-01 04:26:34
【问题描述】:

我有一个这样的 HTML 代码表单:

<div>          
     <label for="dateCheckin">Date Checking in</label>
     <input type="date" name="dateCheckin">          
</div> 

我尝试使用 PHP 检查所选日期是否距当前日期至少 2 周。当我运行代码时,有一个未定义的索引:dateCheckin。

$checkinDate = strtotime($_POST['dateCheckin']);

if ($checkinDate){
    $today = time();
    $diff = $checkinDate->diff($today)->days;
    $diff /= 7;
    $diff = floor($diff);
    if ($diff < 2){
        echo "Please enter a valid date.";
    }
    
} else{
    echo "Please enter a valid date.";
}

【问题讨论】:

  • 看起来您可能正在使用 PHP-CLI 运行它?尝试使用内置于 Web 服务器的 PHP 并运行。 php -S localhost:8000 &lt;filename&gt;.php。此外,您将在没有表单元素的情况下发布问题。我建议你看看以下内容:Posting Data with PHP
  • 可能它没有使用 post 方法使用表单元素

标签: php html date


【解决方案1】:

试试这个。我建议你使用DateTime() 对象而不是time() 函数。

$checkinDate = new DateTime('2021-05-14 09:52:52'); //use your actual POST value here

if ($checkinDate){
    $today = new DateTime();
    $diff = $checkinDate->diff($today);
    $days= $diff->format('%a');

    if($days>14){
        echo "2 Weeks done. Please enter a new date";
    }
    else{
        echo "Not done 2 weeks yet.";
    }
}

【讨论】:

    【解决方案2】:

    日期很棘手,而且你做得最难。

    我强烈推荐使用DateTime 对象,你会得到这样的结果:

    $checkinDate = DateTime::createFromFormat('Y-m-d H:i:s', $_POST['dateCheckin']);
    
    if ($checkinDate) {
        $twoWeeksDate = new DateTime('now + 2 weeks');
        if($checkinDate < $twoWeeksDate) {
            echo "Please select a date date before: " . $twoWeeksDate->format('d/m/Y');
        }
    } else {
        echo "Please enter a valid date.";
    }
    

    确保将日期格式更改为您的输入和输出的正确格式。

    【讨论】:

    • 谢谢。我根据您的解决方案修复了我的代码,但是,仍然存在未定义的索引错误。你知道为什么会发生这个错误吗?
    • 您的$_POST 变量没有dateCheckin 的键,您需要将其更正为其他内容,或者其他一些数组也有同样的问题。 Undefined Index 仅表示您正在尝试通过不存在的键或索引访问数组。
    • @Tran 如果这确实解决了您的问题,请接受此答案,以便其他有相同问题的人知道这有帮助。
    【解决方案3】:

    你的数据没有传入 POST 方法,所以你得到一个未定义的索引错误

    <form action="Your Action page" Method="POST">
       <label for="dateCheckin">Date Checking in</label>
         <input type="date" name="dateCheckin">
       <button type="submit"></button>
    </form>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多