Вывод статей php mysql

Простой пример работы с базой данный в php. Часть 3. Новости

В этой статье я хочу рассказать о том, как можно осуществлять вывод новостей.
Начнем, как уже повелось, с постановки задачи: Необходимо создать страницу, на которой будет отображен список разделов новостей, если кликнуть по какому-либо разделу, должна открыться страница со списком новостей нужной категории. В данном списке новостей для каждой новости должно отображаться заголовок, краткое описание, автор, а также ссылка на полный текст новости.

Прежде чем перейти к написанию кода, нужно спроектировать базу данных. В базе данных мы будем хранить новости и категории новостей. Нам потребуется две таблицы, первая – category, для хранения категорий новостей, она будет состоять из двух полей – id и category_name. Тут все понятно, id – первичный ключ, а name будет служить для хранения названия категорий. Вторая таблица будет создана для новостей — news. Таблица news будет состоять из полей:
Id — первичный ключ,
id_category – id категории из таблицы category,
title — заголовок,
small_text – краткое описание,
text – полный текст новости,
author – автор новости.
Поскольку таблица news использует в своем поле id_category id из таблицы category, нам необходимо связать две таблицы ключом.
Для создания этих таблиц Вы можете воспользоваться sql-патчем. Помимо создания таблиц и связей, патч создаст несколько записей.

CREATE TABLE `category` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; CREATE TABLE `news` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `id_category` INT(10) NOT NULL, `title` VARCHAR(255) NOT NULL, `small_text` TEXT NOT NULL, `text` TEXT NOT NULL, `author` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; ALTER TABLE `news` ADD CONSTRAINT `FK_news_category` FOREIGN KEY (`id_category`) REFERENCES `category` (`id`); INSERT INTO `category` (`category_name`) VALUES ('category_1'); INSERT INTO `category` (`category_name`) VALUES ('category_2'); INSERT INTO `news` (`id_category`, `title`, `small_text`, `text`, `author`) VALUES (1, 'title1', 'small_text1', 'text1', 'author1'); INSERT INTO `news` (`id_category`, `title`, `small_text`, `text`, `author`) VALUES (2, 'title2', 'small_text2', 'text2', 'author2'); INSERT INTO `news` (`id_category`, `title`, `small_text`, `text`, `author`) VALUES (2, 'title3', 'small_text3', 'text3', 'author3');

Теперь приступим к написанию кода. Начнем с того что создадим файл db_connection.php. В этом файле будет содержаться код для подключения базы данных. И теперь при необходимости подключить базу данных, вместо нескольких строк кода, мы будем просто подключать один файл. А вот и код этого файла:

Читайте также:  Frameworks for php the best

Теперь давайте создадим страницу, на которой будет отображаться список категорий новостей, за эту страницу бедет отвечать скрипт index.php, а вто и его код:

 /* * вывод списка категорий * в списке сразу создаем ссылку на страницу, * где будет отображаться список статей той или иной категории */ foreach($rows as $row) < ?>"> 
?>

Теперь давайте создадим файл news_list.php – этот файл будет отвечать за список новостей. Ниже приведен его код:

else < $sqlQuery = " SELECT * FROM `news`; "; >// делаем запрос к бд и получаем новости $sql = mysql_query($sqlQuery) or die(mysql_error()); $rows = array(); while($r = mysql_fetch_array($sql, MYSQL_ASSOC)) < $rows[] = $r; >/* * вывод списка новостей * в списке сразу создаем ссылку на страницу, * где будет отображаться полная новость */ foreach($rows as $row) < ?>  

Author: ">Read more


?>

Теперь создадим файл news.php, он будет отвечать за страницу с полным текстом новости. Вот код этого файла:

 foreach($rows as $row) < ?>  

Author: >else < echo "News not found"; >?>

Все готово. Исходники можете скачать тут.

Источник

Постраничный вывод и базы данных

В SQL-запросах, для ограничения количества строк в результате используется инструкция LIMIT , например следующий вернёт первые 10 записей:

SELECT * FROM `table` ORDER BY `id` LIMIT 0, 10

В следующем запросе будут записи с 11 по 20:

SELECT * FROM `table` ORDER BY `id` LIMIT 11, 10

Для построения пагинации требуется знать сколько всего записей вернет SQL-запрос без LIMIT, для этого в MySQL есть опция SQL_CALC_FOUND_ROWS . С ней запрос вернет обычный результат.

SELECT SQL_CALC_FOUND_ROWS * FROM `table` ORDER BY `id` LIMIT 0, 10

Но теперь, если следом выполнить запрос SELECT FOUND_ROWS() , то он вернёт общее количество записей в предыдущем запросе.

