2015-11-01 51 views
0

可以说我有一个有30个字段的表单。我试图想出一种方法来优化解决方案,以检查服务器端是否所有这些字段都为空或者包含特定的值以及相应的值。PHP优化:表单变量

因此,对于1个变量的代码将如下所示:

if((!isset($_POST['usa_state_list'])) || (strcmp($_POST['usa_state_list'],'undefined') == 0)) { 
    $usa_state_list = ''; 
} 
else { 
    $usa_state_list = $_POST['usa_state_list']; 
} 

现在想象这些领域的30,你得有那些if语句的30。你有关于如何优化这个想法吗?开关或循环也许? 注意:让我们坚持这个例子,我检查字段是空的还是包含undefined字符串。

谢谢

+0

Just [an idea](http://php.net/manual/en/functions.user-defined.php);-) –

+0

Que?我知道什么功能...:P – odedta

回答

1

只需创建一个函数并反复使用它。我刚掀起了简单的例子(没有经过测试):

function checkPost($key) { 

    // check if the element has been posted 
    if(isset($_POST[$key])) { 

     // check if element is empty 
     if($_POST[$key] != '') { 

      // check if the element contains a specific value 
      if($_POST[$key] == 'my specific value') { 

       // do whatever here... 

      } else { 

       // return the posted value 
       return strip_tags($_POST[$key]); 
      } 

     } else { 

      // POST value was empty 
      // you could return an error message here... 
      // or add to a global $errors array... 
      return $key . ' is required'; 
     } 
    } 

    // the element has not been posted 
    return false; 
} 

$usa_state_list = checkPost('usa_state_list'); 
$name = checkPost('name'); 
$address = checkPost('address'); 
+0

啊,很简单,谢谢蒂姆!这确实有很大的帮助。 :) – odedta

+0

strip_tags? 2015年? –

+0

然后呢? 'preg_replace'? – odedta

1

内置filter functions只是稍微详细:

$usa_state_list = filter_form(INPUT_POST, 'usa_state_list'); 

...但因为你需要做一些定制的后加工和你需要输出单个变量我认为这是最好只写自己:

function post($name) { 
    $value = filter_input(INPUT_POST, $name); 
    if ($value!=='undefined') { 
     return $value; 
    } else { 
     return ''; 
    } 
} 
$usa_state_list = post('usa_state_list'); 

当然,如果你认为代码的可读性是懦夫那么天空才是极限:

foreach (
    [ 
     'usa_state_list', 
     'foo', 
     'bar', 
    ] as $name 
) { 
    $$name = post($name); 
} 
+0

我找不到'filter_form'函数的任何文档,但是,我找到了'filter_input'的文档:http://php.net/manual/en/function.filter-input.php。 – odedta

+0

它在这里消毒甚至没有关系?我正在使用MySqli准备好的语句。至于你的“专业代码”,我从来没有见过这样的代码,所以我最好远离现在:) – odedta

+1

我刚刚修复了错字,感谢您的注意。至于卫生方面,我的建议是你永远不要盲目做。你必须知道你想要保护自己。 –