Пишем модуль Комментарии для нашей CMS

 

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

 

 

Что же нам понадобится? Два шаблона, один из них будет содержать html код формы, которую пользователь смог бы заполнить. Второй - визуальное оформление уже оставленных комментариев. Так же нам понадобится обработчик, который записывал бы посланный комментарий в базу данных, и само собой код, который будет выводить уже отправленные сообщения.. И того нам понадобится написать 3 файла, и подправить наш index.php

Начнем мы с создание базы данных для сообщений. Перед тем как вывешу sql запрос, хотел бы пояснить, как мы будем определять, для какого поста был написан комментарий.. В базе данных будет создан отдельный столбец, назовем его "blog" он будет содержать id поста, собственно при выводе статьи с id=1, на экран будут выводится все комментарии, в которых blog=1. Собственно я считаю, что Вы и сами догадывались, как выводятся комментарии, но все же я пояснил

Ну что ж, вот sql запрос таблицы с комментариями (Присутствуют 2 комментария для поста под индексом 1)

CREATE TABLE IF NOT EXISTS `comm` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`author` varchar(255) NOT NULL,
`text` text NOT NULL,
`date_comm` varchar(255) NOT NULL,
`blog` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;

INSERT INTO `comm` (`id`, `author`, `text`, `date_comm`, `blog`) VALUES
(1, 'Rio-Shaman', 'Тест сообщение 1', '22/10/2011 18:34', 1),
(2, 'Rio-Shaman', 'Тест сообщение 2', '22/10/2011 18:37', 1);

Теперь приступим к созданию шаблонов, наши комментарии будут выглядеть так же как и посты, это значит, что мы можем просто скопировать html код из шаблона text.html, который мы писали в статье "Пишем модуль 'Статьи' для нашей CMS" в наш новый файл comm.html. Естественно в коде нужно кое что подправить. Например нам не нужна кнопка "назад" и тег p который отвечал за вывод название статьи, вот готовый html код шаблона comm.html

<div class="div_news">
<p>[_text]</p>
</div>
<div class="div_footer">
Автор: [_author] | [_date_b]
</div>

Сохраняем файл в ту же папку templates

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

<p>Оставить комментарий</p>
<form action="index.php?blog=[_id]" method="post" name="form">
<input name="id_comm" type="hidden" value="[_id]">
<br>
<input style="width:400px;" name="author_comm" type="text" value="Автор*">
<br>
<textarea style="width:400px;" name="txt_comm" rows="10">Введите текст*</textarea>
<br><br><input type="submit" value="Оставить комментарий">
</form>

[_id] будет содержать id открытого пользователем поста. Я назвал этот шаблон comm_form.html и сохранил в папке templates.

Два файла из трех у нас есть. Приступим к написанию самого модуля. Суть его будет такова:

При открытия поста пользователем, index.php проверит, существует ли переменная $blog. Если да, то подключит модуль text.php. После того как готовый, с генерированный код, поступает в переменную $text, index.php подключает еще один модуль. Модуль комментариев проверит, есть ли в базе данных сообщения к открытому посту. Если есть, подключит шаблон (comm.html), запустит цикл, в котором заменит все код-слова на записи из базы данных. После цикла подключится наша форма(comm_form.html). Далее, результат работы нашего модуля просто приклеивается к результату работы модуля text.php, и выводится на экран.

Вот код модуля с комментариями

