【问题标题】:php - if statement in a while loopphp - while 循环中的 if 语句
【发布时间】:2013-11-01 22:38:04
【问题描述】:

我在让我的简单 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 的特殊成员身份 = 0
  • User2 具有特殊成员资格 = 1

以上代码将输出以下内容(本例中的while循环循环4次):

它会输出:

user1

user2
true

user1
true

user2
true

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

这里有什么问题?

【问题讨论】:

  • $pioneer 的值重置为 false 作为 while 循环中的第一行。

标签: php if-statement while-loop


【解决方案1】:

你应该添加一个else

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

因为$pioneer 的值一旦设置就不会改变(如果你不再这样做的话)

【讨论】:

    【解决方案2】:

    $pioneer 设置为 true 后,您永远不会重置它,因此第一个“true”用户之后的所有用户也将为 true。你需要一个 else:

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

      【讨论】:

        【解决方案4】:

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

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

        另一个选项是引入一个 else 分支:

        else {
          $pioneer = 'False';
        }
        

        另外,您应该不要再使用已弃用的 MySQL 扩展!切换到 MySQLi(使用准备好的语句)或 PDO!

        【讨论】:

          【解决方案5】:

          您不会在每次循环后重置 $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;
          }
          

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

              您永远不会重置您的 $Pioneer 变量

              试试

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

              【讨论】:

                【解决方案8】:

                尝试添加其他条件,如

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

                【讨论】:

                  猜你喜欢
                  • 2015-05-19
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-11-28
                  • 1970-01-01
                  • 2014-08-20
                  • 1970-01-01
                  • 2013-06-09
                  相关资源
                  最近更新 更多