2016-11-04 2 views
0

mysql에서 날짜를 관리하는 방법을 배우려고합니다. 연습을위한 연습 문제가 있습니다.php checkdate, 각 인수를 개별적으로 확인하십시오.

입력시 사용자는 dd-mm-YYYY 형식의 날짜를 추가해야하며 날짜가 유효한 경우 형식을 YYYY-mm-dd로 변경하여 데이터베이스에 기록합니다.

HTML

<form method="POST" action="testing.php"> 
     <div> 
      <label for="title" class="required">Title</label> 
      <input name="title" id="title" type="text" value="" /> 
     </div> 
     <div> 
      <label for="date" class="required">Date</label> 
      <input name="date" id="date" type="date" value="" /> 
     </div> 
     <button class="submit" type="submit" name="submit">Submit</button> 
     </form> 

PHP

을 :

이것은 내가 지금까지 무엇을 얼마나 DATE 변수 유형이 아직 도착하지 않은, (내가 이해로) 저장되지만 ...

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $title = filter_input(INPUT_POST, 'title', FILTER_SANITIZE_STRING); 
    $string_input_date = filter_input(INPUT_POST, 'date', FILTER_SANITIZE_STRING); 
    $array_input_date = explode("-", $string_input_date); 
    if(!checkdate($array_input_date[1], $array_input_date[0], $array_input_date[2])) { 

     if(checkdate(!$array_input_date[1], $array_input_date[0], $array_input_date[2])) { 
      $error_message = "wrong month"; die($error_message); 
     } elseif (checkdate($array_input_date[1], !$array_input_date[0], $array_input_date[2])) { 
      $error_message = "wrong day"; 
     } elseif (checkdate($array_input_date[1], $array_input_date[0], !$array_input_date[2])) { 
      $error_message = "wrong year"; 
     } else { 
       $error_message = "Introduce a valid date"; 
     } 
    } else { 
     //success! it is a valid date 
    } 
} 

내가 볼 수있는 것은 작동하지 않지만 옵션마다 하나씩 각 인수를 검사 할 수있는 방법이 부족합니다. 객관적으로는 오류 메시지를 표시해야합니다. 잘못되었거나, 월 또는 1 년.

현재 "잘못된 날짜"라는 오류 메시지가 표시되는 35-04-2016을 소개하려고하지만 대신 "유효한 날짜 소개"가 표시됩니다. 내 if-elseif가 잘못 되었기 때문에 표시한다는 것을 알고 있지만 각 인수를 개별적으로 확인하는 방법에 대한 제안은 무엇입니까?

추신 : 정규 표현식으로 할 수 있다는 것을 알고 있습니다. 또는 한 달 같은 규칙을 만드는 것은 1-12 등입니다.하지만 멘토는 PHP 기능을 사용하고 기능을 내장해야한다고 말합니다.

당신에게

답변

0

checkdate()은 전체 날짜를 기준으로 true 또는 false를 반환, 그것은 잘못 된 부분을 말하지 않을 것이다.

어떤 부분이 잘못된 것인지 알고 싶으면 하나씩 확인해야합니다.

if(!checkdate($array_input_date[1], $array_input_date[0], 
    $array_input_date[2])) 
     { 
      if($array_input_date[1] < 0 || $array_input_date[1] > 12) 
      { 
       $error_message = "wrong month"; die($error_message); 
      } 
      elseif($array_input_date[2] < 0) 
      { 
       $error_message = "wrong year"; 
      } 
      else 
      { 
       $last_day = cal_days_in_month(CAL_GREGORIAN, $array_input_date[1], $array_input_date[2]); 
       if($array_input_date[0] < 0 || $array_input_date[0] > $last_day) 
       { 
        $error_message = "wrong day"; 
       } 
      } 
     } 
0

업데이트 감사 (그는 나에게 그가 ^^ 내가 원하는 건 뭐든지 말해 수도 울고 본다면, 내가 생각 지금) 그래서이 정규 표현식을 내 자신의 규칙을 만들거나 함께 해결할 수없는

PHP DATE_PARSE 방법을 사용할 수 있습니다.

if (false === strtotime($string_input_date)) { 
    echo 'Invalid Date'; 
} else { 
    $array_input_date = date_parse(date('Y-m-d H:i:s', strtotime($string_input_date))); 

    if (false !== checkdate($array_input_date['month'], $array_input_date['day'], $array_input_date['year'])) 
    { 
     echo 'Valid Date'; 
    } 
} 
+0

하지만 나는 같은 상황에 처해 있습니까? 주어진 날짜가 유효한지 아닌지 어떻게 비교합니까? 그 데이터를 파싱하면 ... # 35-04-2015 : [년] => 2035 [월] => 4 [일] => 20 그래서 감지하지 못합니다. 그 날은 잘못되었지만 주어진 해를 수정합니다! –

+0

@eve_mf가 내 대답을 업데이트했습니다. ** 35-04-2015 **를'strtotime'에 건네 주면 false를 반환합니다. 그래서, 그 첫 번째 검증을 할 것입니다, 만약 충분하지 않다면'checkdate'에 갈 수 있습니다. – Haridarshan

관련 문제