如何验证 $_GET 是不是存在?
Posted
技术标签:
【中文标题】如何验证 $_GET 是不是存在?【英文标题】:How to verify if $_GET exists?如何验证 $_GET 是否存在? 【发布时间】:2012-08-14 17:19:56 【问题描述】:所以,我有一些看起来有点像这样的 php 代码:
<body>
The ID is
<?php
echo $_GET["id"] . "!";
?>
</body>
现在,当我传递像 http://localhost/myphp.php?id=26
这样的 ID 时,它可以正常工作,但如果没有像 http://localhost/myphp.php
这样的 ID,那么它会输出:
The ID is
Notice: Undefined index: id in C:\xampp\htdocs\myphp.php on line 9
!
我已寻找解决此问题的方法,但找不到任何方法来检查 URL 变量是否存在。不过我知道一定有办法。
【问题讨论】:
未定义索引不是错误,它只是一个警告。您可以通过编辑.htaccess
文件来关闭警告。
验证$_GET
是否存在(如主题中)实际上是另一个问题,您正在尝试验证$_GET["id"]
是否存在...
【参考方案1】:
你可以使用isset
函数:
if(isset($_GET['id']))
// id index exists
如果索引不存在,您可以创建一个方便的函数来返回默认值:
function Get($index, $defaultValue)
return isset($_GET[$index]) ? $_GET[$index] : $defaultValue;
// prints "invalid id" if $_GET['id'] is not set
echo Get('id', 'invalid id');
您也可以同时尝试验证:
function GetInt($index, $defaultValue)
return isset($_GET[$index]) && ctype_digit($_GET[$index])
? (int)$_GET[$index]
: $defaultValue;
// prints 0 if $_GET['id'] is not set or is not numeric
echo GetInt('id', 0);
【讨论】:
【参考方案2】: if (isset($_GET["id"]))
//do stuff
【讨论】:
【参考方案3】:通常这样做很好:
echo isset($_GET['id']) ? $_GET['id'] : 'wtf';
因此,当将 var 分配给其他变量时,您可以一口气完成所有默认值,而不是不断使用 if
语句来给它们一个默认值(如果它们没有设置)。
【讨论】:
WTF 就是一个例子......另外它是wtf
而不是wft
更好的选择是null
或0
。
@Asaph wtf
是新的null
:P 虽然他也在呼应,正如 OP 所说,他们用 No ID!
替换了 wtf
,这就是它的设计目的, ehcoing null
不是很有用,在这种情况下 wtf
比 null
imo 更有用
@Asaph 0 也可能是一个有效的 ID,所以这也不是一个很好的响应,因为它也没有被设置。
wtf
是一个可怕的值。【参考方案4】:
你可以使用array_key_exists()
内置函数:
if (array_key_exists('id', $_GET))
echo $_GET['id'];
或isset()
内置函数:
if (isset($_GET['id']))
echo $_GET['id'];
【讨论】:
使用其中一个有什么好处吗? array_key_exists 似乎更正确,但我几乎总是使用 isset。【参考方案5】:你正在使用 PHP isset
例子
if (isset($_GET["id"]))
echo $_GET["id"];
【讨论】:
是的 .. 但请参阅文档以获取更多示例【参考方案6】:使用和empty()
whit 否定(如果不为空则用于测试)
if(!empty($_GET['id']))
// if get id is not empty
【讨论】:
如果id为0怎么办?记住空的返回 false 很多东西。【参考方案7】:请试一试:
if(isset($_GET['id']) && !empty($_GET['id']))
echo $_GET["id"];
【讨论】:
empty($_GET['id'])
被翻译成!isset($var) || $var == false.
,所以isset($_GET['id'])
不是必需的。以上是关于如何验证 $_GET 是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章