Понедельник, 15.06.2026, 05:45
Приветствую Вас Гость | RSS
Поиск по каталогу
Главная страница | Каталог статей | Регистрация | Вход

Информационные технологии
Форма входа
Меню сайта

Категории каталога
php [246]
perl [1]
perl
ASP [1]
AJAX [0]

Друзья сайта

Наш опрос
Оцените мой сайт
Всего ответов: 69

Начало » Статьи » Web программирование » php

Пишем скрипт гостевой книги 1
В этой статье мы рассмотрим, как написать свою гостевую книгу. И так поставим цель: простейшую гостевую книгу на PHP с использованием базы данных MySQL. Наша гостевая не будет обременена красивым интерфейсом и защитой, главное, чтобы она работала. Приведенные здесь скрипты основаны на скриптах мой гостевой книги, но значительно упрощены для лучшего понимания принципа работы скриптов, а все остальное: форматирование текста, смайлы, скины и пр. можно легко добавить. Скачать готовые скрипты можно здесь.
Этап первый: планирование.

Для начала определимся с таблицей MySQL, в которой мы будем хранить сообщения нашей гостевой книги. Нам хватит одной таблицы. Основные параметры, которые должны быть в любой гостевой это имя, сообщение и дата, когда было оставлено сообщение. Но мы введем еще пару полей: адрес электронной почты, url сайта, и ICQ. Исходя из этого нам нужно составить SQL-запрос, создающий нужную нам таблицу. Он будет выглядеть так:


