Сегодня хочу запустить ряд публикаций связанных с реализацией комментариев для сайта. Давайте немного опишу ряд действий которые хочу показать и реализовать вместе с вами. Создадим таблицу в базе данных для хранения комментариев, создадим форму добавления, капчу - защитный код для проверки, файл обработчик и плюс ковсему этому сделаем вывод или даже добавление комментариев на сайте с выводом на ajax. Реализацию вывода и добавления с проверкой на ajax можно просмотреть у меня на сайте. Зачем вообще нужны комментарии на сайте? В первую очередь - это взаимодействие сайта с пользователем, всегда сайт на котором есть система комментирования будет иметь большую популярность нежели без нее. Когда есть способ самовыажения - это придаст вашему сайту уникальности, динамичности и естественно популярности. На данном этапе развития интернет технологий можно конечно реализовать комментарии с помощью различных сервисов которые предлагают свой api код для реализации. Но вот только такие комментарии храняться не на вашем сайте а на стороннем ресурсе и не известно сколько они там будут храниться, комментарии индексируються поисковиками в пользу скрипта, а не вашего сайта. Вот я и решил создать ряд таких публикаций.
Если вы владеете хоть немного языками программирования, то вы с легкостью поймете, как это реализовать у себя на сайте. Я в свою очередь попытаюсь описать каждый шаг более подробно и понятно. На самом деле здесь ничего сложного нет и вы обязательно справитесь. Давайте начнем.
Шаг первый.
Мы определились зачем нам это надо и приступаем к разработке системы комментирования для любого сайта на php. Давайте создадим таблицу в базе данных и назовем ее конечно одноименно comments, чтобы было понятно что там у нас будет храниться. Разбираем поля таблици. Что нам необходимо добавить?
1 - поле id создадим конечно идентификатор,
2 - post в него запишим идентификатор поста,
3 - author здесь имя автора,
4 - text, сам текст комментария,
5 - date, здесь все понятно и так,
6 - up для системы голосования (+),
7 - down для ситсемы голосования (-),
8 - avatar путь к файлу с аватаркой,
9 - users_id здесь идентификатор пользователя если есть или комментарий от зарегистрированного пользователя.
Вот такую сложную не простую таблицу мы с вами создадим для хранения комментариев на сайте. Как создавать таблици в phpmyadmin я показывал и описывал как делать, но для надежности может кто не понял всей темы сразу я сейчас напишу запрос с phpmyadmina.
Код SQL
--
-- Структура таблицы `comments`
--
CREATE TABLE IF NOT EXISTS `comments` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`post` int(5) NOT NULL DEFAULT '0',
`author` varchar(100) NOT NULL DEFAULT '',
`text` text NOT NULL,
`date` varchar(32) NOT NULL,
`up` int(11) NOT NULL DEFAULT '0',
`down` int(11) NOT NULL DEFAULT '0',
`avatar` varchar(255) NOT NULL DEFAULT 'avatars/net-avatara.jpg',
`users_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=205 ;
Кто нехочет создавать сам можно просто скопировать код и вставить в sql запрос для необходимой таблици на сервере mysql.
Шаг второй
Далее создадим саму форму добавления комментариев для сайта, я сделаю вот такой пример, а вы можите поексперементировать придумать свой дизайн формы как угодно под свой дизайн сайта. Смотрим код
Форма комментирования для сайта
Код HTML
<div class="add_commentsform" id="comments_addform">
<p class="post_comment">Добавить Ваш комментарий:</p>
<form action="comment.php" method="post" name="addcom" id="addcom" enctype="multipart/form-data" onsubmit="return false">
<p><label>Ваше имя: </label><input name="author" size="40" maxlength="30" placeholder="Введите имя" type="text"></p>
<p><label>Текст комментария: <br> <textarea name="text" cols="62" rows="6" placeholder="Текст комментария..."></textarea></label></p><p>Введите 7 цифр с картинки<br></p><p>
<img src="kcaptcha?<?php echo session_name()?>=<?php echo session_id()?>" id="capcha-image" alt="Включите изображения в браузере" title="Робот не пройдет" border="0"><span style=" float: right; padding-right: 60%;">Если не виден <br> код пожалуйста<br> <a href="javascript:void(0);" onclick="document.getElementById('capcha-image').src='kcaptcha?<?php echo session_name()?>=<?php echo session_id()?>' + Math.random();">обновите</a></span><br>
<input style="margin-bottom:16px;" name="keystring" id="keystring" size="7" maxlength="7" type="text"></p>
<input name="id" value="<? echo $id; ?>" type="hidden">
<input name="guest" value="<? echo $guest; ?>" type="hidden">
<p> <input name="sub_com" value="Комментировать" onclick="doLoad(document.getElementById('addcom'))" type="submit"></p>
</form>
</div>
Результат работы даной формы можно посмотреть внизу страници, это форма с моего сайта. Давайте сейчас придадим стилей как у меня например смотрим css код ниже
Код CSS
.add_commentsform {
border: 1px dashed #ccc;
border-radius: 10px;
background: #ECF1F2;
display: block;
width: 70%;
padding-left: 30px;
}
Вот и все стили для формы комментирования пока хватит для примера. Двигаемся далее и разбираем по строчечкам код формы.
Обработчиком формы будет файл comment.php
Передаем методом post
Назначаем идентификатор форме для реализации проверки на правильность заполнения формы
Подключаем поле инпут для ввода имени
Поле текст для ввода сообщения
Картинка капчи
Поле ввода защитного кода
Ссылка на обновление картинки
Кнопка отправить или комментировать.
Здесь сложностей возникнуть не должно, а если не понятно просто скопируйте код формы и вставте себе на сайт.
Шаг третий
Теперь нам необходио создать обработчик comment.php. Как передавать и записывать данные с формы на сервер в базу данных mysql я уже объяснял, более подробно можно почитать кто не читал или напомнить. В файле comment.php нам необходимо обработать глобальные переменные которые полетели с формы и пишуться они так $_POST.
Код PHP
include ("подключим файл подключения к базе");
include('подключим файл для обработки капчи');
// Обязательно сделаем запрет на кэширование
header("Expires: Mon, 23 May 1995 02:00:00 GTM");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GTM");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
//******************************************
Далее будим выполнять проверку перед добавлением на сервер. Скрытые поля обработаем функцией php trim и далее смотрим сам код.
Код PHP
$log =="";
$error="no"; //флаг наличия ошибки
//Короткие имена переменных и обрезка пробелов img_title
$text = trim($_POST['text']);
$author = trim($_POST['author']);
$id = trim($_POST['id']);
$guest = trim($_POST['guest']);
//Проверка email адреса
if($author == ''){
$log .= "Пожалуйста, введите Ваше имя<br>";
$error = "yes";
}
//Проверка наличия введенного текста комментария
if (empty($text)){
$log .= "Необходимо указать текст сообщения!<br>";
$error = "yes";
}
else{
//Должнен быть хоть один символ на русском языке
$spam=1;
for($i=0;$i<strlen($text);$i++){ if((ord($text[$i])="">=192) && (ord($text[$i])<=255)){$spam=0;break;}
}
if ($spam == 1) {
$log .= "Ваше сообщение не содержит ни одной русской буквы.<br>";
$error = "yes";
}
}
session_start();
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] != $_POST['keystring'])
{ $log .= "Неверно введён проверочный код будьте внимательней!<br>";
$error = "yes";
}
//Проверка длины текста комментария
if(strlen($text)>2000){
$log .= "Слишком длинный текст, в вашем распоряжении 2000 символов!<br>";
$error = "yes";
}
//Проверка на наличие длинных слов
$mas = preg_split("/[\s]+/",$text);
foreach($mas as $index => $val){
if (strlen($val)>140) {
$log .= "Слишком длинные слова (более 140 символов) в тексте записи!<br>";
$error = "yes";
break;
}
}
</strlen($text);$i++){>
Наверное на этом сегодня публикацию завершу в следующей мы разберем обработку данных от кода, символов sql иньекций и запишим данные на сервер. Статьи очень длинные плохо читаються. Сам не люблю когда слишеом много всего на одной странице. Продолжение следует.