【问题标题】:Check if only one GET Parameter is Defined?检查是否只定义了一个 GET 参数?
【发布时间】:2014-09-23 20:38:30
【问题描述】:

我有一些代码,基本上包含一个特定于页面的标题,只有在我的 URL 中定义了一个 GET 参数时才应该加载。

例如,如果我希望标题只显示 URL 中是否设置了“thisonly”参数,如果 URL 是:

http://www.example.com?thisonly=w&thisone=q&thistwo=q&thisthree=q

之前我一直用这段代码来检查:

    if((isset($_GET[thisonly])) && (!isset($_GET[thisone])) && (!isset($_GET[thistwo])) && (!isset($_GET[thisthree]))) {
    // Run this code
    }

在上述情况下,代码不会运行,因为设置了其他参数。

但是,更新会很麻烦,特别是如果我最终添加了更多参数,并且必须返回并添加到此代码中以确保它们也没有设置。

有没有办法把它缩短到相当于

    if((isset($_GET[thisonly])) && (!isset($_GET[nothingelse]))) {
    // Run this code
    }

例如,如果“thisonly”是唯一的参数集,并且没有设置其他参数,那么运行代码?

任何帮助表示赞赏 - 谢谢!

【问题讨论】:

  • [thisonly] 被视为constant。用引号将它们括起来['thisonly'] 等。
  • 我明白了,我拥有它的方式怎么会导致不需要的结果?我确实阅读了您的链接,但是我不知道为什么要把它放在引号中而不是......它周围的引号是否意味着 example.com?TeSt=true 将注册与 example.com?test=true 相同
  • 尝试不带引号并结合下面约翰的回答。如果成功了,那就太好了。如果它抛出一个错误,那么你就会知道为什么。

标签: php if-statement parameters get isset


【解决方案1】:
if(count($_GET) === 1 && isset($_GET['thisonly'])) {

这会检查$_GET 是否是一个只有一个元素的数组并且它是$_GET['thisonly']

【讨论】:

  • 一个快速跟进——我有一个“securevalue”函数(包括pregreplace、mysql_real_escape_string 和trim),我也一直单独应用于每个$_GET 变量。这个逻辑是否可以保护所有 $_GET 值,而不是一个一个地保护它们?:if(isset($_GET)){securevalue($_GET);}
  • 您可以使用 PHP 函数将函数应用于数组。看看array_map()的初学者。
  • 我明白了;我的方法也行吗?看起来使用映射函数最终会使用比我之前引用的一行更多的代码,“if(isset($_GET)){securevalue($_GET);}”
  • securevalue 需要被定义并且需要多于一行,所以它不会像你想要的那样工作
猜你喜欢
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2011-06-03
  • 2010-09-22
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
相关资源
最近更新 更多