如何摆脱数百个PHP未定义的索引通知?

时间:2009-08-07 00:01:18

标签: php

我刚刚启用了错误报告,并且哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇

Notice: Undefined index: action in C:\webserver\htdocs\header.inc.php on line 18

我明白他们是因为我调用变量而没有设置它或者其他什么但是有更简单的方法来设置例如如果一个页面有50个变量报告它,是否有更简单的方法来正确编码该页面解决所有问题?

我并不是要隐藏它们我认为最好修复它们

这是我发布的那一行的一个例子

if ($_GET['p'] == "account.edit.topfriends" || $_GET['action'] == "newmember" || $_GET['p'] == "account.profile.name") {
    //some more code here
}

4 个答案:

答案 0 :(得分:13)

我通常喜欢在脚本顶部使用ternary语句来初始化值。


$_GET['p'] = (isset($_GET['p']) ? $_GET['p'] : 'default');

当然,您可能使用更通用的方法,但该方法可能会很麻烦,因为不同的变量可能有不同的默认值。

答案 1 :(得分:7)

正如rezzif提到你需要做的是检查isset()调用。如果你经常使用数组并且不想返回并添加一堆isset()调用,那么你总是可以使用一个函数。类似的东西:

function get_index($array, $index) {
  return isset($array[$index]) ? $array[$index] : null;
}

然后你可以将你的if语句改为:

if (get_index($_GET, 'p') == "account.edit.topfriends" || get_index($_GET, 'action') == "newmember" || get_index($_GET, 'p') == "account.profile.name") {
  //some more code here
}

如果所有的检查都是针对$_GET的,那么你总是可以修改该函数的第一个参数并在其中硬编码$ _GET,我的例子假设你是针对几个不同的数组做的。

这个解决方案不一定是最优雅的,但它应该完成工作。

答案 2 :(得分:0)

首先使用isset()或empty()检查数组元素。

E.g,

if ((!empty($_GET['p'] && $_GET['p'] == "account.edit.topfriends") || 
    (!empty($_GET['action'] && $_GET['action'] == "newmember")) {
    //some more code here
}

答案 3 :(得分:0)

永远摆脱GET和POST未定义的索引通知!把它放在文档的顶部......

<?php
// Get rid of GET and POST undefined index notice forever! Put this in the top of your document...
class InputData {
     function get($p) {
          return isset($_GET[$p]) ? $_GET[$p] : null;
     }

     function post($p) {
          return isset($_POST[$p]) ? $_POST[$p] : null;
     }

     function get_post($p) {
          return $this->get($p) ? $this->get($p) : $this->post($p);
     }
}
$input = new InputData;

$page = $input->get('p'); // Look in $_GET
$page = $input->post('p'); // Look in $_POST
$page = $input->get_post('p'); // Look in both $_GET and $_POST
?>