Примеры иллюстрирует листинг 15.1.
// Выводим первые 10 записей
SELECT *
FROM
LIMIT 0,10
// Выводим 10 записей, начиная с десятой записи
SELECT *
FROM
LIMIT 10,10
// Выводим 10 записей, начиная с двадцатой записи
SELECT *
FROM
LIMIT 20,10
Как видите, все просто. Параметр offset остается неизменным — это число
записей, которое мы будем выводить на странице (этот параметр можно даже
Глава 15. Дополнительные функции CMS 189
определить в файле конфигурации нашего сценария, чтобы потом легко было
его изменить).
Теперь напишем сценарий, организующий постраничный вывод из таблицы.
Пусть наш сценарий называется show.php, а переменная, задающая нужную
страницу, — $раде. Тогда ссылка на следующую страницу будет выглядеть
так:
fl^ee
Сценарий будет выводить объявления из таблицы ob. Структура таблицы
очень проста: поле dt — дата публикации объявления, а поле t — текст
самого объявления. Сценарий будет выводить по пять объявлений из таблицы,
а также ссылки Назад и Далее. Первая ссылка будет выведена, если номер
страницы больше нуля, а вторая — если еще есть записи для вывода.
Код сценария, а также подробные комментарии приведены в листинге 15.2.
// Подключаемся к серверу, выбираем базу данных и устанавливаем кодировку
mysql_connect(«localhost»,»root»,»password»);
mysql_select_db(«database»);
mysql_query(‘SET NAMES cpl251;’);
// Число объявлений на странице
$N = 5;
// Использовать функцию mysql_num_rows() нельзя, потому что
// для того чтобы узнать общее число записей, нужно выполнить
// запрос select * from ob, т. е. получить все записи, а это
// нежелательно, поэтому вызываем функцию count
$rl=mysql_query(«select count(*) as rec from ob»);
$f ~ mysql_fetch_row($rl) ;
$rec = $f[0]; // Всего записей в таблице
// Если страница не указана, выводим первую
if (!isset($page)) $page=0;
190
Часть IV. Разработка собственной Cftfs
// Записи, которые нужно вывести
$records = $page * $N;
// Запрос
$q=»select * from ob limit «.$records.», $N»;
echo «Всего записей $rec
«;
$r=^riysql_query($q); // Выполняем запрос
$n = mysql_nmn_rows($r); // Число записей
// Если страница не первая, выводим ссылку Назад
if ($page > 0) {
$р = $page — 1;
echo «Ha3afl »;
}
$page++; // Увеличиваем страницу
// Выводим ссылку на следующие пять записей (на след. Страницу),
// если она есть, т. е. число записей, которые нужно вывести, и
// смещение не превышает общего числа записей
if ($records+$N
echo «Далееа>«;
// Выводим объявления
for ($i=0; $i
{
$f=*nysql_fetch__array($r);
// Выводим дату (поле dt)
echo «
$f [dt]«;
Гпава 15. Дополнительные функции CMS 191
// Выводим текст объявления (поле t)
echo «*
«;
?>
Готовый сценарий представлен на рис. 15.2.
Рис. 15.2. Постраничный вывод таблицы
15.3. Функция вывода
содержимого HTML-файла
Иногда бывает нужно вывести содержимое какого-нибудь HTML-файла.
Реализовать функцию вывода HTML-файла довольно просто. Прежде чем
приступить к написанию кода, поговорим о формировании ссылок для вызова
Данной функции. Вот пример таких ссылок:
index.php?p=file4&f=about
index.php?p=file&fHext/about
192
Часть IV. Разработка собственной CMS
В первом случае будет открыт файл about.html, который находится в одном
каталоге с файлом index.php, а во втором случае будет открыт файл
about.html из каталога text. Обратите внимание: расширение файла указывать
не нужно. Это сделано из соображений безопасности, чтобы злоумышленник
не смог с помощью данной функции открыть произвольный файл в системе.
Как злоумышленник может открыть любой файл? Сейчас поясню. Ваш
сценарий index.php находится на жестком диске Web-сервера. Пусть данный
файл находится в каталоге /var/www/clientOl/html. При неправильной
настройке Web-сервера (если у администратора, извините, кривые руки) наш
сценарий может получить доступ к файловой системе самого сервера.
Следовательно, доступ к файловой системе может получить и злоумышленник.
Стоит ему указать имя файла ../../../../etc/passwd, и он получит доступ к базе
данных учетных записей Web-сервера.
Чтобы защитить сервер, мы будем к имени файла добавлять \html\ В случае с
HTML-файлами это даже удобно, поскольку нам не нужно указывать
расширение файла, а только его имя.
$f[t] |
|
5th Фев 2011
|
Теги:
|