【问题标题】:PHP echo $row['username'] not displaying the first username?PHP echo $row['username'] 不显示第一个用户名?
【发布时间】:2012-05-08 20:04:11
【问题描述】:

我不太确定问题出在哪里,我有一个带有 userid 外键的帖子表,我想基于此从 users 表中提取他们的用户名,似乎可以将它们拉出来但是它不会显示在第一篇文章中。 我的代码是:

$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 个条件是一样的?
  • 请停止使用古老的mysql_* 函数编写新代码。它们不再维护,社区已经开始deprecation process。相反,您应该了解准备好的语句并使用PDOMySQLi。如果你想学习,here is a quite good PDO-related tutorial.
  • @Truth 抱歉,我才刚刚开始,我正在学习一些有些旧的教程以及使用 Dreamweaver 的工具来编写一些代码。我会研究 PDO 和 MySQLi,谢谢。

标签: php mysql database


【解决方案1】:

那是因为你使用了 do-while 循环,$row = mysql_fetch_array($therealuserid) 在循环结束时执行,为什么不使用常规的 while 循环。

【讨论】:

  • 我避免使用它,因为即使调用了中断,它也会算作它显示了一个用户名,所以它只会显示每隔一个。 (Tushar Dhoot 为我修好了)
【解决方案2】:

您当前正在使用 do-while 循环,因此首先执行 do 块,然后仅在第一次执行 do 块后评估 while 块。

改用这个:

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

【讨论】:

  • 我试过了,但即使 if 语句跳出循环,它也算作经历了一次迭代,所以它只显示所有其他用户名。
  • 成功了!谢谢,我一直在努力让它工作一周。 :)
  • 很高兴能帮上忙!看看上面的 PDO 建议,这是非常好的建议。
【解决方案3】:

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

尽管您正在做很多其他事情,但这些只是在浪费精力。如果您不需要密钥,请尝试将结果放入对象中并使用foreach($result as $key=&gt;$value)foreach($result as $item)

【讨论】:

    猜你喜欢
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2015-12-08
    • 2014-01-21
    相关资源
    最近更新 更多