我有一个名为Error.php的页面。通常使用查询字符串将变量传递给它,以便它将相应的消息显示给我指定的错误代码。
示例:Error.php?id = 1
以下是我的页面部分:
<?php
if($_GET["id"] == "0")
{
echo "Display certain information...";
}
elseif($_GET["id"] == "1")
{
echo "Display certain information...";
}
elseif($_GET["id"] == "2")
{
echo "Display certain information...";
}
elseif($_GET["id"] == "3")
{
echo "Display certain information...";
}
else
{
echo "Display certain information...";
}
?>
所有信息都可以正常工作,但唯一的问题是,如果没有查询字符串(将其保留为“Error.php”),则会显示错误“Undefined index:id in .....”。除非有查询字符串,否则有一种方法可以使Error.php无法访问?如果我的代码语法不正确,我很抱歉,我对PHP很新。谢谢。
答案 0 :(得分:3)
使用array_key_exists()检查它是否存在:
<?php
if(array_key_exists("id", $_GET))
{
if($_GET["id"] == "0")
{
echo "Display certain information...";
}
elseif($_GET["id"] == "1")
{
echo "Display certain information...";
}
elseif($_GET["id"] == "2")
{
echo "Display certain information...";
}
elseif($_GET["id"] == "3")
{
echo "Display certain information...";
}
else
{
echo "Display certain information...";
}
}
else
{
// no query id specified, maybe redirect via header() somewhere else?
}
?>
答案 1 :(得分:1)
您应该先使用isset
或array_key_exists
测试变量是否存在,然后使用{{3}}或{{3}}:
if (isset($_GET['id'])) {
// $_GET['id'] exists
// your code here
} else {
// $_GET['id'] does not exist
}
答案 2 :(得分:0)
该消息不是错误,而是通知。您可以在Web应用程序中禁用通知消息,建议在进入生产服务时这样做(在开发过程中可以正常使用)。
您可以将php.ini中的error_reporting
设置为不包括E_NOTICE
答案 3 :(得分:0)
您应该使用isset来检查数组$ _GET中是否设置了键'id'。对于简单的字符串查找,您应该使用数组而不是if-then-else和switch。
$errorMessages = array(
"0" => "Display certain information...";
"1" => "Display certain information...";
"2" => "Display certain information...";
"3" => "Display certain information...";
);
if (!isset($_GET['id']) || !isset($errorMessages[$_GET['id']])) {
$message = 'No predefined error message';
//or redirect
} else {
$message = $errorMessages[$_GET['id']];
}
echo $message;