<?
function comm($blog)
{
$result_index = mysql_query("SELECT * FROM comm WHERE blog='$blog' ORDER BY id DESC");//Выводим из базы данных все записи где blog равен ID поста
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//Проверяем есть ли в базе данных записи
{//Если есть...
$sm_read = file("templates/comm.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
do//Цикл do while
{
$edd_tamp = $sm_read;//Так как на придется править шаблон,
//то лучше его сохранить в отдельную переменную, иначе нам придется
//пользоваться функцией file() чаще чем 1 раз, а это нагрузка на сервер

//Замены идентификаторов на переменные из базы данных
$edd_tamp = str_replace("[_text]",$myrow_index[text],$edd_tamp);//Текст
$edd_tamp = str_replace("[_author]",$myrow_index[author],$edd_tamp);//Автор статьи
$edd_tamp = str_replace("[_date_b]",$myrow_index[date_comm],$edd_tamp);//Дата размещения

$comm .= $edd_tamp;// Склеиваем весь с генерированный код в одну переменную
}
while($myrow_index = mysql_fetch_array($result_index));
}
else $comm = "<p align='center'>Комментариев нет, Вы будите первым =)</p>";//Если записей нет, то вывести это сообщение

$form = file("templates/comm_form.html");//подключаем шаблон с формой
$form = implode("",$form);//функция file() возвращаем массив, поэтому склеиваем его

$form = str_replace("[_id]",$blog,$form);//вклеиваем id поста в форму

$comm .= $form;

return $comm;//Выводим с генерированный html код
}
?>

Я назвал модуль comm.php и поместил в папку moduls.

Для вывода результата функции на экран необходимо подправить файл index.php, а именно вставить вот этот код:

//МОДУЛЬ КОММЕНТОВ
if($blog)
{
include("moduls/comm.php");
$comm = comm($blog);//Выводим результат функции в переменную
$txt .= $comm;
}
//МОДУЛЬ КОММЕНТОВ

после модуля статей, но перед строкой

include("templates/index.html");

Пришло время приступить к реализации отправки сообщений из, написанной нами, формы. Поясню как это все будет работать:

Отправляются сообщения методом post, а это означает, что на сервере будет создана глобальная переменная $_POST. В этой переменной будет находится вся введенная пользователем информация. Все что вводит пользователь, расценивается как потенциальная угроза для нашего блога, поэтому перед занесением информации в базу данных, ее стоит провести через некие фильтры. Базовое, что следует сделать, это заменить все теги (если они есть) с помощью функции htmlspecialchars(); и избавится от кавычек. После чего, введенную информацию можно сохранить в базе данных. Так же нам следует с генерировать дату отправки с помощью функции date();

Писать обработчик будем в файле comm.php перед функцией (function comm($blog){...}), приступим:

//--------------ОБРАБОТЧИК КОММЕТАРИЕВ
$date_day = date("d");//Определяем день
$date_month = date("m");//Определяем месяц
$date_year = date("Y");//Определяем год
$date_time = date("H:i");//Определяем часы и минуты
$date_comm = $date_day."/".$date_month."/".$date_year." ".$date_time;//Склеим все переменные в одну
//получим дату для записи в формате день/месяц/год часы:минуты

//Определяем посланные переменные из формы
if(isset($_POST['id_comm']))$id_comm = $_POST['id_comm'];
if(isset($_POST['txt_comm']))$txt_comm = $_POST['txt_comm'];
if(isset($_POST['author_comm']))$author_comm = $_POST['author_comm'];

if($id_comm & $txt_comm & $author_comm)//Если посланные переменные определены как существующие
{
//Переводим html код (если есть) в каракозябры =)
//Вообщем то тут несколько лишних строк, но у меня паранойя, поэтому я проверяю ВСЕ переменные
$id_comm = htmlspecialchars($id_comm);
$txt_comm = htmlspecialchars($txt_comm);
$author_comm = htmlspecialchars($author_comm);

//Избавляемся от кавычки
$id_comm = str_replace("'","&#039",$id_comm);
$txt_comm = str_replace("'","&#039",$txt_comm);
$author_comm = str_replace("'","&#039",$author_comm);

$txt_comm = str_replace("\n","<BR>",$txt_comm);//Заменяем переносы строки на тег <BR>

//Добавляем сообщение в базу данных
$result_add_comm = mysql_query ("INSERT INTO comm (author,text,date_comm,blog)
VALUES ('$author_comm','$txt_comm','$date_comm','$id_comm')");

header("location: index.php?blog=$blog");//Перенаправляем пользователя
exit;//обратно к форме с комментариями
}
//--------------ОБРАБОТЧИК КОММЕТАРИЕВ

Я писал этот модуль вместе со статьей, у меня все работает. Жду ваших комментариев, у меня все, удачи вам

Исходник
 

Возможно Вам будут интересны следующие заметки

Комментарии (60)

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
Гость Abikon, 23 Октября 2011 г. 20:30 пишет:
Гость
Здравствуйте. А для джумла подойдет?
Rio-Shaman, 23 Октября 2011 г. 21:30 пишет:
Автор
Здравствуйте Abikon. К сожалению этот модуль не для joomla!, а для cms блога, который я пишу с нуля, так что отвечая на Ваш вопрос, нет не подойдет =(
Гость Viktor, 04 Ноября 2011 г. 08:51 пишет:
Гость
Здравствуйте. А можно узнать Ваш адрес, что бы
Вы мне ответили на

mailto: viktorp284@gmail.com
Rio-Shaman, 04 Ноября 2011 г. 09:08 пишет:
Автор
Здравствуйте Viktor.
Если хотите связаться со мной, пишите через форму "Контакты".
Илья, 12 Февраля 2012 г. 12:48 пишет:
Читатель
А как сделать так, чтобы например, если не заполняем какое-нибудь поле, то над этим полем вылазила ошибка типа "Поле ### не заполнено"?

Пробовал вставлять слова - метки, не помогло.
Rio-Shaman, 12 Февраля 2012 г. 13:17 пишет:
Автор
Не все сразу =) Описанный Вами функционал рассмотрен в данном посте
http://rio-shaman.ru/index.php?blog=96
Ответ для пользователя: Илья
Илья, 12 Февраля 2012 г. 13:34 пишет:
Читатель
А, ну все. Неспеша будем добираться)))
Игорь, 11 Июня 2012 г. 21:06 пишет:
Читатель
Когда отправляешь коментарий выводится следующая ошибка:

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\adobe\www\moduls\text.php:1) in Z:\home\adobe\www\moduls\comm.php on line 33

