显示使用查询字符串但没有任何变量的页面

时间:2009-09-03 08:27:56

标签: php string

我有一个名为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很新。谢谢。

4 个答案:

答案 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)

您应该先使用issetarray_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;