Проверка даты на основе ввода формы с помощью PHP

#php #html #date

Вопрос:

У меня есть форма с HTML-кодом, похожим на этот:

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

И я пытаюсь проверить, является ли выбранная дата по крайней мере 2 неделями с текущей даты, используя PHP. Положим, когда я запускаю код, появляется неопределенный индекс: проверка даты.

 $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.";
}
 

Комментарии:

1. Похоже, вы можете запустить это с помощью PHP-CLI? Попробуйте использовать PHP, встроенный в веб-сервер, и запустите. php -S localhost:8000 <filename>.php . Кроме того, у вас возникнут проблемы с публикацией без элемента формы. Я бы посоветовал вам взглянуть на следующее: Публикация данных с помощью PHP

2. Вероятно, он не использует метод post, использующий элемент формы

Ответ №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.";
}
 

Обязательно измените формат даты, чтобы он был правильным форматом для ваших входов и выходов.

Комментарии:

1. Спасибо. Я исправил свой код на основе вашего решения, однако по-прежнему существует неопределенная ошибка индекса. У вас есть какие-либо идеи, почему происходит эта ошибка?

2. либо у вашей $_POST переменной нет ключа dateCheckin , и вам нужно исправить его на что-то другое, либо у какого-то другого массива та же проблема. Undefined Index это просто означает, что вы пытаетесь получить доступ к массиву с помощью ключа или индекса, которого не существует.

3. @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>