我使用mysqli_fetch_assoc函数以降序获取行,但是当我回显表“ posts”的关联数组时(posts table中只有三行-post 1,post 2,post 3)
它以这种方式打印:({I have added a screenshot of this output )
帖子3(修改/删除)
帖子3(编辑/删除)
第2条(编辑/删除)
帖子3(编辑/删除)
第2个帖子(编辑/删除)
发布1(修改/删除)
我希望它以这种方式打印:
帖子3(编辑/删除)
第2个帖子(编辑/删除)
发布1(修改/删除)
这是我的代码:
<?php
$db = mysqli_connect("localhost", "root", "", "myblog");
$sql = "SELECT * FROM posts ORDER BY id DESC";
$res = mysqli_query($db, $sql) or die(mysqli_error($db));
$count = mysqli_num_rows($res);
$posts = "";
if ($count > 0) {
while ($row = mysqli_fetch_assoc($res)) {
$id = $row['id'];
$title = $row['title'];
$content = $row['content'];
$date = $row['date'];
$admin = "
<div>
<a href='del_post.php?pid=$id'>DELETE </a>
<a href='edit_post.php?pid=$id'>EDIT</a>
</div>
";
$posts .= "<div><h4>$title</h4><h3>$date</h3><p>$content</p>$admin</div>";
echo $posts;
}
} else {
echo "there is nothing to show";
}
?>
谢谢。
答案 0 :(得分:0)
我认为问题出在这一行,
while ($row = mysqli_fetch_assoc($res)
相反,需要将$ res更改为$ count。
答案 1 :(得分:0)
要以Dharman的评论为基础-每次循环时,您都将一些数据连接到$posts
变量,然后进行打印,但是您绝不会将$posts
重置为空字符串。
一些示例代码:
$rows = [ 'a', 'b', 'c' ];
$posts = '';
foreach ($rows as $row) {
$posts .= $row;
echo $posts;
}
在此循环中,第一次打印a
,第二次打印ab
,第三次打印abc
。
有(至少)两种方法可以解决此问题,您可以在$posts
循环的开始处清除while
:
while ($row = mysqli_fetch_assoc($res)) {
$posts = '';
或者您可以将$posts
的打印移至while
循环完成之后:
$posts .= "<div><h4>$title</h4><h3>$date</h3><p>$content</p>$admin</div>";
}
echo $posts;
第三个选择是根本不使用$posts
变量:
echo "<div><h4>$title</h4><h3>$date</h3><p>$content</p>$admin</div>";