БлогNot. Гостевая книга на PHP 7 + MySQLi

Гостевая книга на PHP 7 + MySQLi

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

В сети достаточно примеров гостевых на PHP, но большей частью они устарели или излишне громоздки. Простейший сервис такого рода, по-моему, должен:

  • работать на PHP7 с MySQLi вместо MySQL и в кодировке Юникода UTF-8;
  • иметь простой код, построенный на небольших файлах и общий небольшой объём (у меня это менее 20 Кб);
  • иметь очень простую регистрацию и авторизацию, но всё-таки их иметь для уменьшения спама;
  • с той же целью защищать формы регистрации и отправки сообщений простой капчей, мы будем подгружать её яваскриптом после загрузки страницы, что сведёт вероятность автоматического заспамливания почти до нуля;
  • делать вывод ленты сообщений "порциями" по убыванию времени, использовать минимум таблиц (у нас две - "Сообщения" и "Пользователи");
  • позволять иметь статические ссылки на сообщения;
  • иметь разумные ограничения на содержание сообщений (у нас это будет объём текста до 2 Кб, длина слова до 60 символов, защита от тегов и лишних переводов строки в сообщениях). При этом пользователь должен видеть, сколько символов он уже ввёл;
  • иметь одного администратора, который может удалять или править сообщения (например, приписать с новой строки "Ответ: "). Удалением автор и дата сообщения не меняются, а стираются только заголовок и содержимое (благодаря чему разбиение записей на страницы останется постоянным);
  • иметь инсталлятор, который сможет сработать и на реальном хостинге - к сожалению, пару операций пользователю всё равно придётся выполнить "вручную", так уж обычно настраивают хостинги из соображений безопасности;
  • иметь хотя бы простой поиск, потому что сложным можно нагрузить сервер и создать там "дыру", так что пусть авторизованные пользователи смогут поискать по одному введённому слову, а об остальном позаботятся "большие" поисковики;
  • не иметь собственного стилевого оформления, но быть легко встраиваемым на любой сайт.

Собственно, для всех этих целей подойдёт мой учебный пример на PHP, который я сюда и прикреплю. На идеальность он не претендует, так как писался где-то за две-три пары, но, как будто, всё нормально. Вот алгоритм работы с этим архивом.

 Скачать архив с гостевой книгой на PHP7 + MySQLi (13 Кб)

1. Развернуть файлы из архива у себя на компьютере, папка gb уже создана внутри архива.

2. Настройте скрипт правкой файла config.php, по сути, вам понадобится поменять только первые пять строк:

 define ('DB_HOST','localhost'); //хост
 define ('DB_LOGIN','root'); //логин
 define ('DB_PASS',''); //пароль
 define ('ADMIN_LOGIN','Admin'); //логин админа
 define ('ADMIN_PASS','123'); //пароль админа

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

В файлы head.php и foot.php вы можете, соответственно, поместить любую разметку HTML, образующую "шапку" и "подвал" гостевой, сейчас там просто синтаксически правильные начало и конец пустого документа HTML5.

Важно! Не правьте файлы .php стандартным "Блокнотом" Windows. Для шага 1 подойдёт Notepad++, а встроенные текстовый редактор и ftp-клиент файлового менеджера Far (ссылка та же) подойдут для всех действий из статьи, рекомендуется освоить этот бесплатный продукт.

2. Провайдер предоставил вам ссылку для доступа к удалённым файлам сайта по протоколу ftp, откройте главную папку своего сайта, она может называться htdocs, wwwroot или как-то ещё в зависимости от используемого сервера, и скопируйте туда папку gb со всеми файлами.

3. Провайдер предоставил также ссылку для доступа к утилите управления базами данных phpMyAdmin, на локальном хосте XAMPP эта ссылка выглядит как http://localhost/phpmyadmin/ , а на реальном сервере вместо localhost будет адрес вашего домена. Открываем phpmyadmin, жмём "Создать БД". В поле "имя базы данных" вводим guestbook , в списке кодировок выбираем utf8_general_ci , жмём ОК. Пустая база создана.

Если у вас уже была база, имя которой вы указали в настройке DB_NAME файла config.php, можно и просто выполнить к ней SQL-запрос вида

CREATE TABLE `messages` (id int PRIMARY KEY auto_increment, title varchar(80), message text, date int, login varchar(32));
INSERT INTO `messages` (`id`, `title`, `message`, `date`, `login`) VALUES
(1, 'Admin', 'Hello, world!', 0, '');
CREATE TABLE `users` (id int PRIMARY KEY auto_increment, login varchar(32), password varchar(32));
INSERT INTO `users` (`id`, `login`, `password`) VALUES
(1, 'Admin', '202cb962ac59075b964b07152d234b70');

Здесь в таблицу users заносится запись с логином Admin и паролем "123", зашифрованным алгоритмом md5.

Чтобы получить другой пароль администратора, достаточно выполнить на локальном хосте файл такого вида:

<?php
 echo md5('Привет');
?>

Конечно, файл должен быть создан в той же кодировке Юникода UTF-8, что и все остальные файлы.

Выведенную в браузер строку (в ней будет тоже 32 символа) достаточно вставить в апострофы вместо 202cb962ac59075b964b07152d234b70 , чтобы предустановленный пароль администратора стал Привет (кириллицей, с большой буквы).

В реальности, конечно же, выбирайте пароли потолковее, даты рождения, простые слова и т.п. очень ненадёжны.

4. Теперь вводим в браузере ссылку вида http://localhost/gb/ где вместо localhost опять может быть адрес вашего сайта, попадаем на страницу, где кроме вашей "шапки" и "подвала" есть только строчка

Выполните install.php из папки скрипта или удалите его, если Вы выполняли этот файл ранее. Обновить эту страницу

Кликнув по ссылке на имени файла install.php, выполните его, он откроет новую вкладку и предоставит кнопку для создания базы.

Я специально закомментировал в файле install.php строчки с автоматическим удалением и новым созданием базы, так как обычно это запрещено на хостингах.

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

После этого всё работает, вот вид "голого" скрипта на локальном хосте:

скрипт в работе на локальном хосте (фрагмент экрана)
скрипт в работе на локальном хосте (фрагмент экрана)

Ну а чтобы сослаться на гостевую, достаточно поставить там, где нужно, ссылку вида <a href="http://www.вашсайт.домен/gb/index.php">Гостевая</a>

Разумное дополнение скрипта - предусмотреть при регистрации нигде не публикуемое поле ввода "E-mail", а при авторизации - кнопку "Восстановить пароль", по которой зашифрованный пароль в базе "зануляется" и с помощью функции mail отправляется письмо со ссылкой на модуль восстановления пароля (предварительно можно попросить пользователя ввести указанный при регистрации адрес E-mail). Правда, это раза в полтора увеличит объём кода.

10.07.2020, 00:25 [2353 просмотра]


теги: учебное php программирование сервер mysql хостинг