П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 176964 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 74125 раз(а).

Учебник HTML.
Просмотров 73308 раз(а).

Руководство по PHP5.
Просмотров 44185 раз(а).

Хостинг через призму DNS.
Просмотров 50869 раз(а).

Подборка текстов стандартных документов.
Просмотров 44357 раз(а).

Учебник PHP - Самоучитель
Просмотров 50609 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 51023 раз(а).

Внешние атаки...
Просмотров 41334 раз(а).

Учебник PHP.
Просмотров 36564 раз(а).

SSI в примерах.
Просмотров 27438 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь




Пишем гостевую книгу на 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, форма для добавления сообщений должна иметь следующий вид:


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

Имя:*
Город:
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:
Сообщение:*
* - поля, обязательные для заполнения

Назад | Содержание | Вперед



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru