我有这个
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文件。为什么呢?
答案 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的值。