Поиск по сайту:
Главная
О проекте
Web-мастеру
HTML & JavaScript
SSI
Perl
PHP
XML & XSLT
Unix Shell
MySQL
Безопасность
Хостинг
Другое
Предмет поставка ворот на комплекс пожарное депо http://www.ziskon.ru .
Пишем гостевую книгу на PHP (вариант на файлах)
Сейчас мы разработаем приложение "Гостевая книга на PHP".
Сообщения будут храниться в файлах, которые расположены в директории RECORDS (позже мы разработаем вариант гостевой книги, основанный на хранении сообщений в базе данных). Код размещен в двух файлах: index.php (отображение сообщений) и addrec.php (добавление сообщений, их проверка и запись в файл).
Итак, создайте файл addrec.php и в той же директории, в которой расположен этот файл создайте директорию RECORDS .
Сначала проверяем, ввел ли пользователь данные и правильно ли он их ввел:
<?
$error = "";
$action = $HTTP_POST_VARS [ "action"];
if ( !empty ( $action ))
{
$name = trim ( $name );
$msg = trim ( $msg );
if ( empty ( $msg )) // если не введено сообщение
{
$action = "";
$error = $error ."<LI>Вы не ввели сообщение\n";
}
if ( empty ( $name )) // если не введено имя
{
$action = "";
$error = $error ."<LI>Вы не ввели имя\n";
}
if ( !empty ( $email ))
/* если введен e-mail, то проверяем с помощью регулярного выражения
правильность ввода */
{
if ( !preg_match ( "/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email ))
{
$action = "";
$error = $error ."<LI> Неверно введен е-mail.&nbsр Введите e-mail
в виде <i>softtime@softtime.ru</i> \n";
}
}
Теперь обрабатываем введенный пользователем текст функциями удаления HTML-тегов и обратных слешей:
$name = substr ( $HTTP_POST_VARS ["name"],0,32);
$name = htmlspecialchars ( stripslashes ( $name )); // обрабатываем имя
$city = substr ( $HTTP_POST_VARS ["city"],0,32);
$city = htmlspecialchars ( stripslashes ( $city )); // обрабатываем город
$email = substr ( $HTTP_POST_VARS ["email"],0,32);
$email = htmlspecialchars ( stripslashes ( $email )); // обрабатываем e-mail
$url = substr ( $HTTP_POST_VARS ["url"],0,36);
$url = htmlspecialchars ( stripslashes ( $url )); // обрабатываем url-адрес
$msg = substr ( $HTTP_POST_VARS ["msg"],0,1024);
$msg = htmlspecialchars ( stripslashes ( $msg )); // обрабатываем сообщение
В нашей гостевой книге поддерживается полужирное начертание, курсив, подчеркивание, верхние и нижние индексы. Для того, чтобы пользователь мог, к примеру, выделить блок текста в сообщении курсивом, его необходимо заключить в теги <i></i> и т.д. Поэтому для после того, как текст введен, нужно заменить эти искусственные теги на их реальное HTML-представление:
if ( empty ( $error )) // если ошибок нет, обрабатываем сообщение
{
$msg = nl2br ( $msg );
$msg = str_replace ( "[u]","<u>",$msg );
$msg = str_replace ( "[U]","<u>",$msg );
$msg = str_replace ( "[i]","<i>",$msg );
$msg = str_replace ( "[I]","<i>",$msg );
$msg = str_replace ( "[b]","<B>",$msg );
$msg = str_replace ( "[B]","<B>",$msg );
$msg = str_replace ( "[sub]","<SUB>",$msg );
$msg = str_replace ( "[SUB]","<SUB>",$msg );
$msg = str_replace ( "[sup]","<SUP>",$msg );
$msg = str_replace ( "[SUP]","<SUP>",$msg );
$msg = str_replace ( "[/u]","</u>",$msg );
$msg = str_replace ( "[/U]","</u>",$msg );
$msg = str_replace ( "[/i]","</i>",$msg );
$msg = str_replace ( "[/I]","</i>",$msg );
$msg = str_replace ( "[/b]","</B>",$msg );
$msg = str_replace ( "[/B]","</B>",$msg );
$msg = str_replace ( "[/SUB]","</SUB>",$msg );
$msg = str_replace ( "[/sub]","</SUB>",$msg );
$msg = str_replace ( "[/SUP]","</SUP>",$msg );
$msg = str_replace ( "[/sup]","</SUP>",$msg );
$msg = eregi_replace ( "(.*)\\[url\\](.*)\\[/url\\](.*)","\\1<a
href=\\2>\\2</a>\\3",$msg );
$msg = str_replace ( "\n"," ",$msg );
$msg = str_replace ( "\r"," ",$msg );
Открываем файл и добавляем в него, введенную пользователем информацию:
/* создаем файл с именем вида "rec.+время добавления сообщения" */
$file = fopen ( "records/rec.".time (),"w");
// записываем информацию в файл, по одной строчке на каждое поле
fputs ( $file ,$name ."\n");
fputs ( $file ,$city ."\n");
fputs ( $file ,$email ."\n");
fputs ( $file ,$url ."\n");
fputs ( $file ,$msg ."\n");
// закрываем файл
fclose ( $file );
Вызываем скрипт index.php , ответственный за отображение сообщений:
print "<HTML><HEAD>\n";
print "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>\n";
print "</HEAD></HTML>\n";
}
}
Добавляем код вывода сообщений об ошибках и HTML-код формы добавления сообщения:
if ( empty ( $action ))
{
<?
<HTML>
<HEAD>
<TITLE>Гостевая книга - добавление записи</TITLE>
</HEAD&tg;
<BODY>
<H3>
<? print "<center>"; ?>
<font color=#1E90FF>Добавление записи</font>
</H3>
<?
if ( !empty ( $error ))
/* если есть ошибки, выводим сообщение об ошибках */
{
print "<P><font color=green>Во время добавления записи произошли
следующие ошибки:</font></P>\n";
print "<UL>\n";
print $error ;
print "</UL>\n";
}
?>
<!-- пишем HTML-код формы добавления сообщений !-->
<center>
<table width=1 border=0>
<form action=addrec.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%>Город:</td>
<td align=right>
<input type=text name=city maxlength=32 value='<? echo $city; ; ?> '>
</td>
</tr>
<tr>
<td width=50%>E-Mail:</td>
<td align=right>
<input type=text name=email maxlength=32 value='<? echo $email ; ?> '>
</td>
</tr>
<tr>
<td width=50%>URL:</td>
<td align=right>
<input type=text name=url maxlength=36 value='<? echo $url ; ?> '>
</td>
</tr>
<tr>
<td colspan=2>Сообщение:<font color=red<sup>*</sup></font><br>
<textarea cols=50 rows=8 name=msg><? echo $url ; ?>
</textarea>
</td>
</tr>
<tr>
<td colspan=2><input type=submit value='Добавить'></td>
</tr>
</form>
<tr>
<td colspan=2><font color=red><sup>*</sup></font> - поля,
обязательные для заполнения
</td><td align=left>
</table>
</center>
</BODY>
</HTML>
<?
}
?>
После окончания работы с кодом, размещенным в файле addrec.php, форма для добавления сообщений должна иметь следующий вид:
Добавление записи
Листинг файла index.php , используемого для отображения сообщений:
<HTML>
<HEAD>
<TITLE>Гостевая книга</TITLE>
</HEAD>
<BODY>
<?
/* открываем директорию и считываем из нее файлы */
$dir_rec = dir ( "records");
$i = 0;
while ( $entry = $dir_rec ->read ())
{
if ( substr ( $entry ,0,3) =="rec")
{
$names [$i ]= substr ( $entry ,4);
$i ++;
}
}
$dir_rec ->close (); // закрываем директорию
@rsort ( $names ); // сортируем файлы
/* определяем очередность сообщений и выводим их */
$count = $i ;
$count1 = $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=addrec.php>Добавить запись</A>";
if ( $count1 > $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]);
$city = trim ( $data [1]);
$email = trim ( $data [2]);
$url = trim ( $data [3]);
$msg = trim ( $data [4]);
/* поле, в которое администратор может добавить ответ */
$answer = trim ( $data [5]);
print "<table border=0 cellspacing=0 cellpadding=2 width=100%>
<tr bgcolor=#F0F0F0><td>&nbsр;";
print "<b>$name </b>&nbsр;";
if ( !empty ( $city )) print "$city &nbsр";
if ( !empty ( $email )) print "<a href=mailto:$email ><i>$email </i></A>\n";
if ( !empty ( $url )) print "<a href=$url >$url </a>";
print "</td><td align=right>".date ( "<b>d-m-Y</b> H - i, $date ) ."
</td></tr>\n<tr><td colspan=2>\n";
print "<P>".$msg ."</P>\n";
if ( !empty ( $answer )) // если администратор что-то ответил
{
print "<P><font color=#1E90FF>admin:&nbsр$answer </font></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=addrec.php>Добавить запись</A>";
if ( $count1 > $start + 10)
{
print "<A href=index.php?start=".( $start + 10) .">Следующие</A> \n";
}
print "</center>";
?>
</BODY>
</HTML>
Гостевая книга написана.
Если ввести сообщение, то оно отобразится следующим образом:
Предыдущие
Добавить запись
Следующие
Предыдущие
Добавить запись
Следующие
При неправильном заполнении полей гостевой книги отобразится сообщение об ошибке:
Добавление записи
Во время добавления записи произошли следующие ошибки:
Вы не ввели сообщение
Вы не ввели имя
Неверно введен е-mail. Введите e-mail в виде: softtime@softtime.ru
Назад |
Содержание |
Вперед
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: