главная :: основы PHP
Заголовок
Проект: каталог ссылок
Самый простой способ наполнить ваш сайт реальным содержанием — дать пользователю возможность сделать это за вас. Конечно, для ввода
данных удобнее всего воспользоваться формой HTML.
Введенную пользователем информацию необходимо обработать и сохранить. В проекте предыдущей главы было показано, как легко эта задача
решается при помощи РНР и текстового файла. Бесспорно, текстовые файлы хорошо подходят для хранения относительно маленьких и
простых фрагментов данных, но в полноценных web-приложениях информация обычно хранится в базах данных. В настоящем примере база
данных MySQL используется для хранения информации о web-сайтах. Для упрощения навигации сайты разделены на несколько категорий.
Пользователь может ввести информацию о сайте в форме HTML и отнести его к одной из стандартных категорий, определенных
администратором сайта. Кроме того, пользователь может загрузить индексную страницу и просмотреть список всех сайтов той или иной
категории, щелкнув на ее названии.
Прежде всего вы должны решить, какие сведения о сайтах будут храниться в базе данных SQL. Для простоты я ограничусь следующим
набором атрибутов: название, URL, категория, дата включения и описание. Таким образом, определение таблицы в MySQL выглядит
примерно так:
mysql>create table bookmarks ( category INT, site_name char(35), url char(50),
date_added date, description char(254) );
В определении таблицы bookmarks имеется пара моментов, заслуживающих внимания. Во-первых, информация о категории сайта почему-то
хранится в виде целого числа — но разве не правильнее было бы сделать названия категорий более содержательными и понятными для
пользователя? Не беспокойтесь, в ини-циализационном файле будет создан массив, связывающий целочисленные индексы с названиями
категорий. В будущем администратор может изменять и даже удалять отдельные категории. Хранение информации о категориях заметно
упрощает эту задачу. Кроме того, целочисленное поле обеспечивает экономию места на диске, поскольку название категории многократно
сохраняется в таблице. Другое обстоятельство, относящееся к структуре таблицы, — ограничение длины описания 254 символами. В
зависимости от этого объема описаний вместо типа char( ) можно воспользоваться типом medium или text. За дополнительной информацией о
типах полей обращайтесь к документации MySQL.
Следующим шагом в работе над этим приложением будет создание инициализа-ционного файла. Помимо глобальных переменных, в
инициализационном файле определяются две функции: add_bookmark( ) и view_bookmark( ). Функция add_bookmark( ) получает
пользовательский ввод из формы и включает его в базу. Функция view_bookmark( ) получает индекс категории, читает из базы данных все
записи, относящиеся к указанной категории, и отображает их в браузере. Инициализацион-ный файл приложения init.inc с комментариями
приведен в листинге 11.8.
Листинг 11.8. Инициализационный файл каталога ссылок (init.inc)
// Файл: init.inc
// Назначение: глобальные переменные и функции.
// используемые в проекте
// Стандартный заголовок страницы $title = "My Bookmark Repository":
// Цвет фона $bg_color = "white";
// Дата
$post_date = date("Ymd");
// Категории $categories = array(
"computers",
"entertainment",
"dining",
"lifestyle",
"government",
"travel");
// Данные сервера MySQL $host = "localhost"; $user = "root"; $pswd = "";
// Имя базы данных $database = "book";
// Имя таблицы $bookmark_table = "bookmarks";
// Цвет ячеек таблицы $cell_color = "#c0c0c0";
// Установить соединение с сервером MySQL
@mysql_pconnect($host, $user, $pswd) or die("Couldn't connect to MySQL server!");
// Выбрать базу данных
@mysql_select_db($database) or die("Couldn't select Sdatabase database!");
// Функция: add_bookmark( )
// Назначение: включение новой ссылки в таблицу bookmark.
function add_bookmark (Scategory, Ssitejname. $url, $description) {
GLOBAL $bookmark_table, $post_date;
$query = "INSERT INTO $bookmark_table
VALUES(\"$category\", \"$site_name\", \"$url\", \"$post_date\", \"$description\")";
$result = @mysql_query($query) or die("Couldn't insert bookmark information!");
} // add_bookmark <
// Функция: view_bookmark( )
// Назначение: выборка из таблицы bookmark всех ссылок,
// относящихся к категории $category.
function view_bookmark ($category) {
GLOBAL $bookmark_table, $cell_color, $categories;
$query = "SELECT site_name, url, DATE_FORMAT(date_added,'%m-%d-%Y') AS date_added, description
FROM $bookmark table WHERE category = $category ORDER BY datejdded DESC";
$result = @mysql_query($query);
print " ";
print "Category: $categories[$category] | ";
if (mysql_numrows($result) > 0) ;
while ($row = mysql_fetch_array($result)) ;
Posted: ".$row["date added"]." "
else
print "";
print "".$row["site_name"]."
print " | ";
print "";
print "http://".
$row["url"]." ";
print " | ";
print "";
print $row["description"]." ";
print " | ";
print "
| ";
endwhile;
print "There are currently no bookmarks falling under this category. Why don't you add one? | ";
endif:
print " Return to index
print " Add a bookmark ";
// view bookmark
?>
Следующая страница, add_bookmark.php (листинг 11.9), предназначена для ввода информации о новой ссылке, включаемой в базу данных. Для
обработки пользовательских данных вызывается функция add_bookmark( ).
Листинг 11.9. Программа add_bookmark.php
INCLUDE("init.inc");
?>
=$title:?>
if (!
$seenform) :
else :
add_bookmark($category, $site_name, $url, $description);
print "Your bookmark has been added to the repository.
Click here to return to the index.";
endif;
?>
При исходной загрузке страницы в браузере отображается форма (рис. 11.5).
После сохранения ссылки в базе программа выдает соответствующее сообщение и создает ссылку для перехода к домашней странице
приложения index.php (листинг 11.11).
Рис. 11.5. Форма, отображаемая страницей add_bookmark.php
Следующая страница, view_bookmark.php, просто вызывает функцию view_bookmark( ). Код этой страницы приведен в листинге 11.10.
Листинг 11.10. Программа view_bookmark.php
INCLUDE("Listing11-8.php"); ?>
=$title:?>
view_bookmark($category) :
?>
Если занести в категорию dining информацию о нескольких сайтах, страница view_bookmark.php будет выглядеть примерно так, как показано на
рис. 11.6.
Рис. 11.6. Выполнение страницы view_bookmark.php для категории dining
Остается лишь создать страницу, на которой пользователь выбирает ссылки из списка. Я назвал этот файл index.php (листинг 11.11).
Листинг 11.11. Программа index.php
INCLUDE("init.inc");
?>
Choose bookmark category to view:
// Перебрать категории и создать соответствующие ссылки
while (list($key, Svalue) = each(Scategories)) :
print "$value ";
endwhile;
?>
Add a new bookmark
Если оставить в массиве $categories значения, сохраненные в файле init.inc, в результате выполнения листинга 11.11 в браузер будет отправлен
код HTML, приведенный в листинге 11.12.
Листинг 11.12. Выходные данные, сгенерированные при выполнении index.php
Choose bookmark category to view:
computers
entertainment
dining
lifestyle
government
travel
Add a new bookmark
Если щелкнуть на любой ссылке из приведенного выше,фрагмента HTML, в браузере загружается файл view_bookmark.php, который вызывает
функцию view_bookmark( ) и передает ей значение переменной $category.
|