Сегодня я попытаюсь рассказать вам о том, как написать гостевую книгу на PHP и MySQL. Ничего сложного в этом нет, да и возможности данной гостевой не очень большие: постраничный вывод записей, возможность удалять записи.
Допустим, что у вас уже есть PHP, MySQL и веб-сервер. Вы все установили и настроили.
Начнем с создания таблицы, в которой будут храниться данные нашей гостевой книги. Будем спрашивать у пользователя имя и комментарий. При желании пользователь сможет сообщить адреса электронной почты и домашней странички. Для администрирования книги нам понадобится еще одно поле, уникальное для каждой записи, — идентификатор. Ну и дата, конечно. В итоге получается такая таблица:
CREATE TABLE gb (
id int(10) unsigned NOT NULL auto_increment,
datetime datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
name varchar(100) NOT NULL,
email varchar(100),
www varchar(100),
message text NOT NULL,
PRIMARY KEY (id)
);
Таблица у нас есть. Теперь можно приступать к программированию.
Для начала определим константы, которые понадобятся нам в дальнейшем:
<?
/*
* defines.php -- константы
*/
// общие константы
define('PATH', '/gb/'); // путь к гостевой книге
define('RECSPERPAGE', 10); // количество записей на одной странице
// Параметры БД
define('DBHOST', 'localhost'); // имя хоста
define('DBUSER', 'root'); // имя пользователя
define('DBPASSWD', 'root'); // пароль
define('DBNAME', 'test'); // имя базы данных
?>
Напишем модуль для работы с СУБД MySQL. Я вынес все функции работающие с MySQL в отдельный модуль, чтобы их можно было легко переписать при смене СУБД. Думаю, комментариев в исходнике будет достаточно.
<?
/*
* bd.php -- работа с MySQL
*/
// подключение к СУБД и открытие базы данных
function db_connect($host, $user, $passwd, $dbname)
{
$link = @mysql_connect($host, $user, $passwd) or die('Не могу подключиться к серверу баз данных');
@mysql_select_db($dbname) or die('Не могу открыть базу данных «'.$dbname.'»');
return $link;
}
// запрос к БД
function db_query($query)
{
$result = @mysql_query($query) or die('Не могу сделать запрос к базе данных');
return $result;
}
// получение текущей записи результата в виде массива
function db_fetch_array($result)
{
return mysql_fetch_array($result);
}
// уничтожение результата
function db_free_result($result)
{
return mysql_free_result($result);
}
// получение числа записей (строк) в результате
function db_num_rows($result)
{
return mysql_num_rows($result);
}
?>
Для написания нормальной гостевой книги нам понадобятся еще две библиотеки. Первая — работа со строками:
$string = stripslashes($string); //восстановление кавычек после формы
$string = htmlspecialchars($string); //замена специальных символов их кодами
$string = str_replace("'", "'", $string); //замена апострофа его кодом (нужно для того, чтобы нормально работали запросы)
$string = trim($string); //снос ведущих пробелов
return $string;
}
// кастрирование строки
function strings_stripstring($text, $wrap, $length)
{
// разбиваем очень длинные слова (длиннее $wrap) на несколько маленьких
$wordlen = 0;
for($i = 0; $i < strlen($text); $i++)
{
$text2 .= $text[$i];
if($text[$i] != " ")
$wordlen++;
else
$wordlen = 0;
if($wordlen > $wrap)
{
$text2 .= " ";
$wordlen = 0;
}
}
$text = $text2;
// обрезаем строку до нужной длинны ($length)
$text = substr($text, 0, $length);
return $text;
}
// замена символов перевода строки и возвата каретки на <br>
function strings_addbreaks($string)
{
return str_replace("rn", "<br>", $string);
}
?>
Написание же второго модуля — аутентификации администратора — я оставляю вам в качестве домашнего задания. Есть достаточно много способов и их обсуждение — тема отдельной статьи. Я приведу лишь функцию-заглушку:
<?
/*
* auth.php -- аутентификация пользователей
*/
/*
* ВНИМАНИЕ! Ни в коем случае не используйте этот файл в реальных проектах.
* Сделайте проверку пароля или что-то в этом духе, иначе вашу гостевую просто
* сломают.
*/
// проверка: администратор или обычный пользователь
function auth_is_admin()
{
global $HTTP_GET_VARS;
return $HTTP_GET_VARS['admin'];
}
?>
Далее идет достаточно большой модуль, в котором содержится почти весь HTML код гостевой книги, — шаблон. В нем нет ничего сложного и его написание можно свалить на верстальщика, если у вас таковой имеется.