嗨,有人可以帮我解决我在条件陈述中做错了什么。
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 ')'
嗨,有人可以帮我解决我在条件陈述中做错了什么。
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 ')'
您需要多次调用isset
,为要检查的每个参数调用一次!
请记住,它or
与 具有不同的优先级||
,您通常需要后者。
您会收到解析错误,因为您将复合表达式传递给isset
而不是变量。它不是一个常规函数,而是一个单独的语言结构,这就是为什么它有自己的任意规则,正如文档所指出的那样:
isset() 仅适用于变量,因为传递其他任何内容都会导致解析错误。
也许您认为 PHP 模拟自然语言,因此您将其解读为"Is input or input2 or input3 set?"
.
那将是一个误解。如果它在语法上是有效的,它首先会在逻辑上将OR
值放在一起,然后它会将那个值传递给——到isset
那时,与变量的所有连接都将丢失,唯一剩下的true
就是然后被应用。false
isset
if(isset($_GET['input']) || isset($_GET['input2']) || isset($_GET['input3']))
但我实际上认为你需要 AND 在这里,而不是 OR,所以改变 || && 如果我是正确的。
您必须分别调用isset
每个参数。isset()
接受单个参数并相应地响应..
有关更多详细信息,请查看isset。
额外提示: 如果您在数据库查询中使用这些变量,则必须使用mysqli_real_escape_string()以避免可能的 sql 注入
这个问题的所有当前答案都错过了一个重要特性isset
:它可以同时检查多个变量。从手册:
如果提供了多个参数,则仅当设置了所有参数时 isset() 才会返回 TRUE。评估从左到右进行,并在遇到未设置的变量时立即停止。
因此,在这种情况下,您可以执行以下操作:
if (isset($_GET['input'], $_GET['input2'], $_GET['input3'])) {
_GET
只有设置了所有元素,此条件才会通过。
这将解决您的错误:
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 的多个参数。)