PHP循环时的简单问题

时间:2011-01-29 21:21:06

标签: php sql loops while-loop

我有这个

mysqli_select_db($connect,"users");

$response = "Select * from revbut where onuser='$u'";
$rquery  =  mysqli_query($connect,$response);
$norows = mysqli_num_rows($rquery);






while($responseanswer=mysqli_fetch_array($rquery)){


if(json_encode($responseanswer['response']=='approve'))
{
include('response-2.php');  
}

else if(json_encode($responseanswer['response']=='reject'))
{
    include('response-3.php');
}
else
{
echo "Nothing in here. ";   
}
}

在数据库中,有两个字段。所以一个是批准,而另一个是拒绝。但是php包含了两次response-2.php文件。为什么呢?

3 个答案:

答案 0 :(得分:3)

因为您要将$ responseanswer ['response']与'approve'和'reject'进行比较,然后将json_encoding()与true或false进行比较。 json编码将是一个字符串,例如“true”或“false”,并且PHP中的if(“true”)和if(“false”)都是真的。实际上,if()到false的唯一字符串是字符串“0”和“”。它甚至特别提到了(“假”)这里:http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

目前尚不清楚为什么需要json_encoding(),因为你没有提供任何样本数据,但我很确定这是错误。

答案 1 :(得分:1)

因为您正在为结果集中的每条记录运行循环。每次'response'字段等于“approve”时,你的循环基本上都会包含response-2.php。如果表中有5条记录,其中'response'字段为“approve”,则循环将包括response-2.php 5次。

在while循环之前,您可以建立一个迭代变量:

$ i = 1;

在循环结束时,将值迭代一次:

$ I ++;

然后,检查$ i的值。如果它等于大于1的任何值,则不要再次执行包含。例如:

$i = 1;
while($responseanswer=mysqli_fetch_array($rquery)){


if(json_encode($responseanswer['response']=='approve'))
{
($i == 1 ? include('response-2.php') : "");  
}

else if(json_encode($responseanswer['response']=='reject'))
{
($i == 1 ? include('response-3.php') : "");  
}
else
{
echo "Nothing in here. ";   
}
$i++;
}

答案 2 :(得分:0)

我认为你必须在你的数据库中这样做,你应该这样做:

有一个记录密钥列和值的记录,例如

rejectOrAprove 以及如果其aprove为1且拒绝为0的值。