0

ここで何が問題なのかよくわかりません。userid の外部キーを持つ posts テーブルがあり、それに基づいて users テーブルからユーザー名を取得したいのですが、問題なく取得できるように見えますが、うまくいきません。 t は最初の投稿に表示されます。私のコードは次のとおりです。

$query_therealuserid = 'SELECT users.username, users.userid, posts.userid, posts.created_at
FROM users, posts
WHERE users.userid = posts.userid
ORDER BY posts.created_at';

$therealuserid = mysql_query($query_therealuserid, $akaearthdb) or die(mysql_error());

<?php do { ?>
  <div id= "post">
    <?php if (stripos($row_rsjustpost['link'], ".png") !== false) {?>
            <img src="<?php echo $row_rsjustpost['link']; ?>" id="postImage" alt="Broken Link">
            <?php }?>
    <?php if (stripos($row_rsjustpost['link'], ".gif") !== false) {?>
            <img src="<?php echo $row_rsjustpost['link']; ?>" id="postImage" alt="Broken Link">
            <?php }?>
    <?php if (stripos($row_rsjustpost['link'], ".jpg") !== false) {?>
            <img src="<?php echo $row_rsjustpost['link']; ?>" id="postImage" alt="Broken Link">
            <?php }?>
    <?php if (stripos($row_rsjustpost['link'], ".jpeg") !== false) {?>
            <img src="<?php echo $row_rsjustpost['link']; ?>" id="postImage" alt="Broken Link">
            <?php }?> 

    <a href="<?php echo $row_rsjustpost['link']; ?>"><?php echo $row_rsjustpost['title']; ?></a>
    <br/>
    <?php echo $row_rsjustpost['text']; ?>
    </p>
    <br />

            <?php 
            do {
            if ($whileLoopCounter0!=$whileLoopCounter1){break;}
        ?>By: <?php echo $row['username'];
        echo "<br />";
            $whileLoopCounter1++;

            } while($row = mysql_fetch_array($therealuserid));
            ?>


  </div>
  <?php $whileLoopCounter0++; ?>
  <?php } while ($row_rsjustpost = mysql_fetch_assoc($rsjustpost)); ?>
</div>

ページをプルアップすると、すべての投稿が取得されますが、最初の投稿にはユーザー名がなく、ユーザー名はすべて 1 つの投稿にプッシュされます。最初の投稿の投稿 ID は 2 です。投稿 ID 1 とユーザー ID で新しい投稿を作成すると、ユーザー名なしで上部に表示され、他のユーザー名は上に移動して正しいものになります。

4

3 に答える 3

3

これは、do-while ループを使用しているためです。これ$row = mysql_fetch_array($therealuserid)はループの最後で実行されます。通常の while ループを使用しないのはなぜですか。

于 2012-05-08T20:09:22.510 に答える
1

現在 do-while ループを使用しているため、最初に do ブロックが実行され、次に do ブロックの最初の実行後にのみ while ブロックが評価されます。

代わりにこれを使用してください:

while ($whileLoopCounter0==$whileLoopCounter1) {
   $row = mysql_fetch_array($therealuserid);
   if ($row){
 ?>
 By: 
 <?php 
      echo $row['username'];
      echo "<br />";
      $whileLoopCounter1++;
    }
}
于 2012-05-08T20:11:16.770 に答える
0

ループカウンターをインクリメントした後、ユーザー名を取得しているようです。ループが 1 になった後にユーザー名がプルされるため、そのデータがまだ存在しないため、最初の行は空になります。

あなたがしていることは他にもたくさんありますが、それはただの努力の無駄です。結果をオブジェクトに投げて、代わりにキーが必要ない場合はforeach($result as $key=>$value)orを使用してみてください。foreach($result as $item)

于 2012-05-08T20:11:49.153 に答える