Немогу разобраться в чем дело, проверял text.php там все по уроку, в comm.php тоже
Rio-Shaman, 11 Июня 2012 г. 21:17 пишет:
Автор
Скорее всего дело в кодировке. Файл text.php имеет кодировку utf8, а должна быть windows-1251. Читайте вот этот пост:
http://rio-shaman.ru/index.php?blog=133
Ответ для пользователя: Игорь
Игорь, 12 Июня 2012 г. 22:39 пишет:
Читатель
Спасибо добрый человек! Просто до этого не на одном читал, что utf-8 лучшая, поэтому писал в ней. Хотелось бы добавить, что статьи у вас отличные, а если исправить грамматические ошибки, то они будут идеальны! И еще))) Пишу это сообщение второй раз, т.к. первый раз не заполнил поле e-mail. Думаю, можно подправить форму комментариев!) И Еще раз спасибо!
Алексей, 03 Августа 2012 г. 10:13 пишет:
Гость
Вот у меня проблема: когда я наберу в форме текст моего комментария, введу имя автора, я нажимаю кнопку "отправить", то мне выдаётся сообщение: "Warning: mysql_fetch_array() expects parametr 1 to be resource, boolean given in Z:\home.........". А на обновившейся странице нет ни статьи, ни комментов. А когда перейдёшь на главную, и вернёшься к данной статье, то она снова на месте, и коммент оказывается добавленным...
Rio-Shaman, 03 Августа 2012 г. 18:53 пишет:
Автор
Вы что-то меняли в коде который я даю в постах?
Ответ для пользователя: Алексей
Алексей, 03 Августа 2012 г. 23:29 пишет:
Гость
Нет - я в точности следовал описанному в постах. Я продолжаю исследовать природу вышеописанного мною бага. Вот, что я обнаружил - если статья открыта, то в адресной строке адрес выглядит так: blog/index.php?blog=2 А когда я нажимаю "отправить", и меня выкидывает на ту же станицу, только с ошибкой, то её адрес выглядит уже так: blog/index.php?blog='2' либо так: blog/index.php?blog="2". То есть значение переменной блог уже не 2, а "2"... С чем это может быть связано?
Алексей, 03 Августа 2012 г. 23:45 пишет:
Гость
Фуф - всё исправил, извините за беспокойство.))) Только с третьего раза нашёл ошибку: вместо header("location: index.php?blog=$blog"), написал header("location: index.php?blog='$blog' ") Кстати, когда мы писали запросы к MySQL, то mysql_query("SELECT * FROM comm WHERE blog='$blog' ORDER BY id DESC") не вызывало неправильных толкований. а в случае с с хедером появились лишние кавычки. Где можно узнать, отчего так получается?
Ответ для пользователя: Алексей
Rio-Shaman, 04 Августа 2012 г. 00:34 пишет:
Автор
Тут дело в синтаксисе. Если в случае SQL запросов использование кавычек не мешает результату, то есть записи blog=$blog и blog='$blog' по сути одно и тоже, разница лишь в безопасности (вторая запись безопаснее). То в случае с функции header(), записи "...?blog=$blog" и "...?blog='$blog'" выдают совершенно разные результаты, так как это две разные записи.
Ответ для пользователя: Алексей
Сергей, 03 Октября 2012 г. 11:49 пишет:
Читатель
Не могу понять где ошибся, комментарии заносит в базу данных и добавляет, но не перенаправляет обратно и выдает ошибку
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\blog\index.php:1) in Z:\home\localhost\www\blog\moduls\comm.php on line 34
Rio-Shaman, 03 Октября 2012 г. 12:11 пишет:
Автор
Перед вызовом hrader() было что-то послано браузеру. Возможно Вы использовали оператор вывода (echo например). Так же очень может быть что из-за проблем с кодировкой (совершенно все файлы должны находится в кодировке windows-1251) в самом верху документа прописывается непонятная каракозябра. Эта каракозябра выводится до объявление функции header() тем самым вызывается ошибка.
Ответ для пользователя: Сергей
Сергей, 03 Октября 2012 г. 12:38 пишет:
Читатель
Делал в utf8, скорее всего из-за кракозябры, пока решил проблему через такой скрипт echo "<script> document.location.replace('index.php?blog=$blog'); </script>"; потом что-нибудь придумаю.

