使用if上的$ _GET开关

时间:2013-06-13 10:20:20

标签: loops get switch-statement case break

所以我基本上试着这样做:?p = blabla& dep = blabla

switch($_GET['p'])
{
case 'home':
    include("template/index.html");
    break;
case null:
    include("template/index.html");
    break;
case 'roster':
    include("template/roster.html");
    break;
case 'about':
    include("template/about.html");
    break;
case 'members':
    include("members/index.php");
    break;
}

if(($_GET['p'] == 'about') && ($_GET['dep'] == 'hospital')) 
{
    include("template/hospital.html");
}

当我做blablabla时它还包括about.html和hospital.html?p = about& dep = hospital

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

将if语句放在switch case中。

case 'about':
    if ($_GET['dep'] == 'hospital')
        include("template/hospital.html");
    else
        include("template/about.html");
    break;

答案 1 :(得分:0)

这正是你所要求的。

首先你有你的switch语句。它看到$ _GET ['p']中有'about',所以它将包含该脚本。

之后你有你的if,这也评估为true,因此它被包括在内。

要改变这一点:

在“约”案例中添加另一个。

case 'about':
    if ($_GET['dep'] == 'hospital') break;
    include("template/about.html");
    break;

答案 2 :(得分:0)

您的交换机在查找dep = hospital的行之前已经进行了处理,因此它甚至会在查找部门之前包含about.html。

如果您只想显示hospital.html,但只有在p = about时才将测试移到案例中。

switch($_GET['p'])
{
case 'home':
  include("template/index.html");
  break;
case null:
  include("template/index.html");
  break;
case 'roster':
  include("template/roster.html");
  break;
case 'about':
  if(($_GET['dep'] == 'hospital')) {
    include("template/hospital.html");
  } else {
    include("template/about.html");
  }
  break;
case 'members':
    include("members/index.php");
    break;

}