CREATE TABLE $table(
k_msg int primary key auto_increment,
guest varchar(20),
email varchar(40),
url varchar(60),
icq varchar(15),
time int,
msg mediumtext,
replay mediumtext


Что же мы сделали. Этот запрос создаст таблицу gbook и в ней будут определены следующие поля:

* k_msg - уникальный номер сообщения, первичный ключ таблицы, он нам понабиться, когда мы будем работать над панелью модерирования нашей гостевой.
* guest - имя гостя, 30 символов должно быть достаточно, но при желании можно и увеличить;
* email - адрес электронной почты гостя;
* url - URL-адрес сайта;
* icq - аська гостя;
* time - время, когда было оставлено сообщение;
* msg - собственно сообщение. Тип mediumtext позволяет хранить текст размером до 64Кб;
* replay - ответное сообщение от администратора.

Этап второй: скрипт установки

Рядовой пользователь может быть незнаком с PHP или MySQL, по этому мы не будем его обременять ручным созданием нужной нам таблицы и настройки нашей гостевой книги. Поэтому нам нужен инсталляционный скрипт который все сделает за него (и за нас тоже). Наш инсталляционный скрипт должен запросить у пользователя основные параметры у пользователя, подключиться к базе данных, создать таблицу и конфигурационный файл нашей гостевой книги.
install.php


<html>
<
head><title>Установка гостевой книги</title></head>
<
body>
<
h2>Установка гостевой книги</h2>
<
form action=<?=$SCRIPT_NAME?> method=post>
<table>
<tr><td align=right>Хост:</td>
<td align=left><input type=text name=host value=<?=$host?>></td></tr>
<tr><td align=right>Логин:</td>
<td align=left><input type=text name=login value=<?=$login?>></td></tr>
<tr><td align=right>Пароль:</td>
<td aling=left><input type=password name=password></td></tr>
<tr><td align=right>База:</td>
<td align=left><input type=text name=database value=<?=$database?>></td></tr>
<tr><td align=right>Таблица:</td>
<td align=left><input type=text name=table value=<?=$table?>></td></tr>
<tr><td align=right>Пароль админа:</td>
<td align=left><input type=password name=pass></td></tr>
</table>
<input type=submit name=go value="Install">
</form>
<?
function error()
// Выводим сообщение об ошибке и выходим
{
echo
"Error #".mysql_errno().": ".mysql_error();
exit;
}
if(isset(
$go)):// Если пользователь передал параметры
echo "Подключаемся к MySQL...<br>n";
mysql_connect($host,$login,$password) or error();
echo
"Выбираем базу данных $database...<br>n";
mysql_select_db($database) or error();
echo
"Удаляем таблицу (если существует) $table...<br>n";
mysql_query("DROP TABLE IF EXISTS $table") or error();
echo
"Создаем новую таблицу $table...<br>n";
mysql_query("
CREATE TABLE $table(
k_msg int primary key auto_increment,
guest varchar(20),
email varchar(40),
url varchar(60),
icq varchar(15),
time int,
msg mediumtext,
replay mediumtext
)"
) or error();
// Создадим файл конфигурации и запишем в него
// параметры подключения и пароль модератора гостевой
$f=fopen('gbook.conf','w');
flock($f,LOCK_EX); // Исключительная блокировка файла
fputs($f,"$hostn$loginn$passwordn$databasen$tablen$pass");
flock($f,LOCK_UN); // Снимаем блокировку с файла
fclose($f);
// Создадим файл .htaccess и укажем в нем
// что по умолчанию нужно открывать файл gbook.php
$f=fopen('.htaccess','w');
flock($f,LOCK_EX);
fputs($f,"DirectoryIndex gbook.phpn");
flock($f,LOCK_UN);
fclose($f);
// Установим права на чтение/запись
// только для владельца
exec('chmod 600 gbook.conf');
exec('chmod 600 install.php');
// Все сделано можно перейти на готовую гостевую
echo "<b>Инсталляция завершена</b><br>";
echo
"<a href=gbook.php>Гостевая книга</a>";
endif;
?>
</body>
</html>


Замечание. После создания конфигурационного файла мы выставляем на него права для чтения и записи только для хозяина. Это сделано для того, чтобы злоумышленник не смог прочесть наш файл конфигурации: в нем мы храним параметры подключения к базе данных и пароль модератора гостевой книги. Данная защита будет работать только на Unix/Linux хостинге. Для Windows-хостинга нужна другая защита, но приведенные команды не должны порождать ошибок.
Этап третий: отображение гостевой книги

Здесь мы рассмотрим скрипт, отображающий нашу гостевую книгу. Мы в нескольких скриптах будем выполнять ряд одинаковых действий и, чтобы не повторяться вынесем их в один файл gbook.lib.
gbook.lib


<?
function
htmltrim($str)
{
// Просто для краткости
return HtmlSpecialChars(trim($str));
}
function
error($msg)
// Выведем сообщение об ошибке и остановим скрипт
{
echo
"<b>Ошибка:</b> $msg";
exit;
}
function
my_error()
// Ошибка MySQL
{
echo
"<b>Ошибка MySQL</b> #".mysql_errno().": ".mysql_error()."</b><br>";
exit;
}
function
my_no_cache()
// Отключить кэширование страницы
{
Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
Header("Cache-Control: no-cache, must-revalidate");
Header("Pramga: no-cache");
Header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
}
function
my_redirect($url)
// Включить перенаправление
{
echo
'<html><head><meta http-equiv="refresh" content=1>
<script language=JavaScript>location="'
.$url.'"</script></head></html>';
}
$MY_MONTH_RU=array('января','февраля','марта','апреля','мая',
'июня','июля','августа','сентября','октября','ноября','декабря');
function
my_date($d)
// Форматирование даты
{
global
$MY_MONTH_RU;
return
date("j ",$d).$MY_MONTH_RU[date("m",$d)-1].date(" Y - H:i:s",$d);
}
function
gbook_init()
// Инициализация
{
// Объявим глобальные переменные
global $table, $admin;
// Прочитаем параметры подключения к БД
$f=@fopen('gbook.conf','r') or error("<b>Нет файла конфигурации</b>");
flock($f,LOCK_SH);
$host=trim(fgets($f));
$login=trim(fgets($f));
$password=trim(fgets($f));
$database=trim(fgets($f));
$table=trim(fgets($f));
$pass=trim(fgets($f));
flock($f,LOCK_UN);
fclose($f);
// Подключаемся к БД
mysql_connect($host,$login,$password) or my_error();
mysql_select_db($database) or my_error();
// Проверим пароль
if(isset($_GET['sid']) || isset($_POST['sid']) || isset($_COOKIE['sid']))
{
if(isset(
$_POST['sid'])) $sid=$_POST['sid'];
elseif(isset(
$_GET['sid'])) $sid=$_GET['sid'];
else
$sid=$_COOKIE['sid'];
@
SetCookie("sid",$sid,time()+60*15);
$admin=($sid===md5($pass.date('dmYH')));
}
}
my_no_cache();
?>
Категория: php | Добавил: freeone (14.06.2007)
Просмотров: 617 | Рейтинг: 0.0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:

Copyright Информационные технологии © 2006