![](/img/trans.png)
[英]PHP 'while' loop or 'if' statement in another 'while' loop?
[英]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;
}
因此,在上面的示例中,我有兩個不同的用戶。 它們分別命名為user1
和user2
。
上面的代碼將輸出以下內容(此示例中的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.