验证表单数据是否为当前选择输入选项

时间:2011-09-21 17:03:17

标签: php

我有一个选择输入:

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

4 个答案:

答案 0 :(得分:4)

更简洁的方法是

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

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

答案 1 :(得分: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
}

答案 2 :(得分:0)

您也可以使用此方法。

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

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

答案 3 :(得分:-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。