0

我不太确定问题出在哪里,我有一个带有 userid 外键的 post 表,我想基于此从 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>

当我拉起页面时,我得到了所有帖子,但第一个没有用户名,并且用户名都被推下一个帖子。第一个帖子的 postid 为 2,如果我创建一个 postid 为 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

看起来您在增加循环计数器后正在获取用户名。用户名在循环为一个之后被拉出,因此第一行将为空,因为该数据尚不存在。

尽管您正在做很多其他事情,但这只是在浪费精力。尝试将结果扔到一个对象中并使用foreach($result as $key=>$value)orforeach($result as $item)如果您不需要密钥。

于 2012-05-08T20:11:49.153 回答