做同样的事 - 只需少量代码

时间:2014-03-20 22:37:42

标签: php

我一直试图按照自己的方式工作,只需要用现在的所有输入检查它,我可能有100行,所以把它做得少,只是一起检查一下是出错还是什么? / p>

我对此的看法:不是采用14行代码来减少但可能相同,

if($_POST["email"] == "")
        {
            $error = 1; 
        }
        if($_POST["pass1"] == "")
        {
            $error = 1; 
        }
        if($_POST["pass2"] == "")
        {
            $error = 1; 
        }
        if($_POST["fornavn"] == "")
        {
            $error = 1; 
        }
        if($_POST["efternavn"] == "")
        {
            $error = 1; 
        }
        if($_FILES["file"] == "")
        {
            $error = 1; 
        }

2 个答案:

答案 0 :(得分:6)

只需创建一个字段名称数组并循环它们......

foreach(array('email','pass1','pass2',...) as $field) {
    if(empty($_POST[$field])) {
        $error = 1;
     }
}

$_FILES你必须单独处理。如果需要,您可以创建另一个循环。 $_FILES的结构虽然不同;我认为你应该检查"错误"领域。检查文档。

答案 1 :(得分:0)

另一种解决此问题的方法是,考虑到您似乎没有对每个字段执行不同的测试,或使用特定的错误消息进行响应,使用array_diff_key

$names = array('email', 'pass1', 'pass2', 'fornavn', 'efternavn', 'file');
$names = array_keys($names); // convert $names to keys
$posts = array_filter($_POST); // filter out any falsy values
$fails = array_diff_key($names, $posts); // check for the differences

$error = $fail ? 1 : 0;

如果您希望根据缺少的内容回复特定消息,则您已在$fails中列出了问题参数。如果您希望扩展上述内容以考虑特定的值检查,您可以编写自己的数组过滤器回调函数并将其名称作为第二个参数传递给array_filter ...但是这不允许您选择不同的基于数组键过滤响应,仅限于数组值。所有这些都是因为相当烦人array_filter在过滤数组时没有收到键值。