How to debug my PHP validation function? -


i creating web form work being validated using php. however, when test page keep getting of error messages returned without form being submitted when valid information inputted. following small section of code (including html sections).

<?php $date ="" $dateerror = "" if ($_server["request_method"] == "post") {     if (empty($_post["date"])) {         $dateerror = "date required";     } else {         $date = test_input($_post["date"]);         $array = explode("/", $date);          $day = $array[1];         $month = $array[0];         $year = $array[2];          if (!checkdate($month, $day, $year)) {             $dateerror = "date mustbe in m/d/y format";         } else {             date_default_timezone_set("america/anchorage");             $today = strtotime("now");             if (strtotime($date)>=$today) {                 $date = test_input($_post["date"]);             } else {                 $dateerror = "date before present day";             }         }     }  <input type="text" size="9" name="date" id="date" required title="please enter current date"><?php echo $dateerror; ?><br> 

again, php code returns "date before present day" when date current date.

if want validate date in php, best way use datetime class, , createfromformat method.

this call create datetime object set specified date in given format, or false if invalid date.

so example:

<?php $input = "05/08/2015";  $test = datetime::createfromformat('d/m/y', $input); if (!$test) {     print "you entered invalid date";     die; }  $now = new datetime(); if ($test < $now) {     print "date before present.";     die; } ?> 

simple that. there's no need regex, or exploding input, etc; single simple test. , can use $test variable process date once you've determined it's valid, since it's standard datetime object.

[edit] i've added bit in code deal using datetime class handle date comparisons, give 'before present' error.

the important point here if have datetime object, need compare datetime object; older strtotime() produces different type of date resource datetime, , can't use them (at least not without converting between them time).


Comments