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);
,通知就不会出现,但有没有办法解决此错误?
答案 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']))