2012-07-16 29 views
0

我正在一個PHP窗體,我做了兩個部分,必填字段和可選字段。除了「電子郵件」字段,以下代碼運行良好。我將電子郵件字段設置爲可選字段,但不知何故,它不能用作可選字段,它的工作方式與必填字段類似。 如果有人可以粘貼代碼並嘗試一下嗎?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

的問題是在這條線

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

它不檢查一個空$ _POST [ '電子郵件']

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

現在只觸發驗證,如果$ _ POST [ 'email']不爲空

+0

Dale,非常感謝您的幫助。 :-)另一個簡單的問題,爲什麼名稱字段工作正常?再次感謝您的快速幫助 – olo 2012-07-16 09:52:59

+0

我會看一看,看看我能不能找出一個:) – Dale 2012-07-16 10:02:21

+0

它似乎總是返回true,我只是試圖將此代碼添加到代碼底部<?php echo validate_name( ''); echo validate_name('dale');?>'我在底部看到'11',這意味着兩個驗證。 – Dale 2012-07-16 10:03:56