2012-02-01 75 views
0

我編碼了一個簡單的接觸形式,和下面的代碼是給我找麻煩奇怪的問題:PHP - 用POST數據

if(!strlen($_POST['lastname']) > 0){ 
    echo '<p class="message error">Please enter the parent\'s last name.</p>'; 
} 

if(!strlen($_POST['comments']) > 5){ 
    echo '<p class="message error">Please tell us a little more in the comments field.</p>'; 
} 

相關表單元素:

<textarea name="comments" cols="60" rows="5"><?=(isset($_POST['comments']) ? $_POST['comments'] : '')?></textarea> 

當我離開這兩個字段都是空白的,只顯示第一條錯誤消息(和其他未顯示的),而註釋字段則沒有。

如果我提交的註釋字段少於5個字符,錯誤檢查甚至會返回錯誤,因爲它應該這樣,但錯誤消息不會打印。此外,我甚至在回覆評論字段的strlen()時將其提交爲空白,並將其打印爲0.

任何人都可以看到這裏的問題是什麼?

+1

如果爲什麼不使用(strlen的($ _ POST [「意見」])<6){ - 它讀得更好。 – 2012-02-01 04:08:29

+0

@基蘭安德魯斯 - 因爲我今晚加班2小時,所以,嘿嘿......但是,謝謝你。 請重新發布答案。 – AVProgrammer 2012-02-01 04:10:34

+2

經典案例*不喝酒和代碼*,或*不累和代碼*。 :o) – deceze 2012-02-01 04:14:32

回答

5

if (!strlen > 0)首先評估strlen,其給出例如10。然後這被!抵消到false然後將> 0進行比較,其爲false,因爲false將被轉換爲0並且0 > 0false。反過來說,如果字符串實際上是空的,條件將是true

你要麼if (!(strlen > 0))要麼if (strlen <= 0)

+0

準確地說,謝謝! – AVProgrammer 2012-02-01 04:14:41

3

缺少括號?

if(!(strlen($_POST['lastname']) > 0)) { 
    echo '<p class="message error">Please enter the parent\'s last name.</p>'; 
} 

if(!(strlen($_POST['comments']) > 5)) { 
    echo '<p class="message error">Please tell us a little more in the comments field.</p>'; 
} 
+0

與欺騙...謝謝! – AVProgrammer 2012-02-01 04:15:01

1

如果你想驗證數據是否被輸入,你可以使用下列選項太

if(empty($_POST['name'])){ 
    echo 'Enter Name'; 
} 

or 

if(trim($_POST['name'])==''){ 
echo 'Enter Name'; 
} 
1

只要是明確的,這裏的問題是!僅適用於strlen的返回值,而不適用於整個比較表達式。上述if語句將總是返回false。

它可以改寫這樣的工作:

if (!(strlen($_POST['lastname']) > 0)){ /* display error */ } 

這是由於!否定嵌套在括號中的表達式的結果,而不是由strlen返回的數字。

另外,我建議不要返回張貼的值在HTML源代碼不變,這只是自找麻煩...