我有一个选择输入:
<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
}
是一种更清洁的方法
$options = array( 'Male', 'Female' );
if( !in_array( $_POST['gender'], $options ) ) // if Male or Female are not in $_POST
// redirect
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
}
您也可以使用此方法。
<?php
if ( isset($_POST['submit']) ) {
$_POST = array_map( 'stripslashes', $_POST );
extract( $_POST );
if ( !isset($Male) && !isset($Female) ) {
// redirect
}
}
?>
当文本值在已知范围/域中时,应避免完全传递这些值。
表格可以使用索引值生成,例如
<?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。