$ _GET和isset()

时间:2010-08-31 19:15:29

标签: php superglobals

我在if语句的其余部分之前尝试了if isset($_GET['whatever'])...。 E_NOTICE错误是方便关闭和$_POST变量的方法我在我的初始化脚本中有解决方案 ..

$POST = (is_array( $_POST ) && count( $_POST ) > 0);

我发现这有助于自我发布脚本看起来很干净。

if ($POST) {
    // now do something with $_POST...
}

如果您不知道密钥是什么,我不确定如何动态执行此操作?任何人都可以帮助找到$_GET变量的类似解决方案吗?

修改

如果未设置if ($_GET['whatever'] == "whatever");错误,我只希望E_NOTICE返回false。

修改

很抱歉,如果我不清楚我正在寻找$_GET而不是$_POST的解决方案 - 我只使用$_POST作为我希望实现的目标。< / p>

8 个答案:

答案 0 :(得分:10)

有时我使用全局GET函数:

function GET($key, $default = null) {
    return isset($_GET[$key]) ? $_GET[$key] : $default;
}

答案 1 :(得分:2)

所有混乱的主要想法很简单:程序中的每个变量都应在使用前初始化。
因此,您可以做的最好的事情是将所有变量集中设置,例如,在脚本的最顶层。

但是有一些不同的情况。对于您发布的案例,您不需要这些,但

if ($_SERVER['REQUEST_METHOD'] == "POST")

答案 2 :(得分:2)

已经回答了,但由于没有提及,也请尝试:

$var = filter_input(INPUT_GET, 'varname');

如果它不存在,那将返回null,没有恼人的数组通知,并且还以各种方式过滤掉潜在的坏东西。另见:http://www.php.net/filter

答案 3 :(得分:1)

你可以为你做一个功能。

function getVar($item){
    return isset($_GET[$item]) ? $_GET[$item] : '';
}

然后你可以if(getVar('whatever') == "whatever")

答案 4 :(得分:1)

以下是两种方法。

/*
* Makes any request keys into variables of the same name
*/
foreach($_GET AS $key => $value) {
    ${$key} = ($value);
}    

//Assuming a input key of $_GET['whatever'] 
echo $whatever;

/*
* Casting to an object
*/
$get = (object) $_GET;

//Assuming a input key of $_GET['whatever'] 
echo $get->whatever

我能想到的第三个选择是将$ _GET变成自己的类。 PHP重载是这样做的便捷技巧。

http://php.net/manual/en/language.oop5.overloading.php

我不想写一个证明这一点的例子。 :)

答案 5 :(得分:0)

简单我认为你想检查是否设置了get值然后需要做下一步,否则做不同的

我喜欢第一个答案,但需要检查它是否适合你

如果(isset($ _ GET [ '无论']){     if($ _GET ['whatever'] ==“whatever”); {     //做其余的事   }   其他{     //做其余的事   }   }

希望如果我认为你的需要可能会有所帮助

答案 6 :(得分:0)

  • 没有通知

    $key = &$_POST['key'];

这种方式(内部函数)被删除,并显示错误:

function f($s){}
f(&$_POST['key']);
  

致命错误:已删除调用时间传递引用

答案 7 :(得分:-1)

在编写这些类型的脚本时,我通常会在顶部执行类似的操作:

$submitted = isset($_POST['submit']) ? true : false;
$username = isset($_POST['username']) ? $_POST['username'] : null;
$password = isset($_POST['password']) ? $_POST['password'] : null;
(etc.)

然后,在测试值时,它看起来像这样:

if ($submitted)
{
    if ($username && $password)
    {
        // do stuff with username and password including testing their values
    }
}

对我来说似乎很有效。