2

我有很多 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;
    }
}

那是对的吗?

4

5 回答 5

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)
}
于 2013-05-16T21:43:58.213 回答
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

于 2013-05-16T21:47:58.383 回答
3

定义一个这样的函数:

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

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

于 2013-05-16T21:52:22.537 回答
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 个呢?这样的事情将是必要的。

于 2013-05-16T22:08:09.717 回答
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='';
}
于 2013-05-16T21:50:45.403 回答