0

我正在尝试将一串数字发送到服务器并拆分每个数字。如果数据库中存在数字,则分配“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);

?>
4

4 回答 4

3

这里实际上有几个问题。

  1. 如其他答案中所述,您错误地't'在代码的两个分支中使用。

  2. 您似乎使用的是 string"true"而不是 boolean true。虽然由于 PHP 在类型之间转换值的方式,它可能看起来有效,但您实际上可能打算使用true,而使用字符串可能会导致以后出现意外行为。

  3. 我不知道是什么findRow(),但通过添加or true(甚至or "true")到它的末尾,$result永远true.

  4. 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将整个语句简化为几行。

于 2013-07-09T05:19:35.327 回答
1
if($result == "true")
{
$response = $response."t".":";
$result = "";
}
else 
{
$response = $response."t".":";
$result = "";
}

将此部分更改为

if($result == "true")
{
$response = $response."t".":";
$result = "";
}
else 
{
$response = $response."f".":";
$result = "";
}
于 2013-07-09T05:07:54.900 回答
0

您已经为 if 和 else 条件设置了“t”。

并检查

if(isset($_GET['phone']))
于 2013-07-09T05:10:30.073 回答
0
if($result == "true")
{
$response = $response."t".":";
$result = "";
}
else 
{
$response = $response."t".":";
$result = "";
}

将此部分更改为

if($result == 'true')
{
$response = $response.'t:';
$result = '';
}
else 
{
$response = $response.'f:';
$result = '';
}
于 2013-07-09T05:11:25.073 回答