如何使用PHP验证多个输入

时间:2014-12-06 12:24:28

标签: php

我使用以下代码验证表单中的整数输入字段:

if (isset($_POST['MaxiVegXP']) && ctype_digit($_POST['MaxiVegXP']))
{
    $MaxiVegXP = $_POST['MaxiVegXP'];
} else {
    $MaxiVegXP = FALSE;
}

我有另外20个左右的表格输入字段。使用PHP循环有更快的方法吗?我宁愿不再为上面的20个输入字段做上述事情: - )

4 个答案:

答案 0 :(得分:3)

我会做类似@Simply Dread的事情,但略有改进,所以我可以明确指出哪些字段需要修复:

$validFields = array('field1' => true, 'field2' => true, 'field3' => true, ..., 'fieldN' => true);

foreach ($validFields as $field => $valid) {
    if (!isset($_POST[$field]) && !ctype_digit($_POST[$field])) {
        $validFields[$field] = false;
    }
}

有了这些信息,我现在可以在相应的字段上显示错误,而不是只说出有问题。

答案 1 :(得分:1)

一个选项是创建一个字段名称数组并在其上循环。这样做将确保所有字段都必须设置并且是数字。之后检查验证变量,您将知道它是否成功。 : - )

$fieldArray = array('fieldOne', 'fieldTwo', 'fieldThree');
$validate = true;

foreach ($fieldArray as $field) {
    if (!isset($_POST[$field]) && !ctype_digit($_POST[$field])) {
        $validate = false;
    }
}

答案 2 :(得分:1)

您可以迭代所有字段,例如:

foreach ($_POST as $key=>$value){
    if (isset($_POST[$key]) && ctype_digit($_POST[$key])) {
        $$key = $value;
    } else {
        $$key = FALSE;
    }
}

但我会把代码放在一个函数中,并为每个post变量明确地调用函数:

function isDigit($value) {
    if (isset($value) && ctype_digit($value)) {
        return true;
    }
    return false;
}

$MaxiVegXP = isDigit($_POST["MaxiVegXP"]) ? $_POST["MaxiVegXP"] : false;

答案 3 :(得分:1)

  

使用PHP循环有更快的方法吗?

如果没有PHP循环,可以更快地完成这项工作:

我会使用filter_input_array。如果该代码未通过过滤器,则此代码将为该值指定null。它非常实用,你只需要在数组中添加变量的名称和它所需的过滤器。

$vars = filter_input_array(INPUT_POST,array (
  'MaxiVegXP'=>FILTER_VALIDATE_INT,
  'myVar'=>FILTER_DEFAULT, 
// or FILTER_VALIDATE_INT. you can also define validator callbacks if need be
));

在这里您可以定义您希望从输入中获取的键(在此示例中为$_POST,但您可以使用INPUT_GET$_GET超全局中获取变量。您还可以在数组中定义更高级的选项,以定义输入的最小或最大范围,例如

$vars = filter_input_array(INPUT_POST,array (
  'MaxiVegXP'=>array(
    'filter'=>FILTER_VALIDATE_INT,
    'options'=>array('min_range'=>1, 'max_range'=>10),
  ),
));

有用的是,您不必手动验证每个密钥是否存在以及它们的类型filter_input_array在您定义了您的密钥后对其进行了处理可接受值的数组