2014-01-06 57 views
1

大家好!我一直在試圖弄清楚爲什麼我的表單驗證不能識別空字段並將它們作爲錯誤返回,這一直很糟糕。PHP沒有讀取表單域爲空

這裏是我用來檢查領域的功能:

function check_required_fields($required_array) { 
$field_errors = array(); 
foreach($required_array as $fieldname) { 
    if (!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0)) { 
     $field_errors[] = $fieldname; 
    } 
} 
return $field_errors; 
} 

然後,我的方式是這樣的過程:

if (isset($_POST['submit'])) { // Form has been submitted. 
    $errors = array(); 

    // perform validations on the form data 
    $required_fields = array('client', 'banner', 'district', 'store', 'position', 'first_name', 'last_name', 'email', 'password'); 
    $errors = array_merge($errors, check_required_fields($required_fields, $_POST)); 

和錯誤的IF語句檢查:

if (empty($errors)) { 
     $query = 

問題是,即使我的字段是空的(我用var_dump($ _ POST)檢查它們)PHP執行$查詢。我認爲這個功能有問題。我希望有人能幫我發現錯誤!

這裏是我的HTML代碼要點:

<form action="registration.php" method="post"> 

<label for="first_name" class="medium">First Name</label> 
<input type="text" name="first_name" class="textbox short_field"> 

<button type="submit" name="submit" value="submit" class="form-submit-button">SUBMIT</button> 

</form> 

我也使用下列功能來驗證字符串的長度,它工作得很好:

function check_max_field_lengths($field_length_array) { 
$field_errors = array(); 
foreach($field_length_array as $fieldname => $maxlength) { 
    if (strlen(trim(mysql_prep($_POST[$fieldname]))) > $maxlength) { $field_errors[] = $fieldname; 
    } 
} 
return $field_errors; 
} 

$fields_with_lengths = array('first_name' => 30, 'last_name' => 30, 'email' => 50, 'password' => 30); 
    $errors = array_merge($errors, check_max_field_lengths($fields_with_lengths, $_POST)); 
+0

和HTML代碼?你必須在你的表單標籤中包含'method ='POST''。 –

+0

你有'var_dump($ errors)'看看裏面有什麼嗎? –

+0

你的'check_require_fields()'函數只接受一個參數,但你用兩個來調用它。 –

回答

1

」問題是,即使我的領域是空的(我檢查了第em with var_dump($ _ POST))PHP執行$查詢。「

你的問題是由這種情況引起的:!是$ var = 0 PHP可以投對方,所以空字符串之間的不同類型的變量等於0證明:

<?php 
$var = ''; 
var_dump($var == 0); 

輸出: bool(true)

現在看這個樣本,模仿,如何PHP進程的條件:

<?php 
$var = ''; 
var_dump(empty($var)); 
var_dump((empty($var) && $var != 0)); 

出把:

bool(true) 
bool(false) 

在第二種情況下布爾函數返回false,因此,該變量將不會被添加到錯誤數組。

我不知道,你想用這個來實現什麼:$var != 0。但條件:

if (!isset($_POST[$fieldname]) || 
    (empty($_POST[$fieldname]) && $_POST[$fieldname] != 0)) { 
     $field_errors[] = $fieldname; 
} 

可以方便地切換到這一點:

if (empty($_POST[$fieldname])) { 
    $field_errors[] = $fieldname; 
} 
+0

謝謝你,user4035!這解決了它!並且,感謝其他人對他們的投入。 – Mike