我在使用简单的if语句在PHP while循环中工作时遇到了问题。这是我的代码:
$p=mysql_query("SELECT * FROM forum_posts WHERE forum_id='$cid' AND topic_id='$id' AND post_deleted='0' ORDER BY post_time ASC LIMIT $offset, $rowsperpage");
while($post=mysql_fetch_assoc($p)){
$userpost=$user->getUserData($post['userid']);
if($userpost['specialmembership'] == 1){
$pioneer = "True";
}
echo $userpost['username'];
echo $pioneer;
}
因此,在上面的示例中,我有两个不同的用户。它们的名称为user1
和user2
。
上面的代码将输出以下内容(此示例中的while循环正在循环 4次):
将输出:
user1
user2
true
user1
true
user2
true
问题在于,脚本在第三个循环中的user1上打印出true。 User1不应该设置为true,只有user2应该这样,因为他有specialmembership = 1;
这里有什么问题?
答案 0 :(得分:5)
您应该添加else
if($userpost['specialmembership'] == 1){
$pioneer = "True";
}else {
$pioneer = "False";
}
因为一旦设置$pioneer
的值不会改变(如果你不再这样做)
答案 1 :(得分:3)
在设置为true后,您永远不会重置$pioneer
,因此在第一个'true'用户之后的所有用户也将为true。你还需要一个:
if($userpost['specialmembership'] == 1){
$pioneer = "True";
} else {
$pioneer = "False"; // <---you need this
}
答案 2 :(得分:3)
尝试以下
$p=mysql_query("SELECT * FROM forum_posts WHERE forum_id='$cid' AND topic_id='$id' AND post_deleted='0' ORDER BY post_time ASC LIMIT $offset, $rowsperpage");
while($post=mysql_fetch_assoc($p)){
$userpost=$user->getUserData($post['userid']);
$pioneer = "False";
if($userpost['specialmembership'] == 1){
$pioneer = "True";
}
echo $userpost['username'];
echo $pioneer;
}
答案 3 :(得分:1)
正如andrewsi所说,每次进入循环时都应该重置$pioneer
变量。
while($post=mysql_fetch_assoc($p)){
// defaults to 'False'
$pioneer = 'False';
}
另一个选择是引入一个else分支:
else {
$pioneer = 'False';
}
此外,您应 NOT 再使用已弃用的MySQL扩展程序!切换到MySQLi(带有准备好的语句)或PDO!
答案 4 :(得分:1)
每次循环后你都没有重置$pioneer
的值。如果它不应该是"true"
,则将其重置为空字符串。
while($post=mysql_fetch_assoc($p)){
$userpost=$user->getUserData($post['userid']);
if($userpost['specialmembership'] == 1){
$pioneer = "true";
}else{
$pioneer = "";
echo $userpost['username'];
echo $pioneer;
}
答案 5 :(得分:1)
写
$p=mysql_query("SELECT * FROM forum_posts WHERE forum_id='$cid' AND topic_id='$id'
AND post_deleted='0' ORDER BY post_time ASC LIMIT $offset, $rowsperpage");
while($post=mysql_fetch_assoc($p)){
$userpost=$user->getUserData($post['userid']);
$pioneer="False";
if($userpost['specialmembership'] == 1){
$pioneer = "True";
}
echo $userpost['username'];
echo $pioneer;
}
答案 6 :(得分:1)
您永远不会重置$Pioneer
变量
尝试
$pioneer = $userpost['specialmembership'] == 1 ? "True" : "False or Whatever you want";
答案 7 :(得分:0)
尝试添加其他条件,如
while($post=mysql_fetch_assoc($p)){
$userpost=$user->getUserData($post['userid']);
$pioneer = ($userpost['specialmembership'] == 1? "True": "False");
echo $userpost['username'];
echo $pioneer;
}
或在开头定义$ pioneer =“False”并使用您的代码
while($post=mysql_fetch_assoc($p)){
$userpost=$user->getUserData($post['userid']);
if($userpost['specialmembership'] == 1){
$pioneer = "True";
}
echo $userpost['username'];
echo $pioneer;
}