У вашего блога один из лучших дизайнов, которые я видел. В одном стиле но без перегруза графикой. Зря говорят, что черный цвет мрачный.
Ответ для пользователя: Rio-Shaman
Сергей, 04 Октября 2012 г. 00:50 пишет:
Читатель
Если кто-то все-таки решился выполнить уроки через utf-8 и возникла похожая проблема (Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\blog\index.php:1) in Z:\home\localhost\www\blog\moduls\comm.php on line 34) то ошибку можно исправить убрав
Unicode Signature (BOM). Если я правильно понял образуется символ, который отсылается в браузер, но его не видно.

В разных редакторах снимается по-разному. В дримвьюере например:
изменить-свойства страницы-название\кодировка - убрать флажок Unicode Signature (BOM). Так перезаписать все файлы.
Ответ для пользователя: Сергей
Сергей, 09 Октября 2012 г. 21:12 пишет:
Читатель
А можно как-нибудь сделать чтобы все комментарии выводились в отдельный div, если я правильно понял они выводятся сразу за текстом статьи
Rio-Shaman, 09 Октября 2012 г. 21:38 пишет:
Автор
Вообще нет, но если Вам так нужно то можно в подключение модуля модуля комментариев обвернуть переменную $comm нужным Вам тегом.
Ответ для пользователя: Сергей
Сергей, 09 Октября 2012 г. 22:26 пишет:
Читатель
к сожалению по определенным причинам мне этот вариант не подходит, а если переменную $comm вывести в основной шаблон и обернуть тэгом?
Ответ для пользователя: Rio-Shaman
Runetka, 17 Января 2013 г. 22:16 пишет:
Гость
Спасибо, в деле это очень пригодится)
dlegame, 15 Июня 2013 г. 18:33 пишет:
Читатель
Уважаемый Алексей!
хотел бы сделать на сайте комментарии от авторизованных пользователей.
и есть предложение интегрировать авторизацию от ulogin.ru
ну чтобы в новостях могли комментировать пользователи авторизовавшиеся через ulogin.ru
Идею взял из Russeller там так и сделано)
Старый Дед, 03 Августа 2013 г. 15:25 пишет:
Читатель
Хотел в шаблоне comm.html, сделать заголовок:
<p>Комментарии к этой статье:</p>
[_divmenu]
...
[_divmenu]
Но получается, что этому мешает вывод древовидных комментариев.
Как выйти из положения?
Алексей, 05 Августа 2013 г. 10:14 пишет:
Автор
Попробуйте внедрить Ваш текст в шаблон text.html
Ответ для пользователя: Старый Дед
САН34, 18 Октября 2013 г. 09:30 пишет:
Гость
Вся процедура проходит, комменты выводятся, но в базу записывается только дата и id статьи, поля автора и текст не доходят до базы, php код не правил, взял как в статье. В чем может быть проблема?
Алексей, 18 Октября 2013 г. 10:22 пишет:
Автор
php не правили, а форму правили?
Могу для начала посоветовать посмотреть есть ли какой либо текст в переменных $author_comm, $txt_comm, $date_comm, $id_comm
Для этого перед
    //Добавляем сообщение в базу данных
    $result_add_comm = mysql_query ("INSERT INTO comm (author,text,date_comm,blog) 
    VALUES ('$author_comm','$txt_comm','$date_comm','$id_comm')");
Пропишите вот такой код:
echo 'Автор - '.$author_comm.'<br>';
echo 'Текст - '.$txt_comm.'<br>';
echo 'Дата - '.$date_comm.'<br>';
echo 'id - '.$id_comm.'<br>';
Ответ для пользователя: САН34
САН34, 18 Октября 2013 г. 11:13 пишет:
Гость
С кодировкой что-то похоже, в латинице нормально коменты добавляются. Все файлы стоят к кодировке ANSI, база cp1251.
САН34, 18 Октября 2013 г. 11:16 пишет:
Гость
Переменные обработчик получает только в латинице, кириллические режет.
САН34, 18 Октября 2013 г. 11:22 пишет:
Гость
//$txt_comm = htmlspecialchars($txt_comm);
//$author_comm = htmlspecialchars($author_comm);
Закомментил в обработчике обрезку html кода - заработало. Похоже каким-то загадочным образом он воспринимает кириллицу как теги?
Алексей, 18 Октября 2013 г. 11:32 пишет:
Автор
Похоже каким-то загадочным образом он воспринимает кириллицу как теги?
У Вас какая версия php?
Ответ для пользователя: САН34
САН34, 18 Октября 2013 г. 12:47 пишет:
Гость
PHP/5.4.4-14
Алексей, 18 Октября 2013 г. 13:05 пишет:
Автор
в php 5.4 у функции htmlspecialchars() кодировка по умолчанию стоит УТФ 8. Попробуйте использовать данную функцию вот так:
$txt_comm       = htmlspecialchars($txt_comm, ENT_COMPAT, 'cp1251');
$author_comm    = htmlspecialchars($author_comm, ENT_COMPAT, 'cp1251');
Ответ для пользователя: САН34
САН34, 18 Октября 2013 г. 13:50 пишет:
Гость
Спасибо, помогло.
Андрей В., 02 Декабря 2013 г. 16:15 пишет:
Гость
Алексей, здравствуйте!

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

В этой статье впервые встретил препятствие. Вопрос уже дважды задавали, но ответы мне не помогли. Код для первого раза я взял Ваш с той разницей, что у меня все шаблоны в папке "templates" лежат с расширением .php, мне так привычней, а так же все файлы имеют расширения utf-8 (index.php - utf-8, остальные без BOM).

При создании нового комментария выскакивает сообщение о том, что заголовки уже отправлены
(Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\cm\index.php:1) in Z:\home\localhost\www\cm\moduls\comm.php on line 34)
и ничего не могу с этим поделать.

