2015-10-29 3 views
0

У меня есть простой код, который разделит даты диапазона на два. Вот оно:PHP Validate Диапазон Даты

HTML:

<input type="text" name="range" /> 
<button type="submit>Submit</button> 

PHP

$range = $_POST['range']; 
$reservation = explode("-", $range); 
$from  = date('Y-m-d', strtotime($reservation[0])); 
$to   = date('Y-m-d', strtotime($reservation[1])); 

Расщепление даты работ, но всякий раз, когда я ставлю любой символ в текстовом поле и нажмите на кнопку отправить, я получите undefined offset: 1, потому что у меня нет валидации для дат диапазона.

Есть ли способ, чтобы проверить варьировались даты, как, например, если я ставлю "10/29/2015 - 10/31/2015" в текстовом поле и нажмите на кнопку отправить, я буду получать «success» и если я ставлю любой символ, как «asdasdasda», я буду получать «failed».

Любая помощь будет высоко оценена.

UPDATE

Проверка, если вход в которые варьировались дату в настоящее время работает, но проверка даты нет. Я использую checkdate функцию

$reservation = explode("-", $_POST['range']); 

    if (isset($reservation[0]) && isset($reservation[1])) { 
     $from = date('Y-m-d', strtotime($reservation[0])); 
     $to = date('Y-m-d', strtotime($reservation[1])); 

     $checkFrom = explode('-', $from); 
     $checkTo = explode('-', $to); 

     if (!checkdate($checkFrom[1], $checkFrom[2], $checkFrom[0]) || !checkdate($checkTo[1], $checkTo[2], $checkTo[0])) { 
      die('invaild date'); 
     } 
    } else { 
     die('invaild date'); 
    } 
+0

Используйте '! Empty()' check – jitendrapurohit

+0

@JitendraPurohit, это будет проверять только на пустой вход? – FewFlyBy

+0

Вам нужно сделать что-то вроде 'if (! Isset ($ reserve [1]))', чтобы убедиться, что 'explode' работал. Затем установите флажок 'if ($ from === false || $ to === false)', чтобы убедиться, что они содержат допустимые даты. – Mike

ответ

1

Вашей explode() должны быть основаны на разделителе, используемом в форме

$range = $_POST['range']; 
$reservation = explode("-", $range); 
if(count($reservation) == 2) { 
    if(validateDate($reservation[0]) && validateDate($reservation[1])){ 
     $from  = date('Y-m-d', strtotime($reservation[0])); 
     $to   = date('Y-m-d', strtotime($reservation[1])); 
    } else { 
     //error 
    } 

} else { 
    //error 
} 

функции была скопированы из этого answer или php.net

Если вы хотите, вы можете даже использовать date_parse()

+0

Я попробую и обновит вас как можно скорее. – FewFlyBy

+0

@FewFlyBy ya sure .. –

+0

Не работает bro – FewFlyBy

1

Попробуйте это регулярное выражение для проверки диапазона дат -

if (preg_match("/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}\-[0-9]{1,2}\/[0-9]{1,2}\/[0-9‌​]{4}/", $_POST["range"]) === 0) { 
    echo 'error'; //or just return; 
} 
+0

выглядит kewl !!!!!! –

0

Вы можете сделать одну вещь сделать поле только для чтения, и применять необходимую проверку на этом поле, поэтому, если поле только для чтения, то пользователь может только иметь возможность выбрать диапазон дат который применяется в этом поле, и пользователь не может выполнить какой-либо ввод вручную, и если пользователь не выберет это, тогда ваша требуемая проверка покажет нужное сообщение.