2015-10-13 53 views
1

我有下面的代碼行PHP在確保所有表單域的頁面的頂部已經在他們的內容,而不是提交空...PHP是沒有檢測到所有空字段


if(!isset($_POST['name'])) { $err_name = 1; } 

    if (!isset($_POST['phone'])) { $err_phone = 1; } 

    if (!isset($_POST['email'])) { $err_email = 1; } 

    if ((!isset($_POST['serve'])) && ($_POST['other'] == "")) { $err_serve = 1; } 

的名字是一個文本輸入

電子郵件是一個文本輸入

手機文本輸入

服務是一個複選框陣列

其他

是文本輸入


然後下面,我已經得到下面的行,其允許PHP代碼繼續,如果沒有錯誤(上文)


if (($err_name != 1) && ($err_phone != 1) && ($err_email != 1) && ($err_serve != 1)) { 

    $name = $_POST['name']; // required 
    $email_from = $_POST['email']; // required 
    $phone = $_POST['phone']; // required 
    $serve = $_POST['serve']; 
    $other = $_POST['other']; 

然後我有THI的下到每個表單字段...


<?php if ($err_name == 1) { echo '<font color="red">Name cannot be empty</font>'; } ?> 

<?php if ($err_phone == 1) { echo '<br /><font color="red">Phone cannot be empty</font>'; } ?> 

<?php if ($err_email == 1) { echo '<font color="red">Email cannot be empty</font>'; } ?> 

<?php if($err_serve == 1) { echo '<br /><font color="red">You must choose at least 1 area to serve</font>'; } ?> 

是否有人可以幫助我弄清楚,爲什麼它的執行以下操作...

  • 如果我帶&& ($err_serve != 1)出來的第二碼,一切 除了電話顯示錯誤信息

  • 如果我離開它在,只有err_serve拋出錯誤。其他 被忽略,並且不顯示錯誤。

  • 電話拒絕拋出錯誤信息。這是PHP中的所有處理$ _POST 的地方。

注意,所有的測試都通過提交完全是空的形式

+2

這是因爲您使用'isset()'來設置錯誤條件。空文本字段仍然設置並與表單一起發送,但不是未勾選的複選框。 –

+1

顯示錶格。使用空。和未經檢查的複選框是唯一沒有發送到服務器的表單元素 – chiliNUT

+0

嘗試評估var如if($ var){true/false}會出現什麼問題? – Edward

回答

6

值將是完成設置他們是否是充滿有一個值。如果它是一個空值,它仍然是一個值。

而不是使用isset(),請使用empty()。它會檢查,如果:

  1. 的價值存在於所有
  2. 值是其他東西比0,空字符串,虛假等

它適用於複選框究其原因,是因爲當未選中複選框,瀏覽器不會在所有送價值。這與文本字段相反。瀏覽器發送一個文本字段的值,而不管它是否爲空。

http://ca2.php.net/manual/en/function.empty.php

+0

我以爲我也嘗試過空;然而,顯然我沒有改變他們全部清空。完美工作! – KDJ