2015-09-03 55 views
0

我簡單的PHP表單驗證腳本:PHP驗證各個表單字段然後將其全部

$email  = (isset($_POST['email'])) ? $_POST['email'] : '' ; 
$password  = (isset($_POST['password'])) ? $_POST['password'] : '' ; 
$fname  = (isset($_POST['fname'])) ? $_POST['fname'] : '' ; 
$lname  = (isset($_POST['lname'])) ? $_POST['lname'] : '' ; 

if (!empty($email) && !empty($password) && !empty($fname) && !empty($lname)) { 
    $auth->createAccount($email, $password, $fname, $lname); 
} 

出於某種原因,它看起來並不對我非常好。

如何檢查每個表單域以指示哪一個是需要填寫的表單,然後在調用createAccount()函數之前檢查並確保填寫了所有字段。

注意:createAccount()函數會清理輸入,所以在這裏不需要這樣做。

+0

你可以使用jQuery這個.. –

+3

我不知道你爲什麼使用三元組,然後檢查它們是否爲空。它真的打敗了這個目的。 –

+1

是的,我可以使用jQuery,但如果JavaScript被關閉,該怎麼辦? –

回答

2

試試這個:

<?php 
$form_names = array(
    'email' => 'e-mail', 
    'password' => 'password', 
    'fname' => 'firstname', 
    'lname' => 'lastname' 
); //So that the user understands the errors better 
$errors = array(); 
foreach ($_POST as $field=>$val) { 
    if (empty($val)) { 
     array_push($errors, 'Please fill out ' . $form_names[$field]); 
    } 
} 
if (count($errors) == 0) { 
    //No errors call the submit PHP function 
} 
else { 
    $string = implode('<br/>', $errors); 
    echo '<p style="color:red;">' . $string . '</p>'; 
} 
?> 

但是,挫折是表單名稱應該適合以可理解的方式回顯給用戶。由於有些可能需要空格,因此可以爲連接到其實際的表單名稱創建一個數組,並使用該值通過回顯給用戶。 $good_name = $form_names[$field]

+1

沒有必要把所有的POST數組放在這裏;-)這就是我看到OP似乎想要實現的內容後所想到的。 –

+0

我喜歡你的簡單解決方案。如果你可以包含你描述爲挫折的表單域數組,它會讓你的答案更好。 –

+0

我包括一個編輯,新的數組只是使錯誤更有意義(例如fname與firstname)。另外@ Fred-ii-,如果我誤解了你,對不起,但是你所說的「所有POST數組」是什麼意思? –

2

處理這是我見過的最常用的方法是創建一個數組:

if (!$_POST['email']) {$errors[] = 'Email field is empty.';} 
if (!$_POST['password']) {$errors[] = 'Password field is empty.';} 
if (!$_POST['fname']) {$errors[] = 'First name field is empty.';} 
if (!$_POST['lname']) {$errors[] = 'Last name field is empty.';} 

然後遍歷錯誤顯示它們:

foreach ($errors as $error) { 
    echo $error.'<br>'; 
}