0

嗨,有人可以帮我解决我在条件陈述中做错了什么。

if(isset($_GET['input'] or $_GET['input2'] or $_GET['input3']))
{
  $release=$_GET['input'].$_GET['input2'].$_GET['input3'];
  echo $release;
}

编辑:错误是syntax error, unexpected T_LOGICAL_OR, expecting ',' or ')'

4

5 回答 5

4

您需要多次调用isset,为要检查的每个参数调用一次!

请记住,它or与 具有不同的优先级||,您通常需要后者。

您会收到解析错误,因为您将复合表达式传递给isset而不是变量。它不是一个常规函数,而是一个单独的语言结构,这就是为什么它有自己的任意规则,正如文档所指出的那样:

isset() 仅适用于变量,因为传递其他任何内容都会导致解析错误。


也许您认为 PHP 模拟自然语言,因此您将其解读为"Is input or input2 or input3 set?".

那将是一个误解。如果它在语法上是有效的,它首先会在逻辑上将OR值放在一起,然后它会将那个传递给——到isset那时,与变量的所有连接都将丢失,唯一剩下的true就是然后被应用。falseisset

于 2012-12-23T09:35:41.930 回答
4
if(isset($_GET['input']) || isset($_GET['input2']) || isset($_GET['input3']))

但我实际上认为你需要 AND 在这里,而不是 OR,所以改变 || && 如果我是正确的。

于 2012-12-23T09:36:02.283 回答
3

您必须分别调用isset每个参数。isset()接受单个参数并相应地响应..

有关更多详细信息,请查看isset

额外提示: 如果您在数据库查询中使用这些变量,则必须使用mysqli_real_escape_string()以避免可能的 sql 注入

于 2012-12-23T09:41:37.253 回答
3

这个问题的所有当前答案都错过了一个重要特性isset:它可以同时检查多个变量。从手册

如果提供了多个参数,则仅当设置了所有参数时 isset() 才会返回 TRUE。评估从左到右进行,并在遇到未设置的变量时立即停止。

因此,在这种情况下,您可以执行以下操作:

if (isset($_GET['input'], $_GET['input2'], $_GET['input3'])) {

_GET只有设置了所有元素,此条件才会通过。

于 2012-12-23T12:48:04.493 回答
2

这将解决您的错误:

if(isset($_GET['input']) or isset($_GET['input2']) or isset($_GET['input3']))
{
    $release=$_GET['input'].$_GET['input2'].$_GET['input3'];
    echo $release;
}

但是因为您正在测试 OR 而不是 AND,所以您只需要其中一个 OR 测试返回 true 以进入 if 条件 - 如果其他 2 个未设置,您仍然会发出通知 /错误。

要检查所有三个都存在,你会做类似的事情

if (isset($_GET['input']) && isset($_GET['input2']) && isset($_GET['input3'])) { 
    //...
}

这可能会在没有混乱测试的情况下完成您想要实现的目标:

// count will return however many key=>val pairs are in the array, 
// 0 will fail
if (count($_GET)) {
    // an empty array and an empty string to hold iterated results
    $get = array();
    $release = '';
    // iterate through $_GET and append each key=>val pair to the local array, 
    // then concat onto the string
    foreach($_GET as $key=>$val) {
        $get[$key] = $val;
        $release .= $get[$key];
    }
    echo $release;
}

HTH :)


编辑:正如其他人指出的那样,如果您需要测试以确保设置所有这些数组键,请跳过foreach循环并执行以下操作:

 // extract imports all of the array keys into the symbol table. 
 // It returns the number of symbls imported, and automatically
 // sets vars using keys for var name: 
 if (extract($_GET) && isset($input,$input2,$input3)) {
     echo $release = $input.$input2.$input3;
 }

(使用传递给 isset 的多个参数。)

  • HTH :)
于 2012-12-23T12:43:07.723 回答