我有以下代码:
switch ((int)$_GET["loanprovider"]) {
case ((int)$_GET["loanprovider"] > 1):
$sql_loanprovider1a = " l.id in (select la.loanid from loan_approvals la where la.bankid = ".$_GET["loanprovider"].") and";
$sql_loanprovider1b = " l.loanid in (select la.loanid from loan_approvals la where la.bankid = ".$_GET["loanprovider"].") and";
break;
default:
break;
}
如果我在URL中没有设置LOAN PROVIDER的情况下运行页面,SWITCH仍会进入第一种情况,而不是DEFAULT。怎么来的?
/鲍勃
答案 0 :(得分:2)
解释很简单:
var_dump( (int)$_GET["loanprovider"] );
var_dump( (int)$_GET["loanprovider"] > 1 );
输出结果为:
int(0)
bool(false)
它们都是相同的(整数0(零)被视为FALSE
),如果查询参数loanprovider
为空,则案例1将始终执行。
有关详细信息,请参阅PHP Manual。
并且,要实际解决问题,请使用isset()
。如果以后需要重新使用变量和存储值,这也是一个好主意。
在我看来,以下内容看起来更整洁,并且有效(测试):
if(isset($_GET['loanprovider']))
{
$value = (int)$_GET["loanprovider"];
switch ($value) {
case ($value > 1):
$sql_loanprovider1a = " l.id in (select la.loanid from loan_approvals la where la.bankid = ".$_GET["loanprovider"].") and";
$sql_loanprovider1b = " l.loanid in (select la.loanid from loan_approvals la where la.bankid = ".$_GET["loanprovider"].") and";
break;
default:
break;
}
}
要调试此问题,您始终可以使用var_dump
。
答案 1 :(得分:0)
我不是PHP专家,但我认为你在switch语句中多次使用loanprovider是一个线索。我认为如果你没有设置loanprovider,你将有一个空值的值,这将在切换的参数中,然后在这种情况下使用类似的值。假设(int)$_GET["loanprovider"]
为0.那么表达式(int)$_GET["loanprovider"] > 1
也将返回0,因为0不大于1.你最终得到的是:
switch (0) {
case 0:
// your code
break;
default:
break;
}
因为0 == 0,你最终会遇到第一种情况。
答案 2 :(得分:0)
未经测试但请求尝试(尽管编码为> 1)
但负值会是错误的。
switch (intval($_GET["loanprovider"])) {
case 0:
break;
case 1:
break;
default:
$sql_loanprovider1a = " l.id in (select la.loanid from loan_approvals la where la.bankid = ".$_GET["loanprovider"].") and";
$sql_loanprovider1b = " l.loanid in (select la.loanid from loan_approvals la where la.bankid = ".$_GET["loanprovider"].") and";
break;
答案 3 :(得分:0)
我首先检查是否设置了$ _GET [“loanprovider”],因为如果你没有在url中设置loanprovider它将是未定义的并且undefined不必是“0”它可以是其他东西。在这种情况下,它可能是一些值使你的语句((int)$ _ GET [“loanprovider”]> 1):true。
正确的代码是:
if (isset((int)$_GET["loanprovider"]))
{
switch ((int)$_GET["loanprovider"]) {
case ((int)$_GET["loanprovider"] > 1):
$sql_loanprovider1a = " l.id in (select la.loanid from loan_approvals la where la.bankid = ".$_GET["loanprovider"].") and";
$sql_loanprovider1b = " l.loanid in (select la.loanid from loan_approvals la where la.bankid = ".$_GET["loanprovider"].") and";
break;
default:
break;
}
}