2013-10-23 70 views
1

我有问题让我简单的if语句在PHP while循环中工作。这是我的代码:php - if语句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; 

} 

因此,在上面的例子中,我有两个不同的用户。它们被命名为user1user2

  • 用户1具有specialmembership = 0
  • 用户2具有specialmembership = 1

上面的代码将输出以下的(在该示例中,同时循环得到循环4次):

它会输出:

user1 

user2 
true 

user1 
true 

user2 
true 

问题在这里,脚本在第三个循环中在user1上输出true。 User1不应设置为true,只有user2应该这样,因为他有specialmembership = 1;

这里有什么问题?

+2

的'$ pioneer'值重置为false作为while循环内的第一行。 – andrewsi

回答

5

您应该添加一个else

if($userpost['specialmembership'] == 1){ 
     $pioneer = "True"; 
}else { 
    $pioneer = "False"; 
} 

因为一旦$pioneer值设置不会改变(如果你没有做一遍)

3

后,将它设置为true,你永远不会重置$pioneer ,所以所有用户在第一个“真实”用户之后也是如此。你需要的东西:

 if($userpost['specialmembership'] == 1){ 
     $pioneer = "True"; 
     } else { 
     $pioneer = "False"; // <---you need this 
     } 
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; 
} 
1

正如andrewsi说,你应该$pioneer变量重置每次你,你进入循环。

while($post=mysql_fetch_assoc($p)){ 
    // defaults to 'False' 
    $pioneer = 'False'; 
} 

另一种办法是引入一个else分支:

else { 
    $pioneer = 'False'; 
} 

此外,你应该使用已弃用MySQL扩展了!切换到MySQLi(带有准备好的语句)或PDO!

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; 
} 
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; 

} 
1

你永远不会重置$Pioneer可变

尝试

$pioneer = $userpost['specialmembership'] == 1 ? "True" : "False or Whatever you want"; 
0

尝试增加其他条件一样

while($post=mysql_fetch_assoc($p)){ 
    $userpost=$user->getUserData($post['userid']); 
      $pioneer = ($userpost['specialmembership'] == 1? "True": "False"); 
echo $userpost['username']; 
echo $pioneer; 
} 

或定义$先驱开始=“假”,并使用你的代码

while($post=mysql_fetch_assoc($p)){ 
$userpost=$user->getUserData($post['userid']); 

     if($userpost['specialmembership'] == 1){ 
     $pioneer = "True"; 
     } 
echo $userpost['username']; 
echo $pioneer; 

}