« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
    Популярное
Свойства объекта Grid

О защите данных в файлах MDB СУРДБ Access.

Учебная программа AVERAGE

Функции Windows API для работы с посторонними окнами

Функция PaletteRGB

Часть VIII. Интерфейс

Программируем стартап Веб 2.0 на PHP

ГЛАВА 14 РНР и XML

Библиотека для создания мастера (wizard) под .NET Framework 2.0

Получение твердой копии рисунка


    Архив файлов



    Сообщества



    Документация

Статьи:: Интернет технологии :: PHP :: Гостевая книга на PHP


отправить ссылку другу версия для печати  Обсудить на форуме

Гостевая книга на PHP



Последнее время, все чаще и чаще в нашем форуме всплывают вопросы связанные с написанием гостевых книг.

Обычно гостевая книга состоит из двух частей: первая часть выводит записи, а вторая добавляет их.

В рассмотренном примере гостевой книги каждая запись хранится в отдельном файле. Имя файла создается автоматически, и состоит из двух частей - префикса и уникального идентификатора. Префикс нам необходим для того, чтобы отличить наш файл, от любого другого находящегося в том же каталоге (Честно говоря, по хорошему, в том же каталоге больше ничего не должно находиться), а уникальный идентификатор необходим для того, чтобы отличить одну запись от другой, и предоставить возможность сортировки записей.

В нашем случае префикс будет - "rec", а уникальный идентификатор мы получим с помощью функции time(). Функция time() возвращает текущее время, измеренное в числе секунд с эпохи Unix (1 Января 1970 00:00:00 GMT). Конечно, абсолютно уникальное число мы с помощью этой функции мы получить не сможем, но она нас устроит.

Сначала мы рассмотрим исходный текст модуля добавления записи в гостевую книгу.

Файл add.php:


В переменной $err мы будем хранить сообщения о произошедших ошибках. Если переменная пуста, то ошибок не происходило.

<?
$err="";

Если переменная $action не пуста, то значит происходит обращение при котором необходимо добавить запись, иначе необходимо просто вывести форму добавления записи. Переменная $action задается в форме с помощью тега <input type=hidden>

$action=$HTTP_POST_VARS["action"];
if (!empty($action)) {

Первым делом необходимо проверить введено ли сообщение и указан ли его автор.

	$name=trim($name);
	$msg=trim($msg);
	if (empty($msg)) {$action="";$err=$err."<LI>Вы не ввели сообщение\n";}
	if (empty($name)) {$action="";$err=$err."<LI>Вы не ввели имя\n";}

после этого мы должны осуществить преобразование введенных данных, проверить их длину. Слишком длинные записи могут сильно испортить внешний вид страницы. Необходимо убрать слеши "\" перед кавычками и заменить специальные символы HTML.

	$name=substr($HTTP_POST_VARS["name"],0,32);
	$name=htmlspecialchars(stripslashes($name));
	$email=substr($HTTP_POST_VARS["email"],0,64);
	$email=htmlspecialchars(stripslashes($email));
	$www=substr($HTTP_POST_VARS["www"],0,64);
	$www=htmlspecialchars(stripslashes($www));
	$city=substr($HTTP_POST_VARS["city"],0,64);
	$city=htmlspecialchars(stripslashes($city));
	$msg=substr($HTTP_POST_VARS["msg"],0,1024);
	$msg=htmlspecialchars(stripslashes($msg));

Если не произошло ошибок, то можно заменить специальные символы (такие как [b],[i],[u]) на их HTML аналоги (<b>, <i>, <u>)

	if (!empty($err)) {
		$msg=nl2br($msg);

		$msg=str_replace("[u]","<u>",$msg);
		$msg=str_replace("[i]","<i>",$msg);
		$msg=str_replace("[b]","<b>",$msg);
		$msg=str_replace("[/u]","</u>",$msg);
		$msg=str_replace("[/i]","</i>",$msg);
		$msg=str_replace("[/b]","</b>",$msg);

С помощью регулярного выражения заменим запись типа [url]http://www.codenet.ru/[/url] на <a href=http://www.codenet.ru/>http://www.codenet.ru/</a>

		$msg=eregi_replace("(.*)\\[url\\](.*)\\[/url\\](.*)",
               "\\1<a href=\\2>\\2</a>\\3",$msg);
		$msg=str_replace("\n"," ",$msg);
		$msg=str_replace("\r"," ",$msg);

Теперь данные готовы к сохранению в файл. Файлы с записями у нас будут храниться в каталоге ./records.

		$fp=fopen("records/rec.".time(),"w");
		fputs($fp,$name."\n");
		fputs($fp,$email."\n");
		fputs($fp,$city."\n");
		fputs($fp,$www."\n");
		fputs($fp,$msg."\n");
		fclose($fp);

 

Все действия произведены, и мы можем смело отправить пользователя на главную страницу гостевой книги, где он сможет увидеть свою запись.

		print "<HTML><HEAD>\n";
		print "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>\n";
		print "</HEAD></HTML>\n";
		}
	}

