1

単純な 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;

}

したがって、上記の例では、2 人の異なるユーザーがいます。それらの名前はuser1およびuser2です。

  • User1 は specialmembership = 0 を持っています
  • User2 は specialmembership = 1 を持っています

上記のコードは次のように出力します (この例の while ループは4 回ループされています)。

次のように出力されます。

user1

user2
true

user1
true

user2
true

問題は、スクリプトが 3 番目のループで user1 に true を出力していることです。User1 は true に設定すべきではありません。user2 のみが true に設定されるべきです。specialmembership = 1;

ここで何が問題なのですか?

4

8 に答える 8

5

追加する必要がありますelse

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

の値が一度$pioneer設定されると変更されないため(再度実行しない場合)

于 2013-10-23T15:00:46.380 に答える
3

true に設定した後はリセットしない$pioneerため、最初の「true」ユーザー以降のすべてのユーザーも true になります。あなたは他に必要です:

      if($userpost['specialmembership'] == 1){
        $pioneer = "True";
      } else {
        $pioneer = "False";  // <---you need this
      }
于 2013-10-23T15:00:52.057 に答える
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;
}
于 2013-10-23T15:00:52.943 に答える
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;
}
于 2013-10-23T15:01:41.627 に答える
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;

}
于 2013-10-23T15:01:58.247 に答える
1

$Pioneer変数をリセットすることはありません

試す

$pioneer = $userpost['specialmembership'] == 1 ? "True" : "False or Whatever you want";
于 2013-10-23T15:02:10.573 に答える
1

$pioneerアンドリューシが言ったように、ループに入るたびに変数をリセットする必要があります。

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

別のオプションは、else ブランチを導入することです。

else {
  $pioneer = 'False';
}

また、非推奨の MySQL 拡張機能はもう使用しないでください。MySQLi (準備済みステートメントを使用) または PDO に切り替えてください!

于 2013-10-23T15:00:57.027 に答える
0

のようなelse条件を追加してみてください

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;

}
于 2017-05-17T16:40:56.557 に答える