-2
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);上面的代码,通知不会出现,但是有没有办法修复这个错误?

4

5 回答 5

2

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

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'];
于 2012-04-28T08:24:53.300 回答
1

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

<?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");
?>
于 2012-04-28T08:27:36.687 回答
0

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

if ( empty($_GET['month']) || empty($_GET['year']) ) {
   $month = date ("n");
   $year = date ("Y");
} else {
   $month = $_GET['month'];
   $year = $_GET['year'];
}
于 2012-04-28T08:23:48.230 回答
0
 $month = date('n');
 $year = date('Y');
 if (isset($_GET['month'])) {
   $month=$_GET['month'];
 }
 if (isset($_GET['year'])) {
   $year=$_GET['year'];
 }
于 2012-04-28T08:25:48.243 回答
0

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

于 2012-04-28T08:26:38.007 回答