2014-10-21 3 views
-1

PHP에 익숙하지 않지만 원하는 경우 자체 처리 (contact.php)하고 오류가 발생하면 다른 PHP 페이지 (contactconfirm.php)로 넘어갑니다. 확인. 누군가이 코드의 잘못된 점을 말해 줄 수 있습니까?형태 조작에 대한 3 진 연산자

if(isset($_POST['submit'])){ 
    if(empty($name)) { 
     $errors ++ ; 
     echo "<p>You did not enter a name.</p>";  
    } else { 
     $errors = 0; 
    } 
    if(empty($email)) { 
     $errors ++ ; 
     echo "<p>You did not enter an e-mail.</p>";  
    } else { 
     $cleanEmail = filter_var($email, FILTER_SANITIZE_EMAIL); 
     if (!filter_var($cleanEmail, FILTER_VALIDATE_EMAIL)){ 
      $errors ++; 
      echo "<p>Invalid e-mail. Please try again.</p>"; 
     } else { 
      $errors = 0; 
     } 
    } 
} //closes isset 

?> 


<div class="contact-form"> 
<div class="inputArea"> 
<form action="<?php echo ($errors > 0) ? 'contact.php' : 'contactconfirm.php' ?>" method="post"> 
+0

코드에 리디렉션이 표시되지 않습니다. –

+0

예상대로 작동하지 않습니다. – baao

답변

1

당신은 검증 단계를 통과 할 때마다, 당신은 0$errors를 재설정합니다.

check if "foo" is correct: nope, increments $errors -> `1` 
check if "bar" is correct: yep, reset $errors to 0 

if ($errors == 0) 
    everything is perfect! happy joy joy! 
} 

하지만 오류 카운터가 재설정 되었기 때문에 "foo"는 잘못되었습니다. 이제는 모든 것이 정상이라고하셨습니다. 확인/유효성 검사 단계에서 ALL ($errors = 0)을 삭제하면됩니다.

0

첫 번째 초기 문제를 지적하는 Marc B의 대답을 참조하십시오.

각 검사의 else에서 $ errors = 0을 재설정합니다. 이 명령문을 제거해야합니다. 그렇지 않으면 나중의 check 명령문이 유효하면 $ errors 변수가 재설정됩니다.

또한 검사 중에 오류를 인쇄하지 말고 오류 배열에 추가하고 모든 오류 검사가 발생한 후에 오류 변수를 확인하는 것이 좋습니다.

때문에,

if($errors>0){ 
    print_r($errorArray); 
} 

또는

또한
if($errors>0){ 
    foreach($errorArray as $error){ 
    echo $error; 
    } 
} 

, 그것은 코드의 나머지 부분없이 불분명하지만, 상단 절반이 페이지로 리디렉션 된 후에 확인이처럼 보인다,하지만이 발생하지 않습니다 $ errors는 첫 번째 페이지로드시 값을 갖지 않으므로 양식 동작을 contactconfirm.php으로 자동 설정합니다. 나는 전체 페이지없이 당신의 코드를 오해하고 있을지도 모른다.

양식에서 선회 연산자를 제거하고 동작이 항상 contact.php 인 것을 고려해야합니다.

그런 다음 조건부 논리를 사용하여 오류가 없는지 확인하고 그렇지 않은 경우 header("Location: contactconfirm.php")을 사용하여 리디렉션 할 수 있습니다. 자세한 내용은 documentation on header을 참조하십시오.