4

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"脚本开头的值,代码块将永远不会运行,因为每次重新加载时该值都会被重置。

4

7 回答 7

4

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

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

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

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

    }

}

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

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

于 2012-05-15T15:51:47.547 回答
3

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

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

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

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

}
于 2012-05-15T16:01:37.290 回答
1

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

if(empty($_GET['id']))
{
    $_GET['id'] = 0;
}
于 2012-05-15T15:52:09.373 回答
1

尝试:

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

于 2012-05-15T15:53:04.003 回答
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;
    }
}
于 2012-05-15T15:54:06.560 回答
0
$id = (isset($_GET['id'])) ? $_GET['id'] : null;

if ($id == "1") {}
} elseif ($id == "2") {}
于 2012-05-15T15:52:12.227 回答
0

代替

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

if (isset($_GET['id']) && $_GET['id']==1){} 
于 2012-05-15T16:25:30.617 回答