Если переменная $action пуста, то выводим форму добавления записи

if (empty($action)) {
?>
<HTML>
<HEAD>
<TITLE>Гостевая книга - добавить запись</TITLE>
</HEAD>
<BODY>
<?
if (!empty($errro)) {
	print "<P>Во время добавления записи произошли следующие ошибки: </P>\n";
	print "<UL>\n";
	print $err;
	print "</UL>\n";
	}
?>
<H3>Добавление записи.</H3>
<center>
<table width=1 border=0>
<form action=add.php method=post>
<input type=hidden name=action value=post>
<tr><td width=50%>Имя<font color=red><sup>*</sup></font>:</td>
<td align=right>
<input type=text name=name maxlength=32 value='<? echo $name; ?>'></td></tr>
<tr><td width=50%>E-Mail:</td>
<td align=right>
<input type=text name=email maxlength=64 value='<? echo $email; ?>'></td></tr>
<tr><td width=50%>Домашняя страница (WWW):</td>
<td align=right>
<input type=text name=www maxlength=64 value='<? echo $www; ?>'></td></tr>
<tr><td width=50%>Город:</td>
<td align=right>
<input type=text name=city maxlength=64 value='<? echo $city; ?>'></td></tr>
<tr><td colspan=2>Сообщение<font color=red><sup>*</sup></font>:<br>
<textarea cols=50 rows=8 name=msg><? echo $msg; ?></textarea></td></tr>
<tr><td colspan=2><input type=submit value='Добавить'></td></tr>
</form>
</table>
</center>
<P>Используйте размету для [b]<B>выделения текста</B>[/b]
и вставки [url]гиперссылок[/url] </P>
</BODY>
</HTML>
<?
	}
?>

Теперь рассмотрим модуль, ответственный за вывод записей гостевой книги.

Файл index.php:

<HTML>
<HEAD>
<TITLE>Гостевая книга</TITLE>
</HEAD>
<BODY>
<?

Первым делом, с помощью объекта dir, считаем содержимое каталога, в котором у нас хранятся записи. Все идентификаторы записей мы сохраним в массив, для его последующей сортировки.

$d = dir("records");
$i=0;
while($entry=$d->read()) {
	if (substr($entry,0,3)=="rec") {
		$names[$i]=substr($entry,4);
		$i++;
		}
	}
$d->close();

Сортируем массив

@rsort($names);
$count=$i;
$cnt=$count;
if (empty($start)) $start=0;
$start=intval($start);
if ($start<0) $start=0;

Выводим ссылки навигации по гостевой книги "Предыдущие" и "Следующие"

print "<center>";
if ($count>$start+10) $count=$start+10;
if ($start!=0)
	print "[ <A href=index.php?start=".($start-10).">Предыдущие</A> ]";
print " [ <a href=add.php>Добавить запись</A>] ";
if ($cnt>$start+10) {
	print "[ <A href=index.php?start=".($start+10).">Следующие</A> ]\n";
print "</center><br>";

Теперь самое главное - считываем нужные нам записи и выводим их.

for ($i=$start;$i<$count;$i++) {
	$entry=$names[$i];
	$data=file("records/rec.".$entry);
	$date=$entry;
	$name=trim($data[0]);
	$email=trim($data[1]);
	$city=trim($data[2]);
	$www=trim($data[3]);
	$question=trim($data[4]);
	$answer=trim($data[5]);

	print "<table border=0 cellspacing=0 cellpadding=2 width=100%>";
	print "<tr bgcolor=#F0F0F0><td> ";
	if (!empty($email)) print "<a href=mailto:$email>$name</A>\n";
		else print $name;
	if (!empty($www)) print "[<a href=$www>$www</A>]";
	print "</td><td align=right>".date("H-i-s <b>d-m-Y</b>",$date);
	print "</td></tr>\n<tr><td colspan=2>\n";
	print "<P>".$question."</P>\n";
	if (!empty($answer)) print "<P><B><I>$answer</I></B></P>\n";
	print "</td></tr></table>\n<br><br>\n";
	}

Опять выводим ссылки навигации по гостевой книги "Предыдущие" и "Следующие"

print "<center>";
if ($start!=0)
	print "[ <A href=index.php?start=".($start-10).">Предыдущие</A> ]";
print " [ <a href=add.php>Добавить запись</A>] ";
if ($cnt>$start+10)
	print "[ <A href=index.php?start=".($start+10).">Следующие</A> ]\n";
print "</center>";
?>
</BODY>
</HTML>

Ну вот вроде все. Скачать исходный текст в архиве можно здесь.




Рубрика: PHP




XML документация в C#.

XML в .NET

Сегодня речь пойдет об одной интересной и полезной возможности языка С#, которая поможет нам в документировании кода. Она называется «XML документация» или «Документирующие комментарии XML». Это такие специальные теги XML, которые содержаться в комментариях и описывают свойства или методы в конкретном файле. Так вот, есть по крайней мере три веских причины, почему всегда следует заполнять XML комментарии.


Подробнее... | Рубрика: XML в .NET | Добавлено: 08.10.2008

Курсоры в MySQL 5.

MySQL

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


Подробнее... | Рубрика: MySQL | Добавлено: 08.10.2008

Microsoft опубликовала подробности о сессиях Windows 7.

Мероприятия

В преддверии конференции WinHEC компания Microsoft опубликовала подробный список сессий, которые пройдут в рамках конференции. Довольно-таки большое количество выступлений будет посвящено Windows 7, что не может не радовать. Принимая во внимание тот факт, что PDC и WinHEC разделяют несколько дней, а пройдут они в одном здании - Los Angeles Convention Center, - можно несколько дней поиграть в прятки, спрятавшись в какой-нибудь комнате, но зато бесплатно посетить WinHEC.


Подробнее... | Рубрика: Мероприятия | Добавлено: 08.10.2008

Остальные статьи:

Microsoft делится подробностями о том, что будет после Windows
Тестируем новый javascript от нового браузера Google
MySQL Query Cache
Использование провайдеров компиляции в Asp.net
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новый вебсайт для программистов - StackOve...
Поиск кода Google /* что нового? */
10 jQuery скриптов для улучшения интерфейса
Генераторы отчетов FastReport 4 и QuickReport 5: версии 2008 года
День программиста — набор стерeотипов
Индусские програмисты
Вышел Django 1.0
Портативная версия Google Chrome Portable
Исходные коды .Net Frameword 3.5 SP1 для отладки в Visual Studio
Пишем правильный online WYSIWYG-редактор


Цитата дня (все,добавить):

Портал фрилансеров

    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование

Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 134
Пользователей: 0