Шаг 11 - Как работают гостевые книги ?

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

Общий метод, я думаю, прост и ясен всем. Вы создаете страничку с формой, которую будут заполнять ваши посетители и посылать вам. С этим думаю не будет возникать проблем. Проблемы возникнут, когда надо будет писать обрабатывающий скрипт. Я могу лишь дать некоторые советы для создания хороших гостевых книг.

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

Второе, что я считаю важным - это обеспечение настроек формата вывода данных. Очень важно для того, чтобы использовать один и тот же скрипт где угодно и когда угодно. Если Ваш скрипт "не мобилен", то Вам прийдется для добавления какой-нибудь новой информации переписывать скрипт.

Ну, а третье может всем и не нужно, хотя стоило бы обеспечить обработку сразу нескольких гостевых книг одним скриптом. Это позволит пользоваться гостевыми книгами не только Вам.

Если соблюдать такие вот простые правила можно создать не плохие скрипты, обеспеченные стойкостью и мобильностью.

О том как контролировать одновременные вызовы скрипта несколькими клиентами я писал раньше... Если Вы не помните, то "алгоритм" прост. При запуске скрипт создает какой-либо файл на время работы, затем его удаляет. Другой же запущенный скрипт контролирует появление этого файла, и если он есть, то ждет некоторое время пока он не исчезнет.

Как обеспечить настройки выводимой информации я могу лишь только посоветовать, потому как каждый может придумать разные способы и методы. Лично моя гостевая книга устроена в этом отношении просто. Есть файл, который полностью описывает структуру нового добавляемого сообщения. Т.е. это своего рода файл html, который скрипт попросту копирует в гостевую книгу, НО при этом подставляет какие-то данные в обозначенные места. Как их обозначить ? Это тоже Вам решать... Я обозначал просто, между двумя амперсандами & задается имя поля формы, значение которого надо записать в гостевую книгу. Таким образом изначально сам скрипт гостевой книги даже не знает какие поля формы ему сообщаются. Давайте приведу кусок кода, который реализует чтение файла с форматом и подставляет вместо полей их содержимое.

char parname[150];
char *par;
int parnamelen=0;
char charbuf;
int ampfound=0, dolfound=0;

if ( (f_form=fopen(guest_path,"rt")) != NULL )
{

 if ( (f_guest = fopen(guestbook,"at")) != NULL)
 {
   while (!feof(f_form))
   {
     fscanf(f_form,"%c",&charbuf);
     if ((ampfound==0)&&(dolfound==0))
      {
        if ((charbuf!='&') && (charbuf!='$'))
	{ 
	  fprintf(f_guest,"%c",charbuf);
	}
        else
	 {
           if (charbuf=='&') ampfound=1; else dolfound=1;
	   parnamelen=0;
	 };
      }
     else
      {
        if ((charbuf=='&') || (charbuf=='$'))
	 {
           if (parnamelen==0)
	   {
             if (charbuf=='&') fprintf(f_guest,"&");
	     else fprintf(f_guest,"$");
           }
           else
	    {
              parname[parnamelen]='\0';
              if (ampfound==1) par=getparam(buf,parname);
	      else par=getenv(parname);
	      fprintf(f_guest,"%s",par);
	    };
	   if (ampfound==1) ampfound=0; else dolfound=0;
	 }
	 else
	 {
           parname[parnamelen]=charbuf;
	   parnamelen++;
	 };
      };
  
   };
   fclose(f_guest);
 };
 
fclose(f_form);
};

Алгоритм прост, считываете посимвольно, если встречается амперсанд, то начинаете накапливать имя поля, которое необходимо вставить в гостевую книгу. Ну, а когда дойдете до второго амперсанда, то выводите содержимое этого параметра в файл гостевой книги. Забыл сказать, да Вы наверно это уже заметили, что я еще использую знак доллара, он служит для того чтобы выводить не содержимое формы, а переменные среды. Это очень полезно, если Вы хотите записывать в гостевую книгу какие-то данные о соединении, например, IP адрес клиента.

Ну, а третье условие "хорошей" гостевой книги - один скрипт на всех :), попробуйте реализовать сами, это не очень сложно... Создайте конфигурационный файл для гостевой книги, в котором Вы будете прописывать положение файлов других гостевых книг. Тут также надо будет позаботиться о выборе гостевой книги, т.е. в какую гостевую книгу будут записываться поступаемые данные. Я для этого рекомендую использовать метод GET, а сами данные будете посылать через POST.

Конечно тут я описал самые "зачатки" продвинутой гостевой книги, но у нас еще все впереди. Можно сделать автоматическое занесение в архив устаревших записей, затем если сообщений слишком много, то создавать перелистывающиеся страницы и еще много чего...


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Кузин Андрей - 16.02.2000