Подскажите, пожалуйста. как ещё можно реализовать перезагрузку страницы после добавления комментария?
Алексей, 02 Декабря 2013 г. 16:49 пишет:
Автор
Здравствуйте. Вы должны знать, что для функции header() отправкой заголовков в браузер является не только операторы вывода (echo, print, var_dump, и др.) но и вот такая структура кода:
---Начало документа----

<?php
код php
?>

<?php
еще какой-то код
?>
---Конец документа----
Как видите перед началом документа и открытым тегом <?php есть отступ. Он является, для функции header() , посылкой заголовков в браузер. Так же такой отступ есть между первым закрытым тегом ?> и вторым открытым тегом <?php.
Очень часто случается так, что у читателей проблема именно в этом.
Ну бывают случаи когда проблемой является конфликт двух кодировок (utf-8 и cp1251).
p.s.: Кстати, если я не ошибаюсь, файлы с utf-8 с BOM тоже могут вызывать данную ошибку
Ответ для пользователя: Андрей В.
Павел, 18 Февраля 2014 г. 22:04 пишет:
Гость
Алексей, здравствуйте. При создании таблицы comm у вас было пять полей. Далее в обработчике комментариев вы приводите код:
$result_add_comm=mysql_query("INSERT INTO comm(author,text,date_comm,blog)VALUES('$author_comm','$txt_comm','$date_comm','$id_comm')");
А куда делось поле id и зачем нужна переменная $result_add_comm. Эти вопросы задаю в связи с тем, что у меня комментарии в базу данных не заносятся почему-то.
Алексей, 19 Февраля 2014 г. 10:38 пишет:
Автор
Поле ID является авто инкрементным (AUTO_INCREMENT). Его заполняет сам mysql сервер.
Эти вопросы задаю в связи с тем, что у меня комментарии в базу данных не заносятся почему-то.
Могу посоветовать проверить все приходящие переменные, а именно:
- $author_comm
- $txt_comm
- $date_comm
- $id_comm
На наличие каких либо значений в них.
Проверить можно с помощью оператора echo
Ответ для пользователя: Павел
alexeymeek, 13 Мая 2014 г. 06:00 пишет:
Гость
...до этого шло всё нормально. После установки модуля комментариев (при добавлении комментария) система сообщает (Warning: Cannot modify header information - headers already sent by (output started at Z:\home\наш сайт\www\index.php:1) in Z:\home\наш сайт\www\moduls\comm.php on line 37). В строке 37 файла comm.php (на которую ругается система), вот такое содержание :
    header("location: index.php?blog=$blog");//Перенаправляем пользователя
    exit;//обратно к форме с комментариями	
