2012-07-16 3 views
0

나는 PHP 폼에서 작업 중이며 필수 필드와 선택적 필드의 두 부분을 만들었습니다. 다음 코드는 "email"필드와 별개로 작동합니다. 옵션 필드에 이메일 필드를 만들었지 만, 어떻게 든 옵션으로 작동하지 않습니다. 필수 필드처럼 작동합니다. 누군가 코드를 붙여넣고 시도해 볼 수 있다면?php 선택적 필드 코드 홀수 오류

의견을 보내 주셔서 감사합니다.

<?php 

// Set required fields 
$required_fields = array('phone'); 

$optional_fields = array('name','email'); 

// set error messages 
$error_messages = array(
    'name' => 'Please enter your name, letters only', 
    'phone' => 'Please enter a valid phone number', 
    'email' => 'Please enter a valid email address', 
); 

// Set form status 
$form_complete = FALSE; 

// configure validation array 
$validation = array(); 

// check form submittal 
if(!empty($_POST)) { 

    // Loop into required fields and make sure they match our needs 
    foreach($required_fields as $field) {  
     // the field has been submitted? 
    // if(!array_key_exists($field, $_POST)) array_push($validation, $field); 

     // check there is information in the field? 
     if($_POST[$field] == '') array_push($validation, $field); 

       // validate the phone number supplied 
     if($field == 'phone') if(!validate_phone_number($_POST[$field])) array_push($validation, $field); 

    } 

     //starts here for optional validation 
    foreach($optional_fields as $field){ 
     if(!array_key_exists($field, $_POST)) array_push($validation, $field); 

      // validate the name if supplied 
    if($field == 'name') if(!validate_name($_POST[$field])) array_push($validation, $field); 


    // validate the email address supplied 
    if($field == 'email') if(!validate_email($_POST[$field])) array_push($validation, $field); 

    } // basic validation result 
    if(count($validation) == 0) { 

     $form_complete = TRUE; 
    } 
} 

//functions for validation different fields 
function validate_name($phone = FALSE) { 
    return (!preg_match('/[^a-zA-Z ]/', $phone))? TRUE : FALSE; 
} 

function validate_email($email = FALSE) { 
    return (preg_match('/^[^@\s][email protected]([-a-z0-9]+\.)+[a-z]{2,}$/i', $email))? TRUE : FALSE; 
} 

function validate_phone_number($phone = FALSE) { 
    return (!preg_match('/\D/', $phone))? TRUE : FALSE; 
} 

?> 



<?php if($form_complete === FALSE): ?> 


    <form id="form" name="form" method="post" action=""> 

     <label for="name">Name:</label> 
     <input class="inter" type="text" name="name" id='name' value="<?php echo isset($_POST['name'])? $_POST['name'] : ''; ?>"/><?php if(in_array('name', $validation)): ?><span class="phperror"><?php echo $error_messages['name']; ?></span><?php endif; ?> 
<p></p> 


     <label for="phone">Phone:</label> 
     <input type="text" name="phone" id='phone' value="<?php echo isset($_POST['phone'])? $_POST['phone'] : ''; ?>"/><?php if(in_array('phone', $validation)): ?><span class="phperror"><?php echo $error_messages['phone']; ?></span><?php endif; ?> 
<p></p> 


     <label for="email">Email:</label> 
     <input type="text" name="email" id='email' value="<?php echo isset($_POST['email'])? $_POST['email'] : ''; ?>"/><?php if(in_array('email', $validation)): ?><span class="phperror"><?php echo $error_messages['email']; ?></span><?php endif; ?> 
<p></p> 
    <input type="submit" value="Send" /> 
    </form> 


<?php else: ?> 
<h2>Your message was sent</h2> 
<?php endif; ?> 

답변

1

문제는 지금은 유효성 검사를 발생 그것은 빈 $ _POST [ '이메일']

// validate the email address supplied 
if($field == 'email' && ! empty($_POST[$field])) if(!validate_email($_POST[$field])) array_push($validation, $field); 

검사 아니에요이 줄

// validate the email address supplied 
if($field == 'email') if(!validate_email($_POST[$field])) array_push($validation, $field); 

에 $ _POST [경우 '이메일']이 비어 있지 않습니다.

+0

데일, 많은 도움을 주셔서 감사합니다. :-) 그냥 또 다른 빠른 질문, 왜 이름 필드가 잘 작동합니까? 귀하의 빠른 도움을 주셔서 다시 한번 감사드립니다 – olo

+0

나는 그 중 하나를 알아낼 수 있는지 한번 살펴 보겠습니다 :) – Dale

+0

항상 진실을 반환하는 것처럼 보입니다. 코드의 맨 아래에 추가하려고했습니다. '그리고 맨 아래에'11'이 표시됩니다. 이는 양쪽 모두 유효 함을 의미합니다. – Dale