簡體   English   中英

PHP-if語句在while循環中

[英]php - if statement in a 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具有特殊會員資格= 0
  • User2具有特殊會員資格= 1

上面的代碼將輸出以下內容(此示例中的while循環被循環4次 ):

它將輸出:

user1

user2
true

user1
true

user2
true

問題出在這里,該腳本在第三個循環中在user1上輸出true。 User1不應設置為true,只有user2才應該設置為true,因為他的specialmembership = 1;

怎么了

您應該添加一個else

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

因為一旦設置了$pioneer的值就不會更改(如果您不再這樣做)

$pioneer設置為true后,您再也不會重置,因此第一個“ true”用戶之后的所有用戶也將為true。 您需要其他:

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

嘗試跟隨

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

正如Andrewsi所說,每次進入循環時都應重置$pioneer變量。

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

另一種選擇是引入else分支:

else {
  $pioneer = 'False';
}

此外,你應該使用已棄用MySQL擴展了! 切換到MySQLi(帶有准備好的語句)或PDO!

您無需在每個循環后重置$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;
}

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

}

您永遠不會重置$Pioneer變量

嘗試

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

嘗試添加其他條件,例如

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;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM