在PHP中使用$ _GET和字符串

时间:2018-10-08 23:26:00

标签: php

将'false'的值传递给$ _GET参数。但是,PHP似乎无法将其识别为字符串,因为以下操作不起作用:

$SINGLE = $_GET['SINGLE'];

if ($SINGLE == 'false'){
    echo 'HELLO';
}

我猜我必须进行一些转换或转换,但没有成功。

3 个答案:

答案 0 :(得分:0)

第一个问题是,您将返回一个看起来像这样的未定义索引错误。

Notice: Undefined index: SINGLE in E:\XAMPP\htdocs\test\test.php on line 2

要解决此问题,您需要执行以下步骤:

if(isset($_GET['SINGLE'])) {
    $SINGLE = $_GET['SINGLE'];
}

这样做的原因是PHP需要验证$_GET本质上是否存在以及是否已设置...。如果没有校验码块,则每次将返回undefined

第二,正如评论中的人所述,您不会在引号false / true中使用false是BOOLEANS。当将它们用引号引起来时,它使它成为字符串。数字也是一样:

1'1'不同。一旦将其用引号引起来,它就是一个字符串。因此,如果您的$_GET值确实是BOOLEAN,则可以按以下方式进行检查:

if(isset($_GET['SINGLE']) && $_GET['SINGLE'] == false) {
    $SINGLE = $_GET['SINGLE'];
} else {
    // other code here to execute if needed
}

现在,如果$_GET不是布尔值和字符串,则可以像上面一样检查它并添加一个额外的检查,例如:

if(isset($_GET['SINGLE']) && !empty($_GET['SINGLE'])) {
    $SINGLE = $_GET['SINGLE'];
} else {
    // other code here to execute if needed
}

希望这对您实现目标有帮助!

答案 1 :(得分:0)

最好先确定$ _GET ['SINGLE']是否存在:

if(isset($_GET['SINGLE'])) {
   $SINGLE = $_GET['SINGLE'];
    if ($SINGLE == 'false'){ // IF AS STRING
      echo 'HELLO STRING';
    }
    if ($SINGLE == false){ // IF AS BOOLEAN
      echo 'HELLO BOOLEAN';
    }
} else {
   // if not exist 
}

答案 2 :(得分:0)

如果您的php文件仅包含问题中的代码示例,例如:

yourfile.php

<?php

$SINGLE = $_GET['SINGLE'];

if ($SINGLE == 'false'){
    echo 'HELLO';
}

通过使用以下URL访问文件,可以使其回显HELLO:

http://yourhost/pathto/yourfile.php?SINGLE=false

请记住,这是区分大小写的。 url参数 的大小写必须与$_GET中的键的大小写匹配。

您无需进行任何类型转换即可工作。

PHP通过解析HTTP请求的查询字符串来自动填充$_GET超全局变量,并且$_GET中的每个标量值都是一个字符串。它可能具有一些带有复杂查询字符串的数组结构,但是在数组内部,所有内容都是一个字符串。似乎有些混乱,因为您使用了字符串'false',但是除非您用$_GET明确地将其放在PHP代码中,否则$_GET['SINGLE'] = false;中就不会有布尔值。

如果字符串碰巧包含'true''false',PHP不会将字符串自动转换为布尔值,并且如果您尝试显式转换它们,则它们都将取值为true

$example = (bool) 'false';
var_dump($example);   // bool(true)