PHP в деталях

       

Вывод новостной ленты


Итак, мы уже соединились с сервером БД и выбрали базу (mysql_connect и mysql_select_db). Теперь осталось вывести записи. Отправляем запрос, проверяем на возможную ошибку и выводим строки.

$request = "SELECT ntext, ntitle, ndate FROM news";

Теперь бы только отсортировать данные... Изменим в запрос:

$request = "SELECT ntext, ntitle, ndate FROM news ORDER BY ndate DESC";

это означает, что сортировка идёт по полю ndate в порядке убывания (DESCending) даты (2000-12-05, 2000-12-04, ...). Сортировка по возрастанию - префикс ASC (ASCending), обычно сортировка по возрастанию установлена default и этот префикс использовать не надо.

Теперь выводим ленту:

$request = "SELECT ntext, ntitle, ndate FROM news ORDER BY ndate DESC";

$result = mysql_query($request);

if (!mysql_error()) {

// Цикл, вынимающий строку как массив с числовым индексом

while ($row = mysql_fetch_row($result)) {

    print("<tr><td><h3>". $row[1]. "</h3>");

    pring("<font size=-1>". $row[2]. "</font>");

    print("<p align=justify>". $row[0]. "</p>");

    };

  }

/* в случае ошибки БД программа выводит сообщение сервера (конечно, можно обойтись без такой проверки, но тогда пользователю посыплются ругательства PHP). */

else {

  print ("Ошибка БД в запросе "$request". MySQL пишет ". mysql_error());

};

/* если дальше предусмотрено выполнение каких-либо операций, лучше всего сразу очистить память */

mysql_free_result ($result);

Ещё одна полезная вещь: если это новостная лента, скажем, на главной странице сайта, нужно ограничить количество новостей (скаджм 10). И ещё надо, чтоб дата отображалась не как "2000-12-05 22-26-47", а "5.12.2000 22:46":

$request = "SELECT ntext, ntitle, date_format(ndate,'%e.%m.%Y %H:%i') as ndate1 FROM news ORDER BY ndate DESC LIMIT 10";

Ограничиваем количество новостей ровно десятью, и не надо никаких условий в цикле while. Функция date_format форматирует дату так, как нам надо (буквы - как в функции PHP date, а "e" - это число месяца без нуля в начале). Почему пишу "as ndate1", а не "as ndate"? Проверьте сами :) (подсказка: см. директиву ORDER BY в том же запросе).

Но, господа, это всё было только цветочки. Самое главное, чего пока нет - это возможности администратору работать с новостями, кликая мышкой, а не набирая SQL-запросы. Итак,



Содержание раздела