2010-04-08 6 views
1

양식을 제출하려고 할 때마다 연도 필드에 아무 것도 입력하지 않았을 때마다 Incorrect year! 년까지 입력 할 필요없이 어떻게 양식을 제출할 수 있습니까? 즉, 연도 필드를 비워두고 경고를받지 못하는 것입니까?PHP 폼 유효성 검사 문제 제출

다음은 PHP 코드입니다.

if(preg_match('/^\d{4,}$/', $_POST['year'])) { 
    $year = mysqli_real_escape_string($mysqli, $_POST['year']); 
} else { 
    $year = NULL; 
} 

if($year == NULL) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 
+0

'$ year === NULL'을 확인해야합니다. PHP는 null 값을 빈 문자열로 조용히 변환 할 수 있으므로 빈 $ year는 null과 같을 수 있습니다. === (내용 AND 유형 일치) 비교 연산자가 해당 문제를 해결합니다. –

+0

@Marc B, 나는 이것을 시도했지만 어떤 이유로 나는 그것을 작동시키지 못했다. – TaG

답변

0
if(preg_match('/^\d{4,}$/', $_POST['year'])) { 
    $year = mysqli_real_escape_string($mysqli, $_POST['year']); 
} else if(empty($_POST['year'])){ 
    $year = ''; 
} else { 
    $year = null; 
} 

if($year == NULL) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 

는 아마도 내가 오해 해요,하지만 당신이 원하는처럼 들린다.

+0

나는 아직도 틀린 년을 얻는다. – TaG

+1

$ year가 빈 문자열로 설정된 경우 $ year == null은 true로 평가됩니다. $ year == null을 $ year === null로 변경하십시오. – webbiedave

1
if(preg_match('/^\d{4,}$/', $_POST['year'])) { 
    $year = mysqli_real_escape_string($mysqli, $_POST['year']); 
} else { 
    $year = false; 
} 

if ($year === false) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 

OR (다른 곳에서 사용자가 설정하지 않은 경우 년)

if(preg_match('/^\d{4,}$/', $_POST['year'])) { 
    $year = mysqli_real_escape_string($mysqli, $_POST['year']); 
} 

if (!isset($year)) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 
+0

두 번째 예제는 작동하지만 캐 터를 입력 할 수 있다는 것을 알고 있습니다. – TaG

+0

문제는 preg_match에서 내가 만든 변경 사항이 아닙니다. –

+0

어떻게 그렇게? 설명을 부탁드립니다. – TaG

-1

이봐, 당신은이 부분을 취할 수 그것을 당신이 필드가 공백 인 상태 제출 허용이 에코 꺼내합니다

if($year == NULL) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 

데이터베이스에 아무 것도 표시하지 않는 것이 좋습니다. 어쩌면 서버의 기본 날짜 또는 사용자가 입력하지 않은 기본값을 가져올 수 있습니다. 이렇게하면 오류가 발생하지만 여전히 데이터베이스 필드에 무언가를 남깁니다.

+0

당신은 완전히 검증의 개념을 오해했습니다. 코드를 모두 제거하여 문제를 해결할 수는 없습니다. – mattbasta