带有Switch语句的$ _GET

hom*_*rrr 5 php

我有很多获取值来定义用户将要看到的页面,例如"profile"我将显示配置文件页面等等.

找出要显示的页面我尝试做类似的事情:

switch ($_GET) {
    case 'profile':
        require_once('function/profile.php');
        break;
    case 'team':
        require_once('function/team.php');
        break;
Run Code Online (Sandbox Code Playgroud)

但它没有显示结果..

我发送GET请求:index.php?profile,例如..

这里有什么问题,我怎么能设法做类似的工作呢.先感谢您!

ste*_*ewe 9

为了使您的示例有效,您可以替换$_GETkey($_GET)

请注意,虽然这key()将返回数组的第一个键,因此如果您更改URL的变量顺序,此行将停止运行.

  • 然后你添加另一个输入变量,整个事情崩溃了...接受这个作为答案是不明智的. (3认同)

Jon*_*uhn 8

$ _GET是查询字符串中找到的键值对中的数组(脚本名称和问号后面的URL的一部分).

例如,查询字符串test=1&foo=bar将转换为:

Array(
    test => 1
    foo => 'bar'
)
Run Code Online (Sandbox Code Playgroud)

在OP示例中index.php?profile,您将得到一个$ _GET数组,如:

Array(
    profile => null
)
Run Code Online (Sandbox Code Playgroud)

做这样的网址的问题在于它是非标准的.当您以非标准方式执行操作时,您必须提出非标准解决方案来解决问题.

以下是一些选项以及每个选项的问题:

  1. 你可以用$_SERVER['QUERY_STRING']它来获取你?在网址后面的所有内容.如果在url中传递的唯一内容只是profile(或其他一些单值),这很好.在那种情况下,$_SERVER['QUERY_STRING']除了profile它之外什么都没有.但是你也失去了在get字符串中传递其他参数的能力.

  2. 您可以使用@stewe描述的方法.php 函数将从传入的数组中的当前位置返回键.如果尚未进行任何循环,则当前位置是第一个元素.这也适用于多个get参数.您的查询字符串将如下所示index.php?profile&test=1&foo=bar.问题是profile(或任何页面)必须是第一个,否则键将返回传递的第一个参数的键.

  3. 另一种选择是使用标准方法来使用键和值.无论页面如何,您都使用相同的密钥,只更改值.然后,您的网址看起来像index.php?page=profile,您可以随时访问该页面$_GET['page'].

  4. 你可以使用mod_rewrite.设置简单,大多数主机支持它(或其他类似的东西),并且有数百万个关于如何使其工作的教程和示例.您最终得到最干净的URL,它适用于查询字符串参数.例如,/profile/可以重写为指向/index.php?page=profile.用户看到/profile/和PHP看到标准.这允许您使用$_GET['page']获取所请求的页面而不必进行额外的解析以获取php中的其他值.


Eva*_*ski 5

$_GET是基于URL的查询字符串填充的数组或变量.你需要做一些事情:

switch ($_GET['myVar']) { ... }
Run Code Online (Sandbox Code Playgroud)

您的网址如下所示:

http://www.domain.com/index.php?myVar=value
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅$ _GETPHP手册.