我使用以下代码验证表单中的整数输入字段:
if (isset($_POST['MaxiVegXP']) && ctype_digit($_POST['MaxiVegXP']))
{
$MaxiVegXP = $_POST['MaxiVegXP'];
} else {
$MaxiVegXP = FALSE;
}
我有另外20个左右的表格输入字段。使用PHP循环有更快的方法吗?我宁愿不再为上面的20个输入字段做上述事情: - )
答案 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
在您定义了您的密钥后对其进行了处理可接受值的数组