在有条件的陈述中,你可以帮我解决我做错的事。
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 ')'
答案 0 :(得分:5)
您需要多次调用isset
,每个要检查的参数都有一个!
请注意,or
的优先级与||
不同,您通常需要后者。
您得到一个解析错误,因为您将复合表达式传递给isset
而不是变量。它不是常规函数,而是一个单独的语言结构,这就是为什么它有自己的任意规则,如文档所指出的那样:
isset()仅适用于变量,因为传递任何其他内容都会导致解析错误。
也许您认为PHP模仿自然语言,因此您将其视为"Is input or input2 or input3 set?"
。
那将是一种误解。 如果它在语法上是有效的,它首先会将值OR
合在一起,然后它会将一个值传递给isset
- by那个时候,与变量的所有连接都会丢失,唯一剩下的就是true
或false
,然后会应用isset
。
答案 1 :(得分:4)
if(isset($_GET['input']) || isset($_GET['input2']) || isset($_GET['input3']))
但我实际上认为你需要AND,而不是OR,所以改变||和&&如果我是对的。
答案 2 :(得分:3)
您必须分别为每个参数调用isset
。 isset()
接受单个参数并做出相应的响应..
有关详细信息,请查看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的多个参数。)