Shorting isset POST?


Shorting isset POST?

我有很多isset检查:

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;
    }
}

正确吗?

您可以只使用循环和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)
}

isset()可以接受多个参数,所以您可以像这样简单地缩短它。

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

PHP Docs: http://php.net/manual/en/function.isset.php

定义如下函数:

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

则可以跳过isset验证。如果没有,则默认返回null

如果你是从一个输入表单发送这些,并且你的默认值属性是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个呢?这样的东西是必须的。

取决于你在做什么,如果是设置一个值,三元操作符的效果很神奇:

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

在那行之后,$day总是被设置,你只需要用if($day)来测试。

如果有很多值,你可以在循环中运行这个赋值:

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