alexeymeek, 13 Мая 2014 г. 06:03 пишет:
Гость
PS. ...однако комментарий добавился, нет перехода (после добавления комента) на страницу статьи...
Ответ для пользователя: alexeymeek
alexeymeek, 13 Мая 2014 г. 06:06 пишет:
Гость
...вернее не на страницу статьи, а к форме с комментариями
Ответ для пользователя: alexeymeek
alexeymeek, 13 Мая 2014 г. 07:07 пишет:
Гость
... ни чего не помогает (ни кодировка. ни отступы в документе), после добавления комента не перезагружает страницу ... везде искал уроки по данной теме, но везде коммерческие варианты, и вот казалось бы нашёл хороший мануал с подробным описанием и комментариями и пошаговой логикой. Но видимо не судьба :( и этот блог долго не продержался
alexeymeek, 13 Мая 2014 г. 07:12 пишет:
Гость
жаль что уроки так быстро закончились (ещё не успев начаться)! Иду дальше в Google, может найду более подробное и качественное описание создания блога.
Алексей, 13 Мая 2014 г. 08:40 пишет:
Автор
Данная ошибка появляется только в том случае, если браузеру уже было что то отправленно... хеадеру пофиг пробел это или еще чего...
Ответ для пользователя: alexeymeek
alexeymeek, 13 Мая 2014 г. 16:27 пишет:
Гость
...пока не нашёл что-же все таки отправлено уже браузеру до странички добавления комента???
Ответ для пользователя: Алексей
Алексей, 14 Мая 2014 г. 10:22 пишет:
Автор
Вы пробовали ставить исходники?
Ответ для пользователя: alexeymeek
Павел, 25 Августа 2014 г. 22:49 пишет:
Гость
Алексей, здраствуйте. У меня почему-то комментарий в шаблон comm.html выводится в одну строку, т.е. выходит за рамки шаблона комментариев и даже за границы шаблона index.html. Не пойму в чем дело.
Алексей, 01 Сентября 2014 г. 16:22 пишет:
Автор
Вы случайно написали не одно огромное слово в комментарии (ну я имею ввиду символы без пробелов)
Ответ для пользователя: Павел
Павел, 09 Сентября 2014 г. 21:39 пишет:
Гость
Да,Алексей, написал одно огромное слово,без пробелов. В двух словах можете оъяснить: почему такое получается.
Виктор, 28 Марта 2015 г. 04:22 пишет:
Гость
Доброго времени суток.
Сперва позвольте поблагодарить Вас за ваши статьи, очень полезны для начинающих, и разрешите вопрос:
В обработчике в файле comm.php идет защита с очисткой комментария от тегов через функцию htmlspecialchars, то есть преобразование в символы. А потом дополнительно
//Избавляемся от кавычки
$id_comm = str_replace("'","&#039",$id_comm);

Но у функции htmlspecialchars, по мануалу, есть параметр ENT_QUOTES который как раз преобразует как двойные, так и одинарные кавычки. Скажите, почему Вы не используете его, а пишите дополнительную замену через функцию str_replace?
Ответ для пользователя: Павел
Алексей, 28 Марта 2015 г. 12:28 пишет:
Автор
Молодой был, неопытный...
На самом деле от кавычек лучше не избавляться а экранировать спецсимволом.
Ответ для пользователя: Виктор
Виктор, 28 Марта 2015 г. 15:59 пишет:
Гость
Благодарю за ответ.
Если не трудно, объясните, пожалуйста, почему кавычки лучше экранировать? Ведь в тексте статьи они не нужны для функционала никак.
Алексей, 29 Марта 2015 г. 12:03 пишет:
Автор
Чем меньше вмешательство в целостность текста, тем лучше. Экранирование (обратный слэш "\") после записи в БД опускается, в итоге мы получаем ровно такой же текст который писали (без всяких изменений)
Ответ для пользователя: Виктор
Ilya, 09 Августа 2016 г. 10:41 пишет:
Читатель
Здравствуйте! По вашему способу делаю свой интернет-портал, многие модули допиливал сам, но вот не могу сделать так, что бы было написано в обычном комментарии: "Написал/а и т.п.", а в комментарии-ответе так: "Ответил Н-ному человеку", и чтобы ответ на другой коомент был типа:
"коммент на который отвечает"
А тут сам коммент
Помогите! :)
Алексей, 09 Августа 2016 г. 11:16 пишет:
Автор
Доброго времени суток.
Вам необходимо создать дополнительную колонку в БД а которой хранить id комментария на который делается ответ. Если эта колонка содержит ноль или null (это зависит от того как Вы предполагаете хранить данные) то этот комментарий - обычный. Если в ней (в колонке) содержится id комментария то это ответ. По этому id Вы можете получить и сам комментарий и имя автора который его написал.
Ответ для пользователя: Ilya
Эдуард, 22 Августа 2016 г. 19:16 пишет:
Гость
Спасибо за проделанную работу.
Алексей, 14 Января 2017 г. 21:25 пишет:
Гость
А у меня вопрос по поводу дизайна: Как мне разметить форму для заполнения над самими комментариями?
Алексей, 15 Января 2017 г. 10:52 пишет:
Автор
Насколько я помню (честно говоря я уже плохо что помню), нужно в модуле moduls/comm.php заменить строку
$comm .= $form;
на вот такую
$comm = $form . $comm;
в этом случае с начало подключится форма а потом комментарии.
Ответ для пользователя: Алексей
Алексей, 15 Января 2017 г. 18:13 пишет:
Гость
Спасибо за ответ, но, увы с такой комбинацией у меня просто пропадают комментарии, да и форма наверх не переносится. Ну ничего, это не смертельно - в дальнейшем исправлю этот модуль.=))
Ответ для пользователя: Алексей