Давайте немного напомню, что мы делали в предыдущей публикации. Создали форму добавления комментариев, создали таблицу в базе данных для хранения комментариев на сервере mysql, и начали создавать обработчик, для обработки отправляемого текста на сервер. Сегодня мы продолжим создавать комментарии и начнем с продолжения как я и обещал, обработаем полученные данные из формы и защитим наш сайт от мошенников и вредоносного по. И так продолжаем фильтровать. Дописываем данный код в файл comment.php
Код PHP
//Экранирование и преобразование опасных символов
if (!get_magic_quotes_gpc()){
$text = addslashes($text);
$author = addslashes($author);
$cod = addslashes($cod);
}
//current(split('@',$var));
$text = strip_tags($text);
$author = htmlspecialchars($author);
$cod = htmlspecialchars($cod);
На этом проверка завершена, далее создаем условие для добавления материала в базу данных. Мы проверяли каждое заполняемое поле несколькими способами, можно вспомнить здесь. И далее идет само условие, давайте напишем его так.
Код PHP
//Если нет ошибок добавляем в базу
if($error=="no"){
$text = current(split(']',$text));
// Добавляем переменную date и заносим в нее время на сервере
$date = date("d-m-Y в H:i");
$result = mysql_query("INSERT INTO comments (post,author,text,date,avatar) VALUES ('$id','$author','$text','$date','$guest')",$db);
//**** Выводим комментарий на странице
$ok="<div class="post_div"> <p class="post_comment_add">Комментарий от: <strong>".$author." </strong><br> Дата: <strong>".$date."</strong></p><div class="avatar_comments"><img src="/users/avatars/guest.png"></div><br><br><span class="arrow-up"></span><div class="comment_style"><p>".$text."</p></div></div>";
После всех проверок, скрипт выполнит, если все верно добавление записи в таблицу базы данных comments. Но давайте вспомним, мы писали проверки, и прописывали результат если неудачно. Давайте сейчас сделаем вывод ошибок без перезагрузки страницы. Сделаем это примерно так
Код PHP
//Помещаем результат в массив
$GLOBALS['_RESULT'] = array(
'error' => 'no',
'ok' => $ok
);
}
else {//если ошибки есть
$log = "<div><strong><font color="red"> Ошибка! </font></strong><br>".$log."</div>";
//Отправляем результат в массив
$GLOBALS['_RESULT'] = array(
'error' => 'yes',
'er_mess' => $log);
}
Именно здесь будет выводиться результат проверки. На этом файл comment.php практически готов. Для работы ajax как известно нужно прописать немалое количество кода, всяких проверок, запросов, перекодировок и так далее. Но мы живем в 21 веке и для нас изобретать велосипед нет смысла. Подобного рода решения уже давным-давно созданы для нас, и мы им воспользуемся. Я например, вот нашел для себя неплохое решение JsHttpRequest.
Далее давайте в файле comment.php подключим класс и сам файл
Код PHP
После
//флаг наличия ошибки
Вставить
require_once 'JsHttpRequest.php';// укажите путь к файлу
$JsHttpRequest =& new JsHttpRequest("utf-8"); //подключаем класс JsHttpRequest
Вот и разобрались с обработчиком, далее для вывода сообщений на ajax необходимо прописать javascript код для вывода сообщения об ошибке. Смотрим код ниже, как я его реализовал
Код JS
// JavaScript Document
function doLoad(value){
err=document.getElementById('cerror');
err.innerHTML = "<img src="images/upload.gif" height="8" width="32"><br><p>Секундочку добавляю комментарий...</p>";
// Create new JsHttpRequest object.
var req = new JsHttpRequest();
// Code automatically called on load finishing.
req.onreadystatechange = function() {
if (req.readyState == 4) {
if (req.responseJS.error == 'no') {
// Clear error information.
err.innerHTML = "";
// Write req.responseJS to page element (_req.responseJS become responseJS).
err.innerHTML = req.responseJS.ok;
form = document.getElementById('addcom');
// Очищаем поля при успешном добавлении
form.text.value = "";
//form.author.value = ""; // Поле автор оставил без очистки кому надо уберите косые черты
form.kapcha.value = "";
}
else
{
err.innerHTML = req.responseJS.er_mess;
}
}
}
// Prepare request object (automatically choose GET or POST).
req.open(null, 'comment.php', true);
// Send data to backend.
req.send( { q: value } );
}
Давайте поместим этот код в файл comment.js для удобства использования. Его обязательно поместите в папку, где у вас хранятся скрипты. или просто добавить данный код в общий файл скриптов с расширением js, затем не забываем подключить его между тегами head.
Вот теперь у нас все при проверке будет выводиться без перезагрузки страницы. Пока завершаем на этом этапе, в следующей публикации создадим капчу, проверочный код для защиты от спамеров. Есть вопросы, пожалуйста, в комментариях.