PHP条件语句

时间:2012-12-23 09:32:59

标签: php

在有条件的陈述中,你可以帮我解决我做错的事。

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 ')'

5 个答案:

答案 0 :(得分:5)

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

请注意,or的优先级与||不同,您通常需要后者。

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

  

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


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

那将是一种误解。 如果它在语法上是有效的,它首先会将值OR合在一起,然后它会将一个值传递给isset - by那个时候,与变量的所有连接都会丢失,唯一剩下的就是truefalse,然后会应用isset

答案 1 :(得分:4)

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

但我实际上认为你需要AND,而不是OR,所以改变||和&&如果我是对的。

答案 2 :(得分:3)

您必须分别为每个参数调用issetisset()接受单个参数并做出相应的响应..

有关详细信息,请查看isset

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

答案 3 :(得分:3)

此问题的所有当前答案都错过了isset的一个重要特征:它可以同时检查多个变量。来自the manual

  

如果提供了多个参数,则只有在设置了所有参数后,isset()才会返回TRUE。评估从左到右进行,一旦遇到未设置的变量就停止。

所以在这种情况下你可以这样做:

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

只有在设置了所有_GET元素后,才会传递此条件。

答案 4 :(得分: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:)