短路是否发布POST?

时间:2013-05-16 21:41:56

标签: php

我有许多确认检查:

if (isset($_POST['name']) && isset($_POST['day']) && isset($_POST['month']) && isset($_POST['year']) && isset($_POST['email']) && isset($_POST['email2'])&& isset($_POST['pass']) && isset($_POST['pass2']))
{

有没有办法缩短它?

$isset = array
(
    'name', 'day', 'month', 'year',
    'email', 'email2', 'pass', 'pass2'
);

foreach ($isset As $set)
{
    if (!isset($_POST[$set]) || empty($_POST[$set]))
    {
        echo 'error';
        break;
    }
}

这是对的吗?

5 个答案:

答案 0 :(得分:4)

您只能使用循环和empty

$keys = array('name', 'day', 'month');  // ...

foreach ($keys as $key) {
  if (empty($_POST[$key])) {
    // fail
    break;
  }
}

或者您可以使用array_diff_key()

if (array_diff_key(array_flip($keys), $_POST)) {
  // fail (some keys not present in $_POST)
}

答案 1 :(得分:3)

isset()可以使用多个参数,因此您可以像这样缩短它。

if (isset($_POST['name'], $_POST['day'], $_POST['month'], $_POST['year'], $_POST['email'], $_POST['email2'], $_POST['pass'], $_POST['pass2']))

PHP文档:http://php.net/manual/en/function.isset.php

答案 2 :(得分:3)

定义一个这样的函数:

function getPost($key, $default = null) {
    if (isset($_POST[$key])) {
        return $_POST[$key];
    }
    return $default;
}

然后您可以跳过isset验证。如果没有这样的值,默认情况下,该函数将返回null

答案 3 :(得分:2)

如果您从输入表单发送这些内容并且您的默认值属性为value =“”,那么它仍将在$ _POST中设置。

例如,如果上一页有:

<input type="text/css" id="email" name="email" value="" />

然后,如果用户将其留空,则isset($ _ POST ['email'])将返回true,$ _POST ['email']将具有值“”。那没用,对吧?

试试这个。

$c = 0;
foreach($_POST as $key => $value)
{
$value = trim($value);//Makes sure there's no leading, or ending spaces.  Safe to guard against a string that is " " instead of "".
if(strlen($value) > 0)
    {
    $c++;
    }
else
    {
    echo "$_POST['" . $key . "'] has a problem.";
    }
break;
}

然后,对于您所考虑的任何条件,您的新if语句可以是:

if($c == 8)//8 being the number of keys you're expecting to not be "" or null.
{
//Your conditions.
}

记住这一点很好。你只测试8个数组键,但如果你有800个怎么办?这样的事情是必要的。

答案 4 :(得分:1)

取决于你在做什么,如果要设置一个值,三元运算符会产生奇迹:

isset($_POST['day'])?$day=_POST['day'] :$day='';

在该行之后,$ day始终设置,您只能使用if($ day)进行测试。

如果有许多值,您始终可以循环运行此分配:

foreach(array('day','month','name') as $var)
{
  isset($_POST[$var])?$$var=$_POST['$var']:$$var='';
}