2013-07-09 97 views
0

我试图向服务器发送一串数字并拆分每个数字。如果数据库中存在数字,则分配“t”值,如果不存在,则分配“f”值。 但由于某种原因,我只得到t的。如何检查服务器上是否存在数据PHP

<?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); 

?> 
+6

您的if和else条件都将$ response设置为t。 –

+0

对不起,这是一个错字。 – nishantvodoo

回答

3

实际上这里有几个问题。

  1. 正如在其他的答案中提到,你错误地使用你的代码的两个分支't'

  2. 您似乎正在使用字符串"true"而不是布尔值true。虽然它可能因为PHP在类型之间转换值的方式而起作用,但实际上您可能打算使用true,而使用该字符串可能会导致以后出现意外的行为。

  3. 我不知道是什么findRow()的做法,但通过添加or true(甚至or "true"),以它的结束,$result总是true

  4. 您正在使用i来引用$phonearray而不是$ii将生成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()做什么,因为你没有包括任何有关它 - 但我假设它只是返回一个真/假值。

您会注意到我还使用ternary operator将整个if/else语句简化为几行。

+0

问题是findrow()会去检查数据库中是否存在电话号码。如果它返回,则返回该表数据的数组。现在我只是想区分数据库中是否存在这个数字。如果它确实那么我想给它分配一个“t”值,如果它不分配一个“f”值....但由于某种原因,它会给出所有的真实或全部假 – nishantvodoo

+0

问题是如此愚蠢。 $ phonearray [我]应该是$ phonearray [$我] ...感谢您的帮助。我当然学到了一些东西。 – nishantvodoo

+1

@nishan_vodoo哎呀 - 我错过了那一个。我已经更新了我的答案以包含该修复(以备将来参考)。 – jcsanyi

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 = ""; 
} 
+1

这并没有解决'$ result'将始终为'true'的事实。 – jcsanyi

0

你设置了 “T” 因为如果和其他条件都。

,并做检查

if(isset($_GET['phone'])) 
+2

这并没有解决'$ result'将始终为'true'的事实。 – jcsanyi

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 = ''; 
} 
+1

http:// stackoverflow。com/a/17540362/398242 –

+0

@WesleyMurch检查区别。 – Lenin

+0

aha做得很好队友 –

相关问题