用PHP验证选择框是否有效?

3

我曾经编写过PHP代码,但今天我第一次需要验证一个下拉框,惊讶地发现我实际上不知道该怎么做。基本上这是我的HTML代码:(忽略代码中的会话部分)

<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>

基本上,我编写了下面的php代码,认为它会验证它,但是无论我是否使用Firebug在浏览器中篡改值,它始终返回性别无效的错误。

我的编辑个人资料表单的其余部分都正常工作,选择框也是如此(没有验证),但是显然我需要验证它,因为男性、女性或空白在用户个人资料数据库中更新。我会使用mysql_real_escape string等等,但这里仅出于简单起见而未添加。

$gender = $_POST['gender'];

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

如果有人能解释一下如何检查选择框的值,以确保它们没有被篡改,并且包含男性、女性或无值,那就太感谢了。也许我做错了什么。
6个回答

5
问题不在于选择值,而在于您的条件语句。我认为您想要这个:
if(!empty($gender) && $gender != "Male" && $gender != "Female"){
    $error[] = "Gender not valid";
}

请注意,所有条件都是AND逻辑。

5
一个更简单的方法是将变量与允许的值列表进行比较:
if (!in_array($gender, array("", "Male", "Female"))) {
    $error[] =

请注意,数组列表中也包括空的""字符串。

谢谢马里奥,似乎更合乎逻辑的最佳解决方案,所以谢谢 :) - PHPLOVER

0

尝试过 if(!empty($gender) && $gender != "Male" && $gender != "Female"){


0

|| 改为 &&。你需要确保性别既不是男性也不是女性,不能是其中之一。


-1

如果这样写呢:if(!($gender == "" || $gender == "男" || $gender == "女")){


-1

在选择标签中,男性和女性是唯一的选项:

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

对于男性不会有任何选择,因此也没有非选择的选项。

保持简单,这样就会更少出错 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接