php - if while循环中的语句

时间:2013-10-23 14:59:02

标签: php if-statement while-loop

我在使用简单的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;

}

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

  • User1有specialmembership = 0
  • User2有specialmembership = 1

上面的代码将输出以下内容(此示例中的while循环正在循环 4次):

将输出:

user1

user2
true

user1
true

user2
true

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

这里有什么问题?

8 个答案:

答案 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;

}