2011-09-21 34 views
2

我有一个选择输入:验证,如果表单数据是目前选择的输入选项

<label for="gender">Gender:</label> 
<select id="gender" name="gender"> 
    <option value="Male">Male</option> 
    <option value="Female">Female</option> 
</select> 

如何验证提交的数据是否属于选择输入?

我曾尝试:

<?php 
if ($_POST['gender'] !== 'Male' || $_POST['gender'] !== 'Female') { 
     // perform redirect 
} 
+0

错误的操作符。使用'&&'代替'||'。 – Jon

+0

定义“我无法验证” –

+0

如Jon所说,您将不得不使用'&&',因为您要检查它是否等于Male,*和*不等于Female,在这种情况下它是无效的。 – EdoDodo

回答

4

一个清洁的方式做这将是

$options = array('Male', 'Female'); 

if(!in_array($_POST['gender'], $options )) // if Male or Female are not in $_POST 
    // redirect 
+0

这样做很麻烦。对我来说+1。 – JClaspill

+0

非常好,现在就试试。 –

+0

不错,虽然你应该改变$ options和$ _POST ['gender'],但数组必须在最后,谢谢你的回答。 –

0
if ($_POST['gender'] != 'Male' && $_POST['gender'] != 'Female') { 
     // perform redirect 
} 

如果两个选项被选中上面将重定向。但个人而言,我更喜欢做' - 选择 - '选项,并简单地检查它。

<label for="gender">Gender:</label><select id="gender" name="gender"> 
<option value="0" selected=selected>--Choose--</option> 
<option value="Male">Male</option> 
<option value="Female">Female</option> 
</select> 

if ($_POST['gender'] != '0') { 
     // perform redirect 
} 

此外,原来的将工作与:

if ($_POST['gender'] == 'Male' || $_POST['gender'] == 'Female') { 
     // perform redirect 
} 
+0

尽管如此,该值仍然无法验证值是男性还是女性。 –

+0

虽然在技术上是正确的,但这将适用于任何选择。 '0'是自动选择的。所以,只要没有发送0,那么就选择了另一个选项。我不愿意硬编码每个选择的所有'选项',这简化了这一点,并且可以在任何你选择'0'的选项上工作。当然,它也允许注入一个错误的选择。但这也是为什么我会发送整数,而不是硬编码的名称。 – JClaspill

+0

编辑以添加您的原始代码设置的工作方式。 – JClaspill

-1

你应该完全避免传递文字值时,这些都是在已知的范围内/域。

该表格可以使用索引值生成,例如,

<?php 
$options = []; 
$options['gender'] = [1 => 'Male', 2 => 'Female']; 
?> 
<label for="gender">Gender:</label> 
<select id="gender" name="gender"> 
    <?php foreach ($options['gender'] as $i => $name):?> 
    <option value="<?=$i?>"><?=$name?></option> 
    <?php endforeach;?> 
</select> 

那么您输入的验证逻辑将简单地检查该$options阵列中值的存在,例如

<?php 
if (isset($options['gender'][$_POST['gender']])) { 
    // 
} 

此外,考虑使用现有的形式生成工具(例如https://github.com/gajus/dora)和输入验证库(https://github.com/gajus/vlad)。我是这两个图书馆的作者,每个图书馆都会向你推荐现有的备选方案。使用现有的库生成表单并处理输入验证的目的是避免重新发明轮子并保护自己免受处理表单时经常被忽略的愚蠢安全错误的影响。 XSS。

0

您也可以使用此方法。

<?php 
if (isset($_POST['submit'])) { 
    $_POST = array_map('stripslashes', $_POST); 
    extract($_POST); 

    if (!isset($Male) && !isset($Female)) { 
    // redirect 
    } 
} 
?>