Простой пример работы с базой данный в 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. В этом файле будет содержаться код для подключения базы данных. И теперь при необходимости подключить базу данных, вместо нескольких строк кода, мы будем просто подключать один файл. А вот и код этого файла:

<?php
	define("HOST", "localhost");
	define("USER", "root");
	define("PASSWORD", "");
	define("DB_NAME", "mydb");
	$db_connect = mysql_connect(HOST, USER, PASSWORD, TRUE); 
	mysql_selectdb(DB_NAME,$db_connect);
	mysql_set_charset('utf8');
?>

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

<?php
	include("/db_connection.php"); // подключаемся с бд
	// получаем список категори
	// и отсортируем по алфавиту
	$sql = mysql_query("
		SELECT * FROM `category` 
			ORDER BY `name` ASC;
	") or die(mysql_error());
	$rows = array();
	while($r = mysql_fetch_array($sql, MYSQL_ASSOC)){
		$rows&#91;&#93; = $r;
	}
	
	/* 
	* вывод списка категорий
	* в списке сразу создаем ссылку на страницу,
	* где будет отображаться список статей той или иной категории
	*/
	foreach($rows as $row){
?>
	<a href="/news_list.php?cat_id=<?php echo $row&#91;'id'&#93;; ?>"><?php echo $row&#91;'name'&#93;; ?></a>
	<br>
<?php }?>

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

<?php
	include("/db_connection.php"); // подключаемся с бд
	// получаем id категории, для которой нужно вывести новости
	// id передается в урле
	// если в урле ни чего не передалось, то выведем новости всех категорий
	// Не забадте проверять, то что передаета в запрос. 
	// Я делаю без проверок, чтобы не усложнять код
	if(isset($_GET&#91;'cat_id'&#93;)){
		$sqlQuery = "
			SELECT * FROM `news` 
				WHERE `id_category` = ".$_GET&#91;'cat_id'&#93;.";
		";
	}else{
		$sqlQuery = "
			SELECT * FROM `news`;
		";
	}
	// делаем запрос к бд и получаем новости
	$sql = mysql_query($sqlQuery) or die(mysql_error());
	$rows = array();
	while($r = mysql_fetch_array($sql, MYSQL_ASSOC)){
		$rows&#91;&#93; = $r;
	}
	
	/* 
	* вывод списка новостей
	* в списке сразу создаем ссылку на страницу,
	* где будет отображаться полная новость
	*/
	foreach($rows as $row){
?>
	<h1><?php echo $row&#91;'title'&#93;; ?></h1>
	<p><?php echo $row&#91;'small_text'&#93;; ?></p>
	<h3>Author: <?php echo $row&#91;'author'&#93;; ?></h3>
	<a href="/news.php? id=<?php echo $row&#91;'id'&#93;; ?>">Read more</a>
	<hr/>
<?php }?>

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

<?php
	include("/db_connection.php"); // подключаемся с бд
	// получаем id новости которую будем показывать
	// id передается в урле
	// если в урле ни чего не передалось, 
	// то напишем что новость не нашлась
	if(isset($_GET&#91;'id'&#93;)){
		$sqlQuery = "
			SELECT * FROM `news` 
				WHERE `id` = ".$_GET&#91;'id'&#93;.";
		";
		// делаем запрос к бд и получаем новости
		$sql = mysql_query($sqlQuery) or die(mysql_error());
		$rows = array();
		while($r = mysql_fetch_array($sql, MYSQL_ASSOC)){
			$rows&#91;&#93; = $r;
		}
		foreach($rows as $row){
?>
		<h1><?php echo $row&#91;'title'&#93;; ?></h1>
		<p><?php echo $row&#91;'text'&#93;; ?></p>
		<h3>Author: <?php echo $row&#91;'author'&#93;; ?></h3>
<?php 
		}
	}else{
		echo "News not found";
	}
?>

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

Рассказать друзьям:


Оценить:
(2 оценок, среднее: 5,00 из 5)

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

  1. Здравствуйте,вы можете применить постраничный вывод к этому скрипту помогие пожалуйста

Добавить комментарий для Dark Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code