变量偶尔会清空如何防止Undefined变量错误?

时间:2013-04-03 11:00:11

标签: php

我有一些变量有时可能是空的,有时它们可​​能不是......防止这些错误发生的最佳方法是什么?

Notice: Undefined variable: 

    $results = searchOrders($_GET['search'], $_GET['criteriaId'], $_GET['dateEntered'], $_GET['state']);

$ _GET中的任何一个都可以随时为空。所以错误会弹出很多

8 个答案:

答案 0 :(得分:3)

你需要先用空函数验证它。

$search  = !empty($_GET['search'])?$_GET['search']:"";
$criteriaId  = !empty($_GET['criteriaId'])?$_GET[criteriaId]:"";
$dateEntered  = !empty($_GET['dateEntered'])?$_GET['dateEntered']:"";
$state  = !empty($_GET['state'])?$_GET['state']:"";
$results = searchOrders($search, $criteriaId, $dateEntered, $state);

答案 1 :(得分:1)

快速而肮脏的方法是使用@运算符:

$results = searchOrders(@$_GET['search'], @$_GET['criteriaId'], @$_GET['dateEntered'], @$_GET['state']);

但是我建议不要使用它,因为它会导致糟糕,邋code的代码。您可以将isset用于变量,或者在数组的情况下使用如下构造:

$vars = $_GET + array(
    'search' => '',
    'criteriaId' => '',
    'dateEntered' => '',
    'state' => '',
);
// Alternatively, use $_GET += array(...)
$results = searchOrders($vars['search'], $vars['criteriaId'], $vars['dateEntered'], $vars['state']);

答案 2 :(得分:0)

查看if(isset($var) && !empty($var))

答案 3 :(得分:0)

使用 isset empty 功能。

例如:

if (empty($var) && isset($var)) {
    echo '$var is either 0, empty, or not set at all';
}

答案 4 :(得分:0)

首选使用isset()功能。

请参阅..

isset()

答案 5 :(得分:0)

常见问题,通常用

解决
if(isset($_GET['search'])) {
   $results = searchOrders($_GET['search'], $_GET['criteriaId'], $_GET['dateEntered'],     $_GET['state']);

}

现在只有搜索可用才会运行。

如果您想了解有关isset函数的更多信息,请查看: http://php.net/manual/en/function.isset.php

答案 6 :(得分:0)

foreach($_GET as $key){
  if(isset($key)){
    $results = searchOrders($key);
  }
}

答案 7 :(得分:0)

您的searchOrders函数是否支持空参数?如果是这样,您只想删除警告/错误消息,只需将@放在

之前
$results = @searchOrders($_GET['search'], $_GET['criteriaId'], $_GET['dateEntered'], $_GET['state']);

如果你的函数不支持空参数并且它们都是必需的,你需要在

之前检查它们
if( isset($_GET['search']) && !empty($_GET['search'])
    && isset($_GET['criteriaId']) && !empty($_GET['criteriaId'])
    && isset($_GET['dateEntered']) && !empty($_GET['dateEntered'])
    && isset($_GET['state']) && !empty($_GET['state']))
    $results = searchOrders($_GET['search'], $_GET['criteriaId'], $_GET['dateEntered'], $_GET['state']);

如果您多次使用这些变量,并且不想每次都使用if@,则可以在脚本开头的某处检查它们:

$_GET['criteriaId'] = (isset($_GET['criteriaId']) & !empty($_GET['criteriaId'])) ? $_GET['criteriaId'] : null;

您可以将此用于所有变量,并将null替换为应分配给变量的默认值。