Новостная лента на PHP [Часть 1]

12.01.2008 от WindOfHeart

В этой статье я расскажу, как можно без особых усилий написать простую новостную ленту на PHP c MySQL. В последующих частях мы будем совершенствовать наш скрипт: добавим администраторскую панель, возможность комментировать новости, смайлики, BB-code и многое другое…

Итак, приступим к выполнению первой части нашего проекта!


1. Создадим БД MySQL и таблицу news, сделать это можно при помощи phpMyAdmin (http://phpmyadmin.net). В базе данных, а именно в таблице news будут храниться все заголовки и тексты новостей, позднее таблицу можно расширить, добавив туда автора, дату публикации и много всего полезного. Это мы сделаем в следующих частях нашего проекта.

Листинг таблицы news:

CREATE TABLE `news` (

`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,

`title` VARCHAR( 255 ) NOT NULL ,

`text` TEXT NOT NULL ,

PRIMARY KEY ( `id` )

);

Данный код написан на языке SQL. Каждый PHP программист должен хотя бы немного знать его, чтобы писать свои скрипты. В интернете вы сможете найти множество учебников по этой теме.

Если у вас нету phpMyAdmin, при помощи которого можно выполнить этот код, вы можете воспользоваться PHP, выполнив данный запрос к серверу. Об этом будет написано ниже.

id - номер новости, AUTO_INCREMENT значит, что при каждой новой записи, поле id будет автоматически увеличиваться на единицу.

title - заголовок новости

text - сама новость

2. Создадим конфигурационный файл config.php, где мы пропишем настройки соединения с БД.

Листинг config.php:

<?php

$mysql_server=”localhost”; //Сервер БД

$mysql_user=”user_name”; //Пользователь БД

$mysql_pass=”password”; //Пароль БД

$dbname=”database1″; //Имя БД

$records_on_page=3; //Количество новостей на странице

?>

3. Приступим к написанию скрипта просмотра новостей, назовем его news.php

Чтобы работать с базой данных для начала нужно подключиться к серверу MySQL.

if(!mysql_connect($mysql_server, $mysql_user, $mysql_pass))

{

echo “<h1>MySQL server error: CAN’T CONNECT TO SERVER</h1>”;

exit;

}

Функция mysql_connect подключается к серверу БД используя 3 параметра, которые мы указали в config.php. Если подключиться не удалось, выводим на экран ошибку: “MySQL server error: CAN’T CONNECT TO SERVER(Не могу подключиться к серверу)”.

После удачного подключения, необходимо выбрать нужную нам базу данных, имя которой мы указали во все том же файле config.php:

mysql_select_db($dbname) or die (”Can’t select database”);

Теперь нам нужно сформулировать mysql запрос который выбирает все записи из БД.

Функция mysql_query() позволяет выполнить запрос:

$query=mysql_query(”select * from news order by id desc LIMIT 0,$records_on_page”);

Данный запрос выбирает все записи (select *) из таблицы news (from news) и сортирует их (order by) по id в порядке возрастания (desc) т.е. чем ниже ID, тем выше будет запись. LIMIT - ограничивает выбор, т.к. нужно нам только столько записей, сколько мы указали в переменной $records_on_page.

Теперь нужно поместить результат запроса в массив. Сделать это можно при помощи функции mysql_fetch_array():

$f=mysql_fetch_array($query);

Нам важно легко менять дизайн выводимой информации. Давайте создадим шаблон и назовем файл template.php.

Листинг template.php:

А листинг может быть любой или почти любой. В том месте, где должен выводиться заголовок новости нужно написать:

<?php echo”$f[title]”; ?>

Аналогично: <?php echo”$f[text]”; ?>

Пример листинга template.php:

<table width=”400″ border=”0″ cellspacing=”0″ cellpadding=”0″>

<tr>

<th><?php echo”$f[title]”; ?></th>

</tr>

<tr>

<td><?php echo”$f[text]”; ?></td>

</tr>

</table>

Остается вывести все на страницу!

for ($i=0;$i<mysql_num_rows($query);$i++)

{

$f=mysql_fetch_array($query);

include’template.php’;

echo “<br>”;

}

Функция mysql_num_rows() определяет кол-во записей возвращенных запросом

Вот и все! Теперь полный листинг файла news.php:

<?php

include ‘config.php’;

if(!mysql_connect($mysql_server, $mysql_user, $mysql_pass))

{

echo “<h1>MySQL server error: CAN’T CONNECT TO SERVER</h1>”;

exit;

}

mysql_select_db($dbname) or die (”Can’t select database”);

$query=mysql_query(”select * from news order by id desc LIMIT 0,$records_on_page”);

for ($i=0;$i<mysql_num_rows($query);$i++) //Выводим записи

{

$f=mysql_fetch_array($query);

include’template.php’;

echo “<br>”;

}

?>

Теперь нам нужно написать скрипт добавления новостей в базу данных. Создадим файл add.php.

В начале файла будет HTML код:

<form name=”form1″ method=”post” action=”add.php”>

<label>

<input name=”title” type=”text” id=”title”>

</label>

<p>

<label>

<textarea name=”text” id=”text”></textarea>

</label>

</p>

<p>

<label>

<input type=”submit” name=”Submit” value=”Submit”>

</label>

</p>

</form>

Здесь все понятно: имеется 2 поля, одно для ввода текста, другое для заголовка, а также кнопка, чтобы отправить данные из формы скрипту.

Теперь настало время написать PHP код

include ‘config.php’; //Подключаем конфигурационный файл

Выполним подключение к серверу и выберем нужную нам БД, как мы это делали в news.php.

Прежде чем добавлять данные в БД нужно проверить правильность ввода:

if ((!empty($title)) and (!empty($text))) {

Если не пуста переменная $title и переменная $text тогда начинаем…

Начинаем добавлять данные в БД.

$query=mysql_query (”

INSERT INTO `news` (`id`, `title`, `text`) VALUES (”, ‘$title’, ‘$text’);

“);

echo mysql_error(); //Пишем ошибку MySQL если она имеется.

Если ошибки нет, т.е. её код равен нулю, пишем, что новость успешно добавлена.

if (mysql_errno()==0) echo “Новость успешно добавлена! “;

Листинг файла add.php:

<form name=”form1″ method=”post” action=”add.php”>

<label>

<input name=”title” type=”text” id=”title”>

</label>

<p>

<label>

<textarea name=”text” id=”text”></textarea>

</label>

</p>

<p>

<label>

<input type=”submit” name=”Submit” value=”Submit”>

</label>

</p>

</form>

<?php

include ‘config.php’; //Подключаем конфигурационный файл

if(!mysql_connect($mysql_server, $mysql_user, $mysql_pass))

{

echo “<h1>MySQL server error: CAN’T CONNECT TO SERVER</h1>”;

exit;

}

mysql_select_db($dbname) or die (”Can’t select database”);

if ((!empty($title)) and (!empty($text))) {

$query=mysql_query (”

INSERT INTO `news` (`id`, `title`, `text`) VALUES (”, ‘$title’, ‘$text’);

“);

echo mysql_error();

if (mysql_errno()==0) echo “Новость успешно добавлена! “;

}

?>

Теперь давайте добавим несколько новостей и посмотрим как все работает!

newslent1.gif

Заметьте, что первой новости нет, т.к. мы указали в config.php $records_on_page=3.

Давайте модернизируем наш шаблон!

Листинг template.php:

<table width=”400″ border=”0″ cellpadding=”0″ cellspacing=”1″ bgcolor=”#CCCCCC”>

<tr>

<td bgcolor=”#FFFFFF”><b>.: <?php echo”$f[title]”; ?></b></td>

</tr>

<tr>

<td bgcolor=”#FFFFFF”><?php echo”$f[text]”; ?></td>

</tr>

</table>

Теперь наша новостная лента выглядит красивее!

newslent2.gif

В следующих частях мы продолжим совершенствовать наш скрипт! Удачи в изучении PHP ;)

При копировании материалов сайта, ссылка на http://web-guild.org обязательна.

Рубрики: PHP, Начинающим |

Оставить комментарий

Заметьте: Включена проверка комментариев. Нет смысла повторно отправлять комментарий.