На этом принципе был написан PHP-класс для постраничного вывода из базы данных.

Использование класса

В класс нужно передать URL страницы, количество записей на странице и SQL-запрос выборки из БД (например товары).

CSS-стили пагинатора:

.pagination-row < overflow: hidden; clear: both; margin: 0 0 20px 0; margin-bottom: 15px; >.pagination < padding: 0; margin: 0; text-align: center; >.pagination .page-item < display: inline-block; margin: 0 2px 3px; >.pagination .page-link < display: inline-block; height: 28px; min-width: 28px; line-height: 28px; font-size: 15px; text-decoration: none; text-align: center; border: 1px solid #ddd; border-radius: 3px; background: #fbfbfb; text-decoration: none; color: #000; >.pagination a.page-link:hover < background: #ffd57b; >.pagination .active a.page-link < background: #2bc2e0; border-color: #a5a5ca; >.pagination .separator .page-link < border-color: #fff; background: #fff; >.pagination .disabled .page-link

Стили для списка товаров:

.prod-list < overflow: hidden; margin: 0 -25px 20px 0; >.prod-item < width: 180px; height: 290px; float: left; border: 1px solid #ddd; padding: 20px; margin: 0 20px 20px 0; text-align: center; border-radius: 6px; >.prod-item-name < margin-bottom: 5px; >.prod-item-btn a

Источник

Вывод статей из БД

Всем добрый день ! Возник вопрос вывода статей из БД, на страницу сайта.
Подскажите как можно это сделать?
Я понимаю, что должно быть как-то так :
1.Выбираем все данные из таблицы posts и сортируем по значению date
2. Получаем массив
3. Выводим на странице в виде новостей, сначала заголовок, ниже автор и дата публикации, затем ниже краткое описание.
4. Заголовок должен быть ссылкой при нажатии на который открывается полная новость.
5. Ниже в таком же порядке выводятся 2,3. новость, и все что есть в БД.

Вообщем хочу вывести статьи на сайте, а т.к. только начинаю изучать PHP возникли трудности.

Начало немного набросал и столкнулся с ошибкой:
«Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in F:\OpenServer\domains\site.ua\1.php on line 17»
17 строка у меня это : «while ($row = mysql_fetch_array($res) )

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
 $dblocation = "localhost"; $dbuser = "root"; $dbpasswd = ""; $dbname = "site"; $db_on = mysql_connect($dblocation,$dbuser,$dbpasswd) or die ("Ошибка БД: ".mysql_error()); //Выбор БД mysql_select_db($dbname, $db_on) or die ("Ошибка БД: ".mysql_error()); $res = mysql_query("SELECT * FROM posts ORDER BY date"); while ($row = mysql_fetch_array($res) ){ echo $row['title'] . "
"
; echo $row['author'] . $row['time'] . "
"
; echo $row['content']; } ?>

Добавлено через 1 час 43 минуты
Сейчас столкнулся с проблемой создание ссылки на полную новость. Подскажите, как реализовать.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

Источник

Вывод статей из БД

Всем добрый день ! Возник вопрос вывода статей из БД, на страницу сайта.
Подскажите как можно это сделать?
Я понимаю, что должно быть как-то так :
1.Выбираем все данные из таблицы posts и сортируем по значению date
2. Получаем массив
3. Выводим на странице в виде новостей, сначала заголовок, ниже автор и дата публикации, затем ниже краткое описание.
4. Заголовок должен быть ссылкой при нажатии на который открывается полная новость.
5. Ниже в таком же порядке выводятся 2,3. новость, и все что есть в БД.

Вообщем хочу вывести статьи на сайте, а т.к. только начинаю изучать PHP возникли трудности.

Начало немного набросал и столкнулся с ошибкой:
«Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in F:\OpenServer\domains\site.ua\1.php on line 17»
17 строка у меня это : «while ($row = mysql_fetch_array($res) )

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
 $dblocation = "localhost"; $dbuser = "root"; $dbpasswd = ""; $dbname = "site"; $db_on = mysql_connect($dblocation,$dbuser,$dbpasswd) or die ("Ошибка БД: ".mysql_error()); //Выбор БД mysql_select_db($dbname, $db_on) or die ("Ошибка БД: ".mysql_error()); $res = mysql_query("SELECT * FROM posts ORDER BY date"); while ($row = mysql_fetch_array($res) ){ echo $row['title'] . "
"
; echo $row['author'] . $row['time'] . "
"
; echo $row['content']; } ?>

Добавлено через 1 час 43 минуты
Сейчас столкнулся с проблемой создание ссылки на полную новость. Подскажите, как реализовать.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

Источник

Оцените статью