【发布时间】:2016-04-09 19:26:38
【问题描述】:
我正在尝试执行一个 while 循环来显示有关已标记帖子的数据。我目前以 Conor 身份登录,他标记了 2 个帖子(flagged_posts 字段中的 2 行)。但是当我执行下面的代码时,只有一个 div 是 echo,而两个应该是 echo,因为他标记了两个帖子。
这是我的方法:
<?php
// getting id of logged in user, need this to see all the flagged posts from logged in user.
$get_uid = mysqli_query ($connect, "SELECT id FROM users WHERE username = '$user' ");
$get_d = mysqli_fetch_assoc($get_uid);
$user_ident = $get_d ['id'];
// using the above id and getting all the flagged posts which have been flagged by the id obtained
$flagged_by2 = mysqli_query ($connect, "SELECT * FROM flagged_posts WHERE flagged_by_id = '$user_ident'");
$num_of_flagged_posts = mysqli_num_rows ($flagged_by2);
while ($getting_d = mysqli_fetch_assoc ($flagged_by2)){
$flagged_thought_id = $getting_d['thought_id'];
}
$query = mysqli_query($connect, "SELECT * FROM user_thoughts WHERE id='$flagged_thought_id' ORDER BY id DESC LIMIT {$start}, {$limit}");
while ($row = mysqli_fetch_array($query)) {
$thought_id = $row['id'];
$message_content = $row['message'];
$date_of_msg = $row['post_details'];
$thoughts_by = $row['added_by'];
$attachent = $row['attachment'];
$shared = $row['shared'];
echo
" <div class='message_wrapper'>
<p> Details would be displayed here </p>
</div>";
} //while closed
编辑:
分页(使用 Marcin Nabiałek 方法):
$flagged_by2 = mysqli_query ($connect, "SELECT * FROM flagged_posts WHERE flagged_by_id = '$user_ident'");
$flagged_ids = [];
$num_of_flagged_posts = mysqli_num_rows ($flagged_by2);
while ($getting_d = mysqli_fetch_assoc ($flagged_by2)){
$flagged_ids[] = $getting_d['thought_id'];
}
if (!$flagged_ids) {
$flagged_ids[] = 0;
}
// Pagination - Load more content when bottom of page hit.
$limit = 10;
$page = (int) (!isset($_GET['p'])) ? 1 : $_GET['p'];
# sql query
$query = mysqli_query($connect, "SELECT * FROM user_thoughts WHERE id IN " . implode(', ', $flagged_ids)." ORDER BY id DESC");
# find out query start point
$start = ($page * $limit) - $limit;
# query for page navigation
if(mysqli_num_rows($query) > ($page * $limit) ){
$next = ++$page;
}
//$query = mysqli_query($connect, "SELECT * FROM user_thoughts WHERE id='$flagged_thought_id' ORDER BY id DESC LIMIT {$start}, {$limit}");
$query = mysqli_query($connect, "SELECT * FROM user_thoughts WHERE id IN " . implode(', ', $flagged_ids)." ORDER BY id DESC LIMIT {$start}, {$limit}");
if (mysqli_num_rows($query) < 1) {
header('HTTP/1.0 404 Not Found');
echo "<div class='nothing_to_say'>
$ufirstname has no flagged posts.
</div>";
exit();
}
通过上述,我得到了两个相同的错误:
mysqli_num_rows() 期望参数 1 为 mysqli_result - 在线:
if(mysqli_num_rows($query) > ($page * $limit) ){
与
if (mysqli_num_rows($query) < 1) {
如果我将这两行注释掉,则会收到另一个错误: mysqli_fetch_array() 期望参数 1 为 mysqli_result,在线:
while ($row = mysqli_fetch_array($query)) {
【问题讨论】:
-
我认为您的查询会更容易,个人:
"SELECT * from users where username = '$user' left join flagged_posts on flagged_by_id = users.id left join user_thoughts on user_thoughts.id = flagged_posts.thought_id"