修复PHP中的“未定义索引”错误

时间:2012-04-28 08:21:49

标签: php

if ((!$_GET['month']) && (!$_GET['year'])) {
  $month = date ("n");
  $year = date ("Y");
} else {
  $month = $_GET['month'];
  $year = $_GET['year'];
}

显示Notice: Undefined index: month in....

我知道如果我在代码上方使用error_reporting(null);,通知就不会出现,但有没有办法解决此错误?

5 个答案:

答案 0 :(得分:2)

如果数组元素不存在,则会收到通知,因为您正在尝试访问不存在的元素。您需要使用isset()empty()来检查它(这些不是函数,而是语言结构,因此不会被视为访问这些元素)。由于你可能永远不会有空/零年/月,empty更有意义;但您也可以使用!isset(),然后使用0,也可以使用空字符串。

if(empty($_GET['month']) || empty($_GET['year'])) {
    $month = date('n');
    $year = date('Y');
}
else {
    $month = (int)$_GET['month'];
    $year = (int)$_GET['year'];
}

但是,分别检查这两个变量可能更有意义:

$month = empty($_GET['month']) ? date('n') : $_GET['month'];
$year = empty($_GET['year']) ? date('Y') : $_GET['year'];

答案 1 :(得分:1)

你现在拥有它的方式是同时检查两个,如果一个失败都改变了两个,也许最好预设月份和时间。如果params通过,则更改日期然后更改。另外,检查数字是个好主意。否则,字符串可能会进一步破坏您的代码

<?php 
$month = date ("n");
$year = date ("Y");
if (isset($_GET['month']) && is_numeric($_GET['month'])) {
    $month = $_GET['month'];
}
if (isset($_GET['year']) && is_numeric($_GET['year'])) {
    $year = $_GET['year'];
}

//Or better yet
$month = (isset($_GET['month']) && is_numeric($_GET['month']))?$_GET['month']:date("n");
$year = (isset($_GET['year']) && is_numeric($_GET['year']))?$_GET['year']:date("Y");
?>

答案 2 :(得分:0)

您必须使用empty()isset()来检查是否已定义变量。

if ( empty($_GET['month']) || empty($_GET['year']) ) {
   $month = date ("n");
   $year = date ("Y");
} else {
   $month = $_GET['month'];
   $year = $_GET['year'];
}

答案 3 :(得分:0)

 $month = date('n');
 $year = date('Y');
 if (isset($_GET['month'])) {
   $month=$_GET['month'];
 }
 if (isset($_GET['year'])) {
   $year=$_GET['year'];
 }

答案 4 :(得分:0)

是的,您可以在if块中使用if(isset($_GET['month']) && isset($_GET['year']))