PHP防止HTML列表的错误数据收集(选择,复选框,单选)


PHP Prevent Bad Data Collection for HTML Lists (Select, Checkbox, Radio)

为了防止错误的数据收集,我正在考虑一种方法来防止我的PHP代码接受不需要的值。

我使用相同的列表来填充我验证的值。这将适用于下拉列表、收音机和复选框。

当然,这是一个非常简单的例子,但我只是想让其他程序员了解一下这个想法,看看我是否偏离了基础。

// get form value
$name = $_POST['color'];
// form list values
$arr =  array("blue", "red", "green");
// build options
for($i = 0, $size = sizeof($arr); $i < $size; ++$i)
{
echo '<option value="' . $arr[$i] . '">' . $arr[$i] . '</option>';
}
// verify value is valid
if (in_array($name, $arr)) {
    // valid value
}

我相信这是一个很好的方法,尽管我可能会在脚本的顶部执行所有检查逻辑,即:

// set the error flag
$error_flag = false;
// form list values
$arr =  array("blue", "red", "green");
if(isset($_POST)){
    // get form value
    $name = $_POST['color'];
    // verify value is valid
    if (in_array($name, $arr)) {
        // valid value
    } else {
        // error - you selected an invalid value!
        $error_flag = true;
    }
    if($error_flag == false){
        // process data and save to database, etc etc
    }
}
if($error_flag == true){
    // display the error
}
// build options
for($i = 0, $size = sizeof($arr); $i < $size; ++$i){
    echo '<option value="' . $arr[$i] . '">' . $arr[$i] . '</option>';
}

我添加了一个错误标志,这样你也可以通知最终用户他们做错了什么,并允许他们再次填写表格。当然,你可以扩展它,让正确的字段"记住"之前已经发送的数据,同时指示哪些字段是坏的。

这似乎是一条路!

不确定这是否只是一个快速草图,而是使用前臂

for($i = 0, $size = sizeof($arr); $i < $size; ++$i){
    echo '<option value="' . $arr[$i] . '">' . $arr[$i] . '</option>';
}

成为

foreach($arr AS $v){
    echo '<option value="' . $v . '">' . ucfirst($v) . '</option>';
}