我正在尝试向服务器发送一个数字字符串,并拆分每个数字。如果数据库中存在该数字,则指定一个"t"值,如果不存在,则指定"f"值。但出于某种原因,我只得到了t。
<?php
# get phone from uid
include_once 'utils.php';
$phone = $_GET['phone'] or die("isRegistered: missing phone");
$response = "";
$phonearray = explode(":", $phone);
for ($i = 0; $i<sizeof($phonearray); $i++){
$result = findRow("phone", $phonearray[i], "user_device") or "true" ;
if($result == "true")
{
$response = $response."t".":";
$result = "";
}
else
{
$response = $response."f".":";
$result = "";
}
}
die($response);
?>
这里实际上有几个问题。
-
正如其他答案中所提到的,您在代码的两个分支中都错误地使用了
't'
。 -
您使用的似乎是字符串
"true"
,而不是布尔值true
。虽然由于PHP在类型之间转换值的方式,它可能看起来很有效,但您实际上可能打算使用true
,而使用字符串可能会导致以后出现意外行为。 -
我不知道
findRow()
做什么,但通过在它的末尾添加or true
(甚至or "true"
),$result
将始终为true
。 -
您正在使用
i
来引用$phonearray
,而不是$i
。i
将生成一个PHP警告,并将被解释为"i"
-而不是$i
变量的值。
如果您查看代码的这一部分:
$result = findRow("phone", $phonearray[i], "user_device") or "true" ;
if($result == "true")
{
$response = $response."t".":";
$result = "";
}
else
{
$response = $response."t".":";
$result = "";
}
这样重写会得到更好的结果:
$result = findRow("phone", $phonearray[$i], "user_device");
$response .= ($result ? 't' : 'f') . ':';
我猜测findRow()
的作用,因为您没有包含任何关于它的内容,但我假设它只是返回一个真/假值。
您会注意到,我还通过使用三元运算符将整个if/else
语句简化为几行。
if($result == "true")
{
$response = $response."t".":";
$result = "";
}
else
{
$response = $response."t".":";
$result = "";
}
将此部分更改为
if($result == "true")
{
$response = $response."t".":";
$result = "";
}
else
{
$response = $response."f".":";
$result = "";
}
您已经为if和else条件都设置了"t"。
并检查
if(isset($_GET['phone']))
if($result == "true")
{
$response = $response."t".":";
$result = "";
}
else
{
$response = $response."t".":";
$result = "";
}
将此部分更改为
if($result == 'true')
{
$response = $response.'t:';
$result = '';
}
else
{
$response = $response.'f:';
$result = '';
}