Задать вопрос
@Gesha946
Познаю азы PHP

Как вывести из базы данных все записи с помощью цикла while?

Цикл while выводит только последнюю запись из базы.
include_once ('include/connectdb.php'); 
 $res = $mysqli->query("SELECT *FROM `pages` WHERE `Category`='Новости' ");//Запрос в базу по категории
if ($res->num_rows) {
	while($row = $res->fetch_object()){
		$myTitle = $row->Title;
		$myH2 .="<h3>".$row->H2."</h3>";
		$myThumbnail = $row->Thumbnail;
		$mySmalNews ="<p>".$row->SMALNEWS."</p>";
	$content .= sprintf("<div id='news'><div class='smallnews'><h3>%s</h3><img src=%s/>
	<p>%s</p><a href='bignews.php'>Читать далее</a></div></div>", $myH2, $myThumbnail, $mySmalNews);
	}
	}else{
		$myH2 = "Нет записи в базе";
	}
		
 ?>

При объявлении переменной $myH2, что бы выводились все записи, нужно поставить точку перед знаком равно. Как итог - это работает, все выводится, НО, происходит это
Warning: Undefined variable $content in C:\Users\users\Desktop\xamp\htdocs\public_html\news.php on line 11  . Неопределенная переменная.
Хорошо, ругается на точку перед знаком =, убираем. Работает. Но выводит только одну запись. как с этим бороться?
  • Вопрос задан
  • 203 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
1. Переменные лучше инициализировать перед их использованием. В вашем случае перед while следовало бы сделать так:
$content = '';
while($row = $res->fetch_object()){ ... }

2. Вас не смущает, что вы в $content в каждой итерации цикла помещаете div с одним и тем же id?

3. И не совсем понятно, зачем вы для $myH2 пишите так:
$myH2 .="<h3>".$row->H2."</h3>";
У вас будет в ней текст собираться со всех предыдущих итераций.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@artem-dainov
Php, java, js. Boot spring, jquery, git
Чтобы выводить все строки циклом, вы можете сделать следующее.
1. Перейти на PDO. Это позволит вам не только mariadb/mysql использовать, но и еще другие сервер бд, к примеру Postgresql
2. Сделайте запрос к таблице.
3. Возьмите метод ->fetch(PDO::FETCH_ASSOC) и выводите данные через цикл while.
4. Можно еще взять ->fetchAll() и воспользоваться foreach.

Обратите внимание на то, что вызов большого количества записей может привести к подвисаниям.
Ответ написан
Комментировать
@Gesha946 Автор вопроса
Познаю азы PHP
Всем спасибо за оперативность. Разобрался
include_once ('include/connectdb.php');
echo '<h1 style="text-align: center">'.$H2.'</h1>'; 
 $res = $mysqli->query("SELECT *FROM `news`  ORDER BY `id` DESC ");//Запрос в базу по категории
	while($row = mysqli_fetch_array($res)){
		$id = $row['id'];
		$H2 = $row['H'].'<br>';
         $image = $row['Thumbnail'].'';
		 $smallnews = $row['SmallNews'].'<br>';
?>

<div id="news">
<div class="smallnews">
<?php
echo "<h3> 
<div class='small-news-header'>".$H2."</h3>
</div>
<div class='news-image-small'>
<img  src='images/".$image."' width=100px width=100px/>
</div>
<div class='small-news-text'>
<p>".$smallnews."</p><a href='bignews.php?id=".$id."'>Читать далее</a>
</div>
</div>
</div>";
	}




?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы