我在哪里定义索引?

时间:2012-05-15 15:49:58

标签: php

index.php包含此样式的链接:

<a href="index.php?id=1">1</a>
<a href="index.php?id=2">2</a>

然后是这种风格的PHP段落:

if ($_GET["id"] == "1") {}
elseif ($_GET["id"] == "2") {}

因此,当单击链接时,将重新加载页面,并运行其中一个if / elseif块。

但是,当我第一次收到index.php时出现此错误:未定义索引:id

我想这意味着$_GET["id"]需要有一个默认值。但是我在哪里将此默认值放在我的代码中?例如,如果我在脚本开头给出值"0",则代码块将永远不会运行,因为每次重新加载时值都会被重置。

7 个答案:

答案 0 :(得分:4)

您可以先检查是否已设置:

if (isset($_GET["id"])) {

    if ($_GET["id"] == "1") {

    } elseif ($_GET["id"] == "2") {

    }

}

isset是一种语言结构,如果未设置变量,则不会发出任何错误。

empty也不会发出错误,但也会检查“非空”值。

答案 1 :(得分:3)

首先,忽略建议您设置默认值的答案。这不是必需的,也是一种残酷的设计。在检查之前检查该值是否存在。

我建议不要使用else / elseif链。随着链接的增加,代码的丑陋性也会增加。使用开关:

if(isset($_GET['id'])){

  switch($_GET['id']){
    case 1:
      // code
      break;
    case 2:
      // code
      break;
  }

}

答案 2 :(得分:1)

一种解决方案是检查$ _GET ['id']是否为空,如果是,则设置为0。

if(empty($_GET['id']))
{
    $_GET['id'] = 0;
}

答案 3 :(得分:1)

尝试:

if (!isset($_GET["id"])) { $_GET["id"] = "0" }

答案 4 :(得分:1)

首次加载页面时,它将没有任何查询参数。

您应该将条件包含在另一个检查id

存在的条件中
if (isset($_GET['id'])) {
    // you can use switch or keep the ifelseif chain
    switch ($_GET['id']) {
        case 1:
            // do stuff with 1
            break;

        case 2:
            // do stuff with 2
            break;
    }
}

答案 5 :(得分:0)

$id = (isset($_GET['id'])) ? $_GET['id'] : null;

if ($id == "1") {}
} elseif ($id == "2") {}

答案 6 :(得分:0)

替换

if ($_GET["id"] == "1") {}

if (isset($_GET['id']) && $_GET['id']==1){}