简体   繁体   English

PHP-if语句在while循环中

[英]php - if statement in a while loop

I'm having problems getting my simple if-statement to work inside a PHP while loop. 我在让我的简单if语句在PHP while循环内工作时遇到问题。 This is my code: 这是我的代码:

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

}

So, in the above example I have two different users. 因此,在上面的示例中,我有两个不同的用户。 They are named user1 and user2 . 它们分别命名为user1user2

  • User1 has specialmembership = 0 User1具有特殊会员资格= 0
  • User2 has specialmembership = 1 User2具有特殊会员资格= 1

The above code will output the following (the while loop in this example is getting looped 4 times ): 上面的代码将输出以下内容(此示例中的while循环被循环4次 ):

It will output: 它将输出:

user1

user2
true

user1
true

user2
true

The problem is here, that the script is printing out true on user1 in the third loop. 问题出在这里,该脚本在第三个循环中在user1上输出true。 User1 shouldn't be set to true, only user2 should that, since he has specialmembership = 1; User1不应设置为true,只有user2才应该设置为true,因为他的specialmembership = 1;

What is wrong here? 怎么了

You should add an else 您应该添加一个else

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

Because once the value of $pioneer is set does not change (if you don't do it again) 因为一旦设置了$pioneer的值就不会更改(如果您不再这样做)

You never reset $pioneer after it's set to true, so ALL users after the first 'true' user will also be true. $pioneer设置为true后,您再也不会重置,因此第一个“ true”用户之后的所有用户也将为true。 You need an else: 您需要其他:

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

Try following 尝试跟随

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

As andrewsi said, you should reset you $pioneer variable each time you enter the loop. 正如Andrewsi所说,每次进入循环时都应重置$pioneer变量。

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

Another Option would be to introduce an else branch: 另一种选择是引入else分支:

else {
  $pioneer = 'False';
}

Also, you should NOT use the deprecated MySQL extension anymore! 此外,你应该使用已弃用MySQL扩展了! Switch to MySQLi (with prepared Statements) or PDO! 切换到MySQLi(带有准备好的语句)或PDO!

You're not resetting the value of $pioneer after each loop. 您无需在每个循环后重置$pioneer的值。 Reset it to an empty string if it's not supposed to be "true" . 如果不应该将其重置为空字符串,则为"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;
}

write

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

}

You never reset your $Pioneer Variable 您永远不会重置$Pioneer变量

try 尝试

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

Try adding else condition like 尝试添加其他条件,例如

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

or define $pioneer = "False" in the beginning and use your code 或在开头定义$ pioneer =“ False”并使用您的代码

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

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

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM