Как сделать комментарии на сайте php

Обновлено: 06.07.2024

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

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

Для полноценной работы скрипта, приведенного в данной теме, Вам понадобиться в MySQL создать две таблицы: comment и ocenka_comment.

В таблице comment будут храниться комментарии посетителей и вся необходимая информация о данных комментариях. В таблице ocenka_comment будут храниться последние оценки к комментариям, поставленные посетителями.

Структура обеих таблиц приведена на скриншотах ниже:

Таблица, содержащая комментарии посетителей и информацию о них


Таблица comment.

Таблица, содержащая последние оценки поставленные комментариям


Таблица ocenka_comment.

Для быстрого создания таблиц comment и ocenka_comment, воспользуйтесь следующими SQL запросами, приведенными ниже. Для создания таблицы comment используйте код:

CREATE TABLE IF NOT EXISTS ` comment ` (
` id ` int ( 9 ) unsigned NOT NULL auto_increment ,
` parent_id ` mediumint ( 9 ) unsigned NOT NULL default '0' ,
` first_parent ` mediumint ( 9 ) unsigned NOT NULL default '0' ,
` date ` int ( 10 ) unsigned NOT NULL ,
` theme_id ` smallint ( 6 ) unsigned NOT NULL ,
` login ` varchar ( 30 ) collate utf8_unicode_ci NOT NULL ,
` message ` varchar ( 9999 ) collate utf8_unicode_ci NOT NULL ,
` moderation ` tinyint ( 3 ) unsigned NOT NULL default '0' ,
` plus ` mediumint ( 9 ) NOT NULL default '0' ,
` minus ` mediumint ( 9 ) NOT NULL default '0' ,
PRIMARY KEY (` id `),
KEY ` theme_id ` (` theme_id `)
) ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci AUTO_INCREMENT = 1 ;

А для создания таблицы ocenka_comment воспользуйтесь кодом:

CREATE TABLE IF NOT EXISTS ` ocenka_comment ` (
` id ` int ( 10 ) unsigned NOT NULL auto_increment ,
` date ` int ( 10 ) unsigned NOT NULL ,
` comment_id ` mediumint ( 8 ) unsigned NOT NULL ,
` ip ` int ( 10 ) unsigned NOT NULL ,
` ocenka ` tinyint ( 3 ) unsigned NOT NULL ,
PRIMARY KEY (` id `)
) ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci AUTO_INCREMENT = 1 ;

В результате выполнения приведенных выше SQL запросов у Вас в MySQL должны появиться таблицы, как на скриншотах выше.

php
$time = time ();
if ( session_id ()== '' ) session_start ();

$db = mysqli_connect ( "localhost" , "Ваш_логин" , "Ваш_пароль" , "Имя_базы" ) or die();
$res = mysqli_query ( $db , "set names utf8" );

$mess_url = mysqli_real_escape_string ( $db , basename ( $_SERVER [ 'SCRIPT_FILENAME' ]));

//получаем id текущей темы
$res = mysqli_query ( $db , "SELECT id FROM таблица WHERE file_name='" . $mess_url . "'" );
$res = mysqli_fetch_array ( $res );
$theme_id = $res [ "id" ];

Не забудьте при подключении к Вашей MySQL базе в функции mysqli_connect() указать Ваши логин, пароль и имя БД.

Хотим обратить Ваше внимание на еще один важный момент - получение id идентификатора текущей темы. Т.к. нам неизвестно, какая структура БД у Вас на сайте, то Вам этот момент придется доделать самим, а именно получить id темы и поместить его в переменную $theme_id. В коде id мы получаем запросом после комментария "//получаем id текущей темы".

Далее, для нормального отображения комментариев и формы добавления комментариев к темам сайта нам понадобятся CSS стили. Для этого добавьте себе следующий CSS код:

Теперь, после того, как БД создана, и стили прописаны, можно приступать к коду, отвечающему за вывод и добавление комментариев.

В том месте странички, где должны выводиться оставленные посетителями комментарии, добавляем следующий PHP код:

php
function parents ( $up = 0 , $left = 0 ) < //Строим иерархическое дерево комментариев
global $tag , $mess_url ;

for ( $i = 0 ; $i count ( $tag [ $up ])- 1 ; $i ++) //Можно выделять цветом указанные логины
if ( $tag [ $up ][ $i ][ 2 ]== 'Admin' ) $tag [ $up ][ $i ][ 2 ]= ' Admin ' ;
if ( $tag [ $up ][ $i ][ 6 ]== 0 ) $tag [ $up ][ $i ][ 6 ]= $tag [ $up ][ $i ][ 0 ];
//Высчитываем рейтинг комментария
$sum = $tag [ $up ][ $i ][ 4 ]- $tag [ $up ][ $i ][ 5 ];

PHP скрипт "eComment", распространяется под слоганом "экологически чистое комментирование". Он не требует базы данных, сложной интеграции или отдельных страниц администрирования. Вся система состоит из трех файлов: исполняемого РНР .

SkyCom

Бесплатный скрипт комментариев, написанный на PHP. Использует базу данных MySQL. Код содержит комментарии и всегда можно внести нужные изменения.

Вашему вниманию скрипт комментарием на PHP с использованием Ajax, jQuery (отправка комментариев без перезагрузки страницы), для хранение комментариев используется база данных mySQL. Данный скрипт подойдет .

MPCS - Multi-Page Comment System

Код скрипта комментариев генерируется отдельно для каждой страницы и может быть использован бесконечно. В программу MPCS так же интегрирована защита от спаммеров – CAPTCHA, которая позволяет отсечь всех роботов.

Commentics

Commentics – это бесплатный скрипт комментариев для сайта, на языке PHP который включает в себя множество функций. Профессионально написанный скрипт открытого программного обеспечения.

Дальше | v.2.2 | Скачано: раз

GentleSource Comments

GentleSource Comments – это скрипт написанный на языке PHP, который может быть легко интегрирован в любой сайт. Скрипт Comments позволяет посетителям оставлять свои комментарии на определённой странице.

wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали, в том числе анонимно, 13 человек(а).

Комментарий – это вид примечания, которое может быть использовано для пояснения цели и значения фрагмента кода. Работая в PHP, у вас будет несколько вариантов написания комментариев, которые пошли от старых известных языков программирования: путем ввода однострочных или многострочных С-комментариев. Вы можете использовать комментарии, чтобы не дать фрагменту кода заработать или просто для ведения записей.

Изображение с названием 2165137 1

Однострочные комментарии для коротких записей. Если вам необходимо оставить короткий комментарий, воспользуйтесь кодом для однострочного комментария. Комментарий протянется лишь до конца линии или конца блока кода. Такие комментарии работают лишь внутри меток PHP и будут прочтены только, если поместить их в HTML. [1] X Источник информации

Изображение с названием 2165137 2


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

В этой заметке вы узнаете один из самый простых (но, субъективно, один из наиболее предпочтительных) способов добавить комментарии на сайт - простой пример для новичков + варианты для более продвинутых веб-мастеров.

Действительно, для чего изобретать велосипед и писать кучу кода, который в будущем еще придется поддерживать, фиксить и т.д., если есть куча готовых решений от сторонних сервисов (речь идет о социальных сетях + disqus)?

Но прежде чем перейдем к непосредственно внедрению, давайте рассмотрим преимущества/недостатки использования готовых решений. (Если о чем забыл - пишите в комментах - расширим список)

Преимущества сторонних решений:

  • Простота в реализации.
  • Защищенность от спама "с коробки" (в своем решении пришлось бы это дополнительно реализовать, так что, теоретически, связано с предыдущим пунктом).
  • В меньшей степени подвержено ошибкам, багам и т.д., так как сторонние решения проверили миллионы пользователей (опять связано с первым: вы тоже можете написать все без багов, но уйдет дополнительное время на отладку).
  • Как правило, сервисы предоставляют готовую админку, статистику, уведомления для админов, иногда модерацию, несколько админов, премодерацию и т.д., на реализацию чего у веб-мастера, особенно начинающего, могут уйти месяцы, если не годы.
  • Пользователю не нужно регистрироваться, вводить свое имя и т. д. - предполагается, что у него уже есть аккаунт в популярной соцсети.
  • Скорее всего, выдержит большую нагрузку из-за того, что соц. платформы изначально рассчитаны на большие нагрузки.

Недостатки:

  • Скудное или полное отсутствие возможности изменить внешний вид блока с комментариями.
  • Индексация в поисковых системах.

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

Но довольно теории, перейдем к практике.

1. Простейший вариант - добавить комментарии с использованием какой-то выбранной соцсети.

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

2) Добавляем в том месте, где хотим видеть виджет комментариев (например, после заметки, если речь идет о блоге):

И все! Менее, чем за минуту вы добавили себе комментарии, пользуясь всеми вышеупомянутыми преимуществами.

2. Добавить виджеты из нескольких сервисов. Например, как на этом ресурсе. Переключаются табами:


Добавляем в разметку (для корректной работы должен быть подключен twitter bootstrap!) в месте, где нужно вывести виджет комментариев:

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

Этого можно избежать, реализовав ленивую инициализацию виджетов комментариев. Сначала код целиком, потом разъяснение:

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

Для начала создаем маппинг типов виджетов комментариев, переменная initialized. Дальше, функция initComments(type) позволяет инициализировать виджет комментария, причем она ничего не делает, если он уже был инициализирован.

Дальше подписываемся на переключение табов и вызываем функцию инициализации выбранного типа комментариев.

И последний штрих - инициализируем дефолтный виджет комментариев, чтобы он отобразился сразу после загрузки страницы.

Готовый скрипт на js и coffeescript на gist. Пример работы - внизу (примеры кода взяты с этого сайта)

Роман Чернышов JavaScript / jQuery, PHP ajax, jquery, php, комментарии Комментариев 96 Дата 10 Фев


Представляю вашему вниманию скрипт комментарием на PHP с использованием Ajax, jQuery (отправка комментариев без перезагрузки страницы), для хранение комментариев используется база данных mySQL. Данный скрипт подойдет для большинства сайтов работающих на самописном движке или на любом другом: Joomla, WordPress и т.д.

Возможности скрипта:


Установка скрипта

1. Создайте таблицы в БД импортировав в неё install.sql (лежит в архиве со скриптом)
2. Настройте подключение к БД в файле config.php
3. Вставьте на страницу где будут выводится комментарии, в самое её начало: (Внимание! иклуд должен быть в самом начале кода страницу, перед ним не должно ничего выводиться в браузер, это важно)

4. Вставьте в то место страницы где требуется выводить комментарии, следуюущий код:

Для администрирования коммантариев добавте в URL адрес, переменнуй pass=12345 (пароль задается в config.php)
Примеры:

Настройки

На самом деле настроек очень много, скрипт можно подключить к сайту таким образом, что скрипт будет определять зарегестирован ли пользователь на сайте и его авторизацию, при этом комментировать можно будет без ввода имени и эл. почты. Данные будут браться из БД (из пользовательской таблицы движка).

Но в данном топике эту возможность я описывать не будут т.к. подключение к каждому движку будет иметь свои особенности.

Базовые настройки производятся в файле config.php

Обратите внимания на строку

Купить English версию: 99 руб.


Укажите в комментарии к платежу, ваш емаил, на него придет ссылка на скачивание скрипта!

Надеюсь данный скрипт комментариев пригодиться вам и будет служить верой и правдой. По всем вопросам прошу отписываться в комментариях.

В файле class.dbsql.php в строке 129 заменить UTF8 на cp1251

А также таблицам в БД (`rche_comments`, `rche_users`) и их полям присвоить кодировку cp1251_general_ci

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

UPD3:
1. Если у вас не работает капча проверьте наличие PHP модуля GD. картинка капчи генерируется средствами PHP.
2. Если не работает UPD1(кодировка win1251) возможно модуль PHP — iconv не подключен, также проверьте.

Проверяем наличие PHP модулей командой phpinfo();

UPD4:
Отпишусь сразу всем, в последней сборке от 08.11.2012 исправлены следующие баги:
— отображение картинки капчи при ответе на комментарий
— ошибка при проверке капчи на ответ

Расшифровка возможных ошибок:
ERR1: Ошибка: Имя должно состоять более чем из 3 символов
ERR2: Ошибка: E-Mail указан неверно
ERR3: Ошибка: Отсутствует текст комментария
ERR4: Ошибка: Не удается установить тип комментария. Попробуйте позже
ERR5: Ошибка: Не верно указан проверочный код с картинки.

Проблемы с работой в кодировке Windows-1251:
При работе скрипта в данной кодировке не всегда правильно распознается введенный текст скриптом JavaScript, это может проявляться в некоторых браузерах. Желательно использовать кодировка UTF-8

Читайте также: