Книги наших сотрудников
 
Гостевая книга 

справочник функций

скачать учебник PHP

Форум PHP

Учебник по PHP 4

Сколько новых сайтов Вы делаете за год? результаты

1 сайт

2-3 сайта

не больше 10 сайтов

10-20 сайтов

Так много, что не могу сосчитать

Я вообще не делаю сайты

Оглавление

  1. Основы PHP
  2. Операторы языка PHP
  3. Строковые функции
  4. Массивы
  5. Функции
  6. Работа с файлами
  7. Регулярные выражения
  8. Сессии и cookies в PHP
  9. Работа с FTP
  10. Проверка данных
  11. Гостевая книга
  12. PHP и MySQL
Rambler's Top100
Яндекс цитирования
Rambler's Top100



Пишем гостевую книгу на PHP

Предыдущая Следующая

Пишем гостевую книгу на PHP (вариант на файлах)



Сейчас мы разработаем приложение "Гостевая книга на PHP".

Сообщения будут храниться в файлах, которые расположены в директории RECORDS (позже мы разработаем вариант гостевой книги, основанный на хранении сообщений в базе данных). Код размещен в двух файлах: index.php (отображение сообщений) и addrec.php (добавление сообщений, их проверка и запись в файл).

Итак, создайте файл addrec.php и в той же директории, в которой расположен этот файл создайте директорию RECORDS.

Сначала проверяем, ввел ли пользователь данные и правильно ли он их ввел:

<?
  $error = "";
  $action = $_POST["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($_POST["name"],0,32);
$name = htmlspecialchars(stripslashes($name)); // обрабатываем имя
$city = substr($_POST["city"],0,32);
$city = htmlspecialchars(stripslashes($city)); // обрабатываем город
$email = substr($_POST["email"],0,32);
$email = htmlspecialchars(stripslashes($email)); // обрабатываем e-mail
$url = substr($_POST["url"],0,36);
$url = htmlspecialchars(stripslashes($url)); // обрабатываем url-адрес
$msg = substr($_POST["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, форма для добавления сообщений должна иметь следующий вид:


Добавление записи

Имя:*
Город:
E-Mail:
URL:
Сообщение:*
* - поля, обязательные для заполнения

Листинг файла 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>

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

Если ввести сообщение, то оно отобразится следующим образом:


Предыдущие Добавить запись Следующие

  авторы  Нижний Новгород   http://www.softtime.ru 20-03-04 15 - 00

Мы рады приветствовать Вас!

admin: 



Предыдущие Добавить запись Следующие

При неправильном заполнении полей гостевой книги отобразится сообщение об ошибке:


Добавление записи

Во время добавления записи произошли следующие ошибки:

  • Вы не ввели сообщение
  • Вы не ввели имя
  • Неверно введен е-mail. Введите e-mail в виде: softtime@softtime.ru
Имя:*
Город:
E-Mail:
URL:
Сообщение:*
* - поля, обязательные для заполнения



Предыдущая Следующая

Если Вам нужна частная профессиональная консультация от авторов многих книг Кузнецова М.В. и Симдянова И.В., добро пожаловать в наш Консультационный Центр SoftTime.