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

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

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

Друзья сайта

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

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

Гостевая книга шаг за шагом 1
В этой статье мы научимся создавать гостевую книгу на PHP. И хотя эта статья написана для новичков, но Вы должны обладать хотя бы азами программирования на PHP.

Итак, для начала давайте определимся, что мы будем писать. В итоге мы должны получить гостевую книгу со следующими свойствами:

* Посетитель обязательно должен ввести своё имя и сообщение, и по желанию свой e-mail и адрес домашней странички.
* Разбиение на страницы.
* Наша гостевая книга должна работать с register_globals = Off.
* Все записи хранятся в обычном текстовом файле (т.е. нам не потребуется база данных).
* Гостевая книга состоит из одного файла.

Примечание. Всё нижеследующее было протестировано на PHP 4.3.0.

С задачами вроде определились, теперь давайте разберёмся как у нас всё будет выгдядеть. Форма и записи будут выводится на одной странице. Наш файл будет называться gb.php. Напишем код формы. У меня получилось вот что:


<form action="gb.php" method="post">
<
table width="500" cellpadding="2"
cellspacing="0" style="border: 1px solid rgb(0, 75, 151);" bgcolor="#d7ecff">
<
tbody><tr>
<
td align="right">
*
Имя:
</
td>
<
td align="left">
<
input type="text" name="msg_from" maxlength="40" size="30">
</
td>
</
tr>
<
tr>
<
td align="right">
E-Mail:
</
td>
<
td align="left">
<
input type="text" name="msg_mail" maxlength="40" size="30">
</
td>
</
tr>
<
tr>
<
td align="right">
**
URL:
</
td>
<
td align="left">
<
input type="text" name="msg_url" maxlength="40" size="30">
</
td>
</
tr>
<
tr>
<
td align="right">
*
Сообщение:
</
td>
<
td align="left">
<
textarea cols="45" rows="7" name="msg_message"></textarea>
</
td>
</
tr>
<
tr>
<
td align="center" colspan="2">
<
input type="submit" name="msg_submit" value="Добавить">
<
input type="reset">
</
td>
</
tr>
<
tr>
<
td align="center" colspan="2">
*
Поля обязательные для заполнения<br>
**
url вводить без http://
</td>
</
tr>
</
tbody></table>
</
form>


Теперь разберёмся с основными настройками нашей гостевой книги:


//---------- Настройки GB ----------//
$file_gb = "c:/HTTP/CoderPRO/site/gb.dat"; // файл где хранятся записи GB
$max_rec = 128; // максимальное количество записей в файле
$rec_page = 6; // количество записей выводимых на одной странице
//----------------------------------//



Напишем код заголовка нашей страницы:


<html><head>
<
title>..:: Гостевая книга ::..</title>
<
meta http-equiv="Pragma" content="no-cache">
<
meta http-equiv="expires" content="0">
</
head>
<
body>
<
div align="center"><h1>Гостевая книга</h1></div>


Строчки с META нужны для того, чтобы наша страница не кэшировалась. Первая строчка говорит браузеру, что страницу кэшировать не надо, а вторая - если браузер не понимает первый параметр Pragma, что время хранения нашей страницы в кэше - 0 сек.

Теперь приступим собственно к программированию. Для начала напишем функцию проверки введённых данных:


// Проверка введённых данных //
function test() {
global
$HTTP_POST_VARS;

if (!isset(
$HTTP_POST_VARS['msg_from'], $HTTP_POST_VARS['msg_mail'],
$HTTP_POST_VARS['msg_url'], $HTTP_POST_VARS['msg_message'])) {
echo
"<p align="center">Ошибка при передачи параметров к скрипту!
Обратитесь к администратору сайта.</p>n"
;
return(
false);
}
if (
trim($HTTP_POST_VARS['msg_from'])=="") {
echo
"<p align="center">Вы не ввели своё имя. Повторите ввод.</p>n";
return(
false);
}
if (
trim($HTTP_POST_VARS['msg_message'])=="") {
echo
"<p align="center">Вы не ввели сообщение. Повторите ввод.</p>n";
return(
false);
}
return(
true);
}
// test()


$HTTP_POST_VARS - это массив содержащий все ключи и значения переданные методом POST (работает при register_globals = Off). Сначала в функции проверяется всё ли было передано, а затем были ли заполнены обязательные поля Имя и Сообщение. Конечно, можно ещё сделать проверку на корректность введённого e-mail и url и много чего ещё, но это уже если вам хочется, то делайте сами, а мы не будем на этом заморачиваться и пойдём дальше.

Рассмотрим как у нас будут хранится записи в файле. В одной строке файла - одна запись в следующем формате:

Имя|E-Mail|URL|Дата и время добавления|Сообщение

Перед добавлением записи мы должны немного подредактировать данные. Как можно заметить, для разделения частей записи мы используем знак |, значит наши данные не должны содержать этот знак - мы заменим его на аналог в html-коде: &brvbar;. Далее мы должны проверить длину сообщения, и если она больше некоторой величины (например более 1000 символов), то обрезать сообщение до нужной длины. Затем конвертируем все специальные символы в мнемоники HTML (функция htmlspecialchars). И наконец, заменим все переносы строк в сообщении на <br> и отформатируем данные в нужном нам формате для записи в файл. Конечно и здесь можно сделать ещё кучу всяких прибамбасов, но это мы оставим для самостоятельный работы и будем делать нашу гостевуху дальше. Итак строку для записи в файл мы сформировали и теперь её надо добавить в файл, при этом не привысив лимит количества записей в файле (вспомните настройки нашей страницы: $max_rec = 128;). Что-то я много пишу,а кода не видно: Вот вам наша функция добавления записи в файл:


// Функция добавления записи //
function add() {
global
$max_rec;
global
$file_gb;
global
$HTTP_POST_VARS;

$recs = @file($file_gb) or $recs = array();

$from = $HTTP_POST_VARS['msg_from'];
$mail = $HTTP_POST_VARS['msg_mail'];
$url = $HTTP_POST_VARS['msg_url'];
$message = $HTTP_POST_VARS['msg_message'];

$from = str_replace ("|", "&brvbar;", $from);
$mail = str_replace ("|","&brvbar;",$mail);
$url = str_replace ("|","&brvbar;",$url);
if (
strlen($message)>1000) $message=substr($message,0,1000);
$message = htmlspecialchars($message, ENT_QUOTES);
$message = str_replace("|","&brvbar;",$message);
$message = trim($message);
$message = ereg_replace ("
"
, "<br>", $message);

array_unshift ($recs,"$from|$mail|$url|".date("d M Y, H:i")."|$messagen");
if (
count($recs)>$max_rec) $recs=array_slice($recs,0,$max_rec);
$count = count($recs);
$f = fopen ($file_gb, "w");
for (
$i=0; $i<$count; $i++) {
fwrite($f,$recs[$i]);
}
fclose($f);
}
// add()

Категория: php | Добавил: freeone (14.06.2007)
Просмотров: 588 | Комментарии: 2 | Рейтинг: 0.0 |

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

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