:::::::::::::::::::::::::::::::::::::::::::
Главная страница
:::::::::::::::::::::::::::::::::::::::::::
Обучение
Лучшие ученики
Преподаватель
Регистрация
:::::::::::::::::::::::::::::::::::::::::::
Гостевая книга
:::::::::::::::::::::::::::::::::::::::::::
Документация
:::::::::::::::::::::::::::::::::::::::::::
О сайте
:::::::::::::::::::::::::::::::::::::::::::
Повышение квалификации
:::::::::::::::::::::::::::::::::::::::::::
Работа с MySQL. Новостная лента для странички Дмитрий Лебедев 2000-12-04 Конкретный пример работы с MySQL - простейшая новостная лента. 1. Создание таблицы Итак, что нам нужно в новостной ленте? Сам текст новости, дата... ну и пусть ещё у новости будет заголовок. Берём phpMyAdmin, создаём базу данных (можно и не создавать). Жмём на её название в списке баз. В правом окне помимо (пустого) списка таблиц текущей БД есть формы действий. Находим форму создать таблицу. Пишем имя таблицы news, и число полей - нам нужно 4. Вводим информацию о полях таблицы: Имя поля Тип данных Пустое Дополнительно news_id MEDIUMINT NOT NULL AUTO_INCREMENT (для этого поля надо поставить галочку первичный) ntext TEXT NOT NULL ntitle VARCHAR(255) ndate DATETIME NOT NULL Поле news_id не нужно для вывода ленты, но необходимо для администрирования новостей. AUTO_INCREMENT означает автоматическое задание значения поля при создании новой строки таблицы. В ntext будет храниться сам текст новости. Длина одной заметки может быть до 65 килобайт. Пометка NOT NULL означает, что поле не может быть пустым, а при попытке вставить в таблицу строку, в которой поле ntext будет пустым, MySQL сильно руганётся. Заголовок новости - ntitle - пусть будет опциональным. Иногда заголовок просто неуместен, или придумать его сложно. Максимальная длина заголовка в нашей таблице будет 255 символов. Поле ndate содержит дату и время новости. Естественно, что оно не может быть пустым - по нему идёт сортировка таблицы. А вот так выглядит запрос на создание таблицы: CREATE TABLE news (news_id MEDIUMINT NOT NULL AUTO_INCREMENT, ntext TEXT NOT NULL, ntitle VARCHAR(255), ndate DATETIME NOT NULL, PRIMARY KEY(news_id)); Программный код: $request = CREATE TABLE ... ; mysql_query($request); if (mysql_error()) echo Ошибка БД в запросе $request. MySQL пишет: . mysql_error(); else echo Таблица создана; 2. Запись новостей Создаётся новость путём отправки запроса точно так же, как и запроса на создание таблицы или выборки строк. Перед вставкой данных в запрос, их лучше обработать функцией addslashes, чтобы одинарные кавычки MySQL воспринял, как часть текста: mysql_query (INSERT INTO news (ntitle, ntext, ndate) VALUES (. addslashes($ntitle). , . addslashes($ntext). , NOW())); В поле типа DATE вставляем текущее время функцией now. Если нужно вставить не текущее время, можно сделать так: ..., . date(Y-m-d H-i-s, $date). , ... Этот формат - для типа DATETIME. Если тип данных DATE, то надо использовать Y-m-d, и если TIME, соответственно H-i-s. Переменная $date здесь содержит дату/время, определенные функцией mktime. 3. Вывод новостной ленты Итак, мы уже соединились с сервером БД и выбрали базу (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 и этот префикс использовать не надо. /* в случае ошибки БД программа выводит сообщение сервера (конечно, можно обойтись без такой проверки, но тогда пользователю посыплются ругательства 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-запросы. Итак, 4. Механизм администрирования - теория В первую очередь рекомендую заняться именно им, чтобы потом не было мучительно больно: новостная лента почти готова, только редактирование новости никак не написано, и приходится писать запросы INSERT INTO news... каждый раз вручную. Можно, конечно, и через хвалёный phpMyAdmin писать новости, но это тоже не то. В директории с сайтом создаём директорию admin (можно более оригинально - например chief, nachalnik...). Когда сайт будет выложен на WWW, положим в эту директорию .htaccess и поставим пароль, чтоб кто попало не лазил. А теперь думаем, что же надо для нормальной работы с новостями. Форма для ввода новых новостей, обрабочтик формы. Так, а ещё? Список новостей с возможностью тыкнуть в неё, чтобы тут же отредактировать. Потом можно сделать галочки напротив заголовков новостей, чтоб можно было отметить неугодные и грохнуть их тут же (а лучше, чтоб было подтверждение да/нет). А потом сделать ввод даты ограниченным: вместо текстовых полей - раскрывающиеся списки, которые бы спасли от опечаток. Много... Но чтобы потом не было мучительно больно... Детально описывать здесь это не имеет смысла - скачайте файл и разберитесь. К этому выпуску планируется продолжение - новостная лента с рубриками. В общем, заходите ещё.
Статьи
21 ошибка программиста. Часть1
Подробнее

21 ошибка программиста. Часть2
Подробнее

21 ошибка программиста. Часть3
Подробнее

Вступление в PHP и MySQL.
Подробнее

Ловля ошибок в PHP.
Подробнее

Народная самодеятельность.
Подробнее

Оптимизация запросов в MySQL.
Подробнее

Пишем PHP код. Проба пера
Подробнее

Приемы безопасного програмиров-я
Подробнее

Работа с MySQL 1. Новостная лента
Подробнее

Работа с MySQL 2. Деревья
Подробнее

Работа с MySQL 3. Подробности
Подробнее

Обучающая система "Язык PHP", 2006 г.