PHP

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

Алгоритм работы простейшей гостевой книги: показываем посетителю все (или только последние) записи, если у посетителя возникает желание, он может сам что-нибудь написать. Сначала - код целиком:

А сейчас - как он работает. Первой в коде идет функция записи послания пользователя в файл, которой передаются значения имени писателя $d1 и текст его сообщения $d2. Создаем файл с именем, которое является на самом деле временем отправки послания и расширением .rec (папка records должна быть создана заранее, иначе - ошибка), потом вписываем в него имя и сообщение, добавляя к каждому перенос строки и закрываем файл:

function write($d1,$d2){
$f=fopen("records/".time().".rec","w");
fputs($f,$d1."\n");
fputs($f,$d2."\n");
fclose($f);
}

Теперь - основной блок скрипта. Получаем послание посетителя в виде имени и текста и, если они не пустые, записываем уже разобранной функцией в файл.

$name=trim($_POST['name']);
$text=trim($_POST['text']);
if($name & $text)write($name,$text);

Читаем содержимое директории records и, если нам попадаются файлы с расширением .rec, складываем их имена в массив $rec (в директории может находится и мусор - файлы с другими расширениями), закончив чтение директорию закрываем:

$dir = dir("records");
$i = 0;
while($file= $dir->read()){
if(stristr($file,".rec")){
$rec[$i]=$file;
$i++;}
}
$dir->close();

Сортируем файлы в массиве $rec в обратном порядке, устанавливаем счетчик в ноль и открываем цикл формирования вывода сообщений (условие: пока счетчик меньше числа элементов массива...):

@rsort($rec);
$i=0;
while($i<count($rec)):

Читаем из текущего файла имя автора и текст сообщения и помещаем их в массив $msg, функция file() считывает содержимое файла построчно в массив, каждый элемент которого соответствует прочитанной строке (вспомнили, зачем переносы ставили при записи?). В массиве $msg[0] - имя, $msg[1] - текст:

$msg=file("records/".$rec[$i]);

Дату отправки сообщения извлекаем из имени файла, это первые десять знаков до точки:

$data=substr($rec[$i],0,10);

Функция time(), которую мы использовали при формировании имени файла, выдает число секунд, прошедших с 0 часов 1 января 1970 года, например, для момента открытия этой страницы time() = 1603594429. Функция date() формирует в соответствии с форматом, заданным в скобках и кавычках, из числового значения времени привычную дату, вот так: сегодня date('d-m-Y') = 25-10-2020. По умолчанию, если ничего не указывать, берется текущее время. Составляем вывод сообщения в виде переменной $out, к которой за каждый проход цикла прибавляется строка:

$out=$out.$msg[0]."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".date('d-m-Y',$data)."<BR>".$msg[1]."<BR><BR>";
$i++;
endwhile;

На этом скрипт заканчивается и дальше HTML-часть с формой для ввода сообщения пользователя, оформленная в виде таблицы. Предшествующие записи выводятся на страницу включением фрагмента PHP в текст страницы. Скачиваем , распаковываем и сохраняем файл под именем gbook.php, создаем директорию records и проверяем в работе. Подключить гостевую книгу к сайту можно ссылкой в одном из меню. Оформление - на ваше усмотрение, это дело вкуса. Пусть нам пишут. Но выставлять напоказ мы будем не все. Для начала отфильтруем от мата.

Рейтинг@Mail.ru