2011-04-11 56 views
3

我用PHP編碼,但今天我第一次需要驗證一個選擇框,並且很震驚地意識到我實際上並不確定如何。基本上,這是我的HTML:(忽略代碼會話的東西)使用PHP驗證選擇框?

<label for="gender">Gender</label> 
<select id="gender" name="gender" class="select option"> 
<option<?php if($_SESSION['gender'] === "") { echo ' selected="selected"'; } ?> value="">&nbsp;</option> 
<option<?php if($_SESSION['gender'] === "Male") { echo ' selected="selected"'; } ?> value="Male">Male</option> 
<option<?php if($_SESSION['gender'] === "Female") { echo ' selected="selected"'; } ?> value="Female">Female</option> 
</select> 

基本上我寫了下面以爲它會使用Firebug它總是返回驗證,但我是否與值篡改或沒有瀏覽器的PHP代碼性別無效錯誤。

我的編輯配置文件表單的其餘部分工作正常,所以選擇框(沒有驗證),但顯然我需要驗證它作爲男性,女性或沒有更新數據庫中的用戶配置文件。我做mysql_real_escape串等,但不加,這裏只是出於簡單的等

$gender = $_POST['gender']; 

if(!empty($gender) && $gender != "Male" || $gender != "Female"){ 
    $error[] = "Gender not valid"; 
} 

如果有人能解釋一下我是如何從檢查選擇框中的值,以確保它們不被篡改,並含有男性,女性或沒有值得讚賞的價值。也許我做錯了。

回答

3

一個更簡單的方法是將可變與之比較的允許值的列表:

if (!in_array($gender, array("", "Male", "Female"))) { 
    $error[] = 

注意如何數組列表還包括空""字符串。

+0

感謝馬里奧似乎更合乎邏輯的最佳解決方案,所以謝謝:) – PHPLOVER 2011-04-11 21:42:06

4

問題不在於選擇值,而在於您的條件。我想你想要這個:

if(!empty($gender) && $gender != "Male" && $gender != "Female"){ 
    $error[] = "Gender not valid"; 
} 

請注意,所有的條件都AND'd在一起。

-1

if(!($gender == "" || $gender == "Male" || $gender == "Female")){怎麼樣?

+0

你至少可以留下反饋,當你倒票? – 2011-04-13 03:47:38

0

試過if(!empty($gender) && $gender != "Male" && $gender != "Female"){ ??

0

||更改爲&&。你需要確保性別不是男性而不是女性,而不是一個或另一個。

0

男性和女性作爲在選擇標籤的唯一選擇:

'selection'=> Input::get('selection') 

沒有選擇將被選定爲男性,所以對非選擇的選項。

只是保持簡單;這樣,它會不太容易出錯:)