PHP - 检查GET变量是否存在而不是空

时间:2014-05-17 07:52:42

标签: php

我想检查GET变量是不是空的,我尝试了但是它们没有用。

所以我有这样的代码:

$u = isset($_GET["u"]);
$p = isset($_GET["p"]);
if ($u !== "" && $p !== "") {
    //something
} else {
    //do something
}

我通过发送create.php?u=&p=来检查代码,但代码不起作用。它一直在运行//do something部分。我试过了:

echo $u;
echo $p;

它返回11。然后我改为:

if ($u !== 1 && $p !== 1 && $u !== "" && $p !== "") {
    //something
} else {
    //do something
}

但它继续运行//do something

请帮忙。

5 个答案:

答案 0 :(得分:6)

您可以使用empty这是一个PHP函数。它会自动检查它是否存在以及是否有任何数据:

if(empty($var))
{
    // This variable is either not set or has nothing in it.
}

在您的情况下,由于您要检查它是否为空,您可以使用:

if (!empty($u) && !empty($p))
{
    // You can continue...
}

修改:此外,comparison !==将检查不等于相同类型的AND。虽然在这种情况下GET / POST数据是字符串,所以使用是正确的(与空字符串相比),使用时要小心。正常的PHP比较不等于!=

附加编辑:实际上,(有趣)它是。如果您使用!=进行比较,那就可以了。当==!=运算符执行松散比较时,false == ""将返回true - 因此,($u != "" && $p != "")的if语句代码将按预期方式运行。

<?php 
$var1=false;
$var2="";
$var3=0;

echo ($var1!=$var2)? "Not Equal" : "Equal";
echo ($var1!==$var2)? "Not Equal" : "Equal";

echo ($var1!=$var3)? "Not Equal" : "Equal";
echo ($var1!==$var3)? "Not Equal" : "Equal";

print_r($var1);
print_r($var2);
?>

// Output: Equal
// Output: Not Equal

// Output: Equal
// Output: Not Equal

最终编辑:将if语句中的条件更改为:

if ($u != "" && $p != "")

它会像你期望的那样工作,它不会是最好的方式(也不是最短的),但它以你想要的方式工作。

真的是最终编辑:

请考虑以下事项:

$u = isset($_GET["u"]); // Assuming GET is set, $u == TRUE
$p = isset($_GET["p"]); // Assuming GET is not set, $p == FALSE

严格比较:

if ($u !== "") 
// (TRUE !== "" - is not met. Strict Comparison used - As expected)

if ($p !== "")
// (FALSE !== "" - is not met. Strict Comparison used - Not as expected)

松散比较:

if ($u != "") 
// (TRUE != "" - is not met. Loose Comparison used - As expected)

if ($p != "")
// (FALSE != "" - is met. Loose Comparison used)

答案 1 :(得分:2)

您需要!empty()

if (!empty($_GET["p"]) && !empty($_GET["u"])) {
    //something
} else {
    //do something
}

Helpful Link

答案 2 :(得分:1)

if ($u !== 1 && $p !== 1 && $u !== "" && $p !== "")
  1. 你为什么要使用&#34;!==&#34;而不是&#34;!=&#34;。
  2. 始终使用运行时$ u和$ p值来简化您的问题,解决纸上的逻辑。
  3. 要检查$_GET值是否为空,您可以使用2种方法。

    1. 由于$_GET是一个数组,如果您只有u和p来检查或检查所有传入的$ _GET参数,则可以使用if(count($_GET))

    2. 空函数@Fluffeh提到。

    3. if($_GET['u']!=""&&$_GET['p']!="")

    4. 希望它有助于thx

答案 3 :(得分:0)

在您的代码中,您应该正确检查变量是否存在,如

if ($u != NULL && $p != NULL && $u != 0 && $p != 0) {
    //something
} else {
    //do something
} 

答案 4 :(得分:0)

哇!我太笨了...... isset返回一个布尔值。我现在解决了我的问题。谢谢你回答:)

此修复:

$u = $_GET["u"];
$p = $_GET["p"];