#php #mysql #while-loop #fetch #categories
#php #mysql #цикл while #выборка #Категории
Вопрос:
Итак, вот пример кода, который я использую, чтобы показать все категории, которые связаны с определенным идентификатором postID. Например, сообщение 1 содержит категории: Apple, Зеленый и желтый, связанные с ним.
Но, похоже, я не могу правильно извлечь данные, поскольку они уже были извлечены один раз в верхней части, я не могу выполнить правильный цикл while в той Categories:
части моего кода, где я пытаюсь выполнить цикл while. Цикл while работает и извлекает все категории, кроме первой, а также, когда я размещаю цикл while,
$row[‘PostTitle’]
и
$row[‘postCont’]
больше не будет отображаться, потому что он пропускается. Как бы мне исправить что-то подобное? Спасибо.
<?php require('includes/config.php');
$stmt = $db->prepare(" SELECT *
FROM blog_posts
LEFT JOIN blog_posts_categories ON blog_posts.postID=blog_posts_categories.postID
INNER JOIN blog_categories ON blog_posts_categories.catID=blog_categories.catID
WHERE blog_posts.postID = :postID");
$stmt->execute(array(':postID' => $_GET['id']));
$row = $stmt->fetch();
//if post does not exists redirect user to homepage.
if($row['postID'] == ''){
header('Location: ./');
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title><?php echo $row['postTitle'];?> | Website</title>
<link rel="stylesheet" href="style/normalize.css">
<link rel="stylesheet" href="style/main.css">
</head>
<body>
<div id="wrapper">
<h1>Single Post Page</h1>
<hr />
<p><a href="./">Home</a> |
Categories:
<?php while($row = $stmt->fetch())
{
//the first category is being skipped? How to fix?
echo $row['catName'];
} ?>
</p>
<div>
<?php
//these won't appear because of the while loop. It's being skipped.
echo '<h1>'.$row['postTitle'].'</h1>';
echo '<p>'.$row['postCont'].'</p>';
?>
</div>
</div>
</body>
</html>
Комментарии:
1. У тебя есть лишний
$row = $stmt->fetch();
на самом верху !2. Да, я знаю, но если я удалю его, весь мой код не будет работать.
Ответ №1:
Заменить:
while($row = $stmt->fetch())
{
echo $row['catName'];
}
С:
do {
echo $row['catName'];
} while($row = $stmt->fetch());
Что касается других элементов — поместите их внутрь цикла, очевидно, а не после.
Комментарии:
1. Ваш гений, ха-ха, спасибо, это сработало!!!! Спасибо, но теперь я столкнулся с другой проблемой: $row [‘PostTitle’] и $ row[‘postCont’] и все, что не появится, это редактирование содержимого: я пытался поместить их в цикл, но я не хочу, чтобы они появлялись более 1 раза
2. Как уже было сказано, поместите их внутрь цикла, если вы хотите, чтобы они оценивались внутри цикла. Не могу сделать это намного понятнее….
3. Niels excuses daarvoor haha had het te snel gelezen! Я отредактировал свой первый комментарий
4. Я не совсем уверен, как работает этот ответ. Не могли бы вы уточнить? 🙂
5. Я попытался поместить другие мои элементы за пределы цикла do while следующим образом:
do { echo $row['catName']; } while($row = $stmt->fetch()); echo '<h1>'.$row['postTitle'].'</h1>'; echo '<p>'.$row['postCont'].'</p>';
но для них ничего не отображается