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

Очень часто у меня спрашивают, как сделать комментирование на сайте на PHP. Я решил не объяснять на пальцах каждому, а просто написать статью, в которой показать, как делается комментирование на сайте с использованием PHP и MySQL.
Мы сейчас будем разбирать PHP-код для создания комментирования на сайте, где имеется множество страниц, на каждой из которых свои комментарии. Например, таким образом, реализовано у меня. Это самый популярный вариант, когда у каждой страницы (статьи, поста и прочего) свой набор комментариев.
Первым делом, создаём таблицу в базе данных (пусть она называется comments), где будут храниться комментарии со следующими полями:
- id - уникальный идентификатор.
- page_id - хранится идентификатор той страницы, на которой находится данный комментарий.
- name - имя того, кто оставил комментарий.
- text_comment - текст комментария.
После создания таблицы, давайте создадим HTML-форму, которую нужно будет размещать на каждой странице, где Вы хотите разрешить добавление комментариев:
<form name="comment" action="comment.php" method="post">
<p>
<label>Имя:</label>
<input type="text" name="name" />
</p>
<p>
<label>Комментарий:</label>
<br />
<textarea name="text_comment" cols="30" rows="50"></textarea>
</p>
<p>
<input type="hidden" name="page_id" value="150" />
<input type="submit" value="Отправить" />
</p>
</form>
Единственная особенность данного HTML-кода - это input hidden. В value должен находиться уникальный идентификатор текущей страницы (статьи или поста).
Теперь займёмся обработкой формы. Для этого создаём файл comment.php с таким кодом:
<?php
/* Принимаем данные из формы */
$name = $_POST["name"];
$page_id = $_POST["page_id"];
$text_comment = $_POST["text_comment"];
$name = htmlspecialchars($name);// Преобразуем спецсимволы в HTML-сущности
$text_comment = htmlspecialchars($text_comment);// Преобразуем спецсимволы в HTML-сущности
$mysqli = new mysqli("localhost", "root", "", "db");// Подключается к базе данных
$mysqli->query("INSERT INTO `comments` (`name`, `page_id`, `text_comment`) VALUES ('$name', '$page_id', '$text_comment')");// Добавляем комментарий в таблицу
header("Location: ".$_SERVER["HTTP_REFERER"]);// Делаем реридект обратно
?>
И, наконец, последняя стадия - это вывод комментариев на странице:
<?php
$page_id = 150;// Уникальный идентификатор страницы (статьи или поста)
$mysqli = new mysqli("localhost", "root", "", "db");// Подключается к базе данных
$result_set = $mysqli->query("SELECT * FROM `comments` WHERE `page_id`='$page_id'"); //Вытаскиваем все комментарии для данной страницы
while ($row = $result_set->fetch_assoc()) {
print_r($row); //Вывод комментариев
echo "<br />";
}
?>
Вот и всё. Безусловно, это лишь база, необходимая для создания возможности комментирования на сайте. Здесь самое минимальное, что придётся сделать - это оформить внешний вид комментариев. Также надо обязательно проверить поступившие данные из формы. Также можно добавить дополнительные поля (например, e-mail ещё запрашивать).
Но всё это уже детали, а комментирование на PHP уже сделано.
Чтобы понять весь алгоритм и, главное, научиться самостоятельно создавать подобные скрипты, обязательно изучите PHP и MySQL, и в этом Вам поможет мой Видеокурс "PHP и MySQL с Нуля до Гуру": http://srs.myrusakov.ru/php
-
-
Михаил Русаков
Комментарии (160):
не понял с пунктом "вывод комментариев на странице" это создаётся ещё один php файл?? или все в одном? и ещё один вопрос, создал форму, как у вас и пхп файл, как нажимаю в форме кнопку отправить пишет вот такое: query("INSERT INTO `comments` (`name`, `page_id`, `text_comment`) VALUES ('$name', '$page_id', '$text_comment')");// Добавляем комментарий в таблицу header("Location: ".$_SERVER["HTTP_REFERER"]);// Делаем реридект обратно ?>
Ответить
Вы либо невнимательно читаете, либо Вам ещё просто рано про это вообще читать. Вы основы точно знаете? Теперь по вопросам: 1. Вывод комментариев на той же странице, где форма. 2. Как он может такое писать? Только если, конечно, Вы не открываете через file:///Z:\home... Если так, то забудьте про эту статью. С такой проблемой новички сталкиваются в первый день обучения PHP.
Ответить
Евгений вы для начала разберите алгоритм создания комментариев. Всё создаётся на одной или двух страницах. Допустим если на двух то: text.php //это файл для формы и вивода комментов update_comment.php //это фаил обработчик Вот и всё!
Ответить
сорри поспешил, ушел дальше разбираться
Ответить
Спасибо Михаил всё это знал только вот не знал как id страницы отправить спасибо!! <input type="hidden" name="page_id" value="150" />
Ответить
Салам! Михайил У меня вывод комментариев на странице не выходить. В базе MySQL данные есть но на странице нету!
Ответить
Тысяча причин, все перечислить невозможно. Могу лишь назвать парочку: по-другому названы поля в таблице, соответственно, неверный запрос. Либо ещё файл не обрабатывает PHP вообще, либо он имеет расширение html, либо запускается неправильно (допустим, просто открывается через двойной клик в браузере).
Ответить
Михаил, а идентификатор страницы, обычная строка или с Auto_increment
Ответить
Это уникальный номер страницы (число). А какой он, неважно, главное, чтобы число и уникальный.
Ответить
хорошая статья)) попробую ))
Ответить
Здравствуйте, как я понял, мне нужно создать два файла, один - это comment.php, а другой - это <form name="comment" action="comment.php" method="post"> <p> <label>Имя:</label> <input type="text" name="name" /> </p> <p> <label>Комментарий:</label> <br /> <textarea name="text_comment" cols="30" rows="50"></textarea> </p> <p> <input type="hidden" name="page_id" value="150" /> <input type="submit" value="Отправить" /> </p> </form> <?php $page_id = 150;// Уникальный идентификатор страницы (статьи или поста) $mysqli = new mysqli("localhost", "root", "", "db");// Подключается к базе данных $result_set = $mysqli->query("SELECT * FROM `comments` WHERE `page_id`='$page_id'"); //Вытаскиваем все комментарии для данной страницы while ($row = $result_set->fetch_assoc()) { print_r($row); //Вывод комментариев echo "<br />"; } ?> расширение у него будет .php??? ну и соответственно таблицу создаю и выдает ошибку Array ( [id] => 1 [page_id] => 150 [name] => [text_comment] => ) Array ( [id] => 0 [page_id] => 150 [name] => врар [text_comment] => арао )
Ответить
Да, поскольку используется PHP-код.
Ответить
теперь выдает Array ( [id] => 0 [page_id] => 150 [name] => Петр [text_comment] => Все хорошо )) ) Это как вообще?
Ответить
Как мне сделать, чтоб просто выводило Имя и комментарий?
Ответить
Вы не умеете работать с массивами? Очень плохо... Найдите в Google материалы по работе с массивами в PHP, посмотрите, что это такое, как они создаются, как считываются значения.
Ответить
Разобрался, сделал. Теперь у меня вопрос по поводу проверки на ввод данных! Нужно чтобы выводились сообщения если не введено имя и текст комментария. Что-то не получается (( $log ==""; $error="no"; //флаг наличия ошибки if($name == ''){ $log .= "Пожалуйста, введите Ваше имя<br>"; $error = "yes"; } //Проверка наличия введенного текста комментария if (empty($text_comment)){ $log .= "Необходимо указать текст сообщения!<br>"; $error = "yes"; } Подскажите, что не так?
Ответить
$log ==""; - это не присваивание, а сравнение.
Ответить
и ещё, у меня русские буквы не отображаются. Я пишу <meta content="text/html; charset=utf8"> но ничего не меняется (
Ответить
http://myrusakov.ru/php-encoding-problems.html
Ответить
Петр, как Вы разобрали массив? Подскажите мне. Дайте ссылку. Никак не могу понять, что делать дальше.
Ответить
Михаил, у меня на сайте около каждого(входящего или исходящего) сообщения стоит ссылка \ответитть\ но, я сделал что-то типа диалогов, как сделать ссылку в этом случае
Ответить
В этом случае, при нажатии на "ответить" должна отправляться уже заполненная форма.
Ответить
Михайл я новичок, все вроде сделал но комент как и у предыдущего человека в базу данных попадает но на странице его нет. Ну да ладно это я со временем разберусь у меня другой вопрос "код вывода комментария на страницу должен находиться на странице comment.php ??? т.e на той-же странице что и код обработки.
Ответить
Можно и так, а можно в разных файлах - это не так важно.
Ответить
Ёще один вопросик, а как код понимает в каком месте страницы ему отобразить комментарий.С формой то все понятно она четко прописана а вот место где комментарий выводиться не очень понятно.
Ответить
Комментарий выводится в примере через print_r(). Вот где этот print_r и будет написан, в том месте и появится комментарий.
Ответить
Тяжеловато((( видно не созрел я ((. Спасибо огромное все очень пригодилось
Ответить
И все таки не дает мне покоя этот каменный цветок "print_r" где его писать-то Как всегда не понятна элементарная штука как код понимает в каком месте HTML Страницы отображать комментарии не сбоку и не в верху а четко над формой добавления комментария.
Ответить
Так Вы выводите print_r() перед HTML-тегом формы.
Ответить
Михаил, у меня возникла ошибка в коде...Можете подсказать как её устранить? Собственно сама ошибка : Fatal error: Call to a member function fetch_assoc() on a non-object in Z:\home\malina.local\www\index.php on line 53
Ответить
Значит в запросе была ошибка. Всегда лучше проверять, что он вернул, а потом уже делать fetch_assoc()
Ответить
Да кстати я заметил что в новом денвере нет полезности как "$mysqli = new mysqli(...)" Вы не знаете почему её убрали?
Ответить
Не знаю где Вы берете такую версию Денвера. У меня всё работало.
Ответить
Позавчера скачал...и переустановил, ну раз переустановил решил что нибудь написать и увмдел что он ругается на оба файла на одну и туже ошибку Parce error $mysqli->query;
Ответить
Странно. Я давно обновлял, но насколько я помню там можно было установить и старую версию, более стабильную.
Ответить
Всмысле про старую версию
Ответить
Там есть версия на старом PHP 5.2
Ответить
Извините, дурак он и в африке дурак...Я забыл установить соединение с бд пожтому он и ругался
Ответить
Сделай так: while ($row = mysql_fetch_assoc($result_set)) { print_r($row); //Вывод комментариев echo "<br />"; }
Ответить
Насчёт в одном файле или в разных, разница в том что вам придётся перенаправлять пользователя на тот файл в котором лежит скрипт извлекающий коммент, а это не удобно. Не могу с массивами разобраться... Пару дней, и разберусь... Но время...
Ответить
А всё таки... Как быть если надо вставить код в сообщение, а все теги становятся просто текстом!!! Как быть в такой ситуации?
Ответить
Здравствуйте. Не знаю как это убрать... Комментарии добавляются нормально, но в таком виде: Array ( [id] => 0 [page_id] => 150 [name] => Ксю [text_comment] => Пампампам... ) Как сделать что бы нормально было?
Ответить
Выводите каждое значение массива отдельно. Желательно сразу в красивый шаблон. Сейчас у Вас просто распечатывается содержимое массива.
Ответить
Спасибо))
Ответить
Ксюша пришлите пожалуйста выведение каждого массива в кодовом вырвжении
Ответить
Михаил сделал вроде бы все, как написано в статье, но нажимаю ,,Сохранить,, появляется вот это Warning: mysqli::mysqli() [mysqli.mysqli]: (42000/1049): Unknown database 'db' in X:\home\mysite.local\www\comment.php on line 8 Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli in X:\homе\mysite.local\www\comment.php on line 9 Warning: Cannot modify header information - headers already sent by (output started at X:\home\mysite.local\www\comment.php:1) in X:\home\mysite.local\www\comment.php on line 10 Warning: mysqli::mysqli() [mysqli.mysqli]: (42000/1049): Unknown database 'db' in X:\home\mysite.local\www\comment.php on line 15 Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli in X:\home\mysite.local\www\comment.php on line 16 Fatal error: Call to a member function fetch_assoc() on a non-object in X:\home\mysite.local\www\comment.php on line 17 В чем причина...
Ответить
База у Вас не создана, либо неправильные данные для подключения к ней, из-за этого ошибка.
Ответить
в базу не заноситься русский текст, кодировка колонки стоит utf-8 general_ci почему кирилицы нету?
Ответить
Может на самом сервере кодировка не установлена: http://myrusakov.ru/php-encoding-problems.html
Ответить
Достаточно просто создать базу данных и ввести её данные в формы или необходимо создать таблицу в базе данных. Спасибо.
Ответить
Почитайте про структуру базы данных: http://myrusakov.ru/struktura-basy-dannyh.html
Ответить
Структура понятна. А для начинающих скриншот таблицы базы данных для комментариев можно? Буду очень признателен.
Ответить
В этой статье написано всё.
Ответить
Последние два тега добавлять в comment.php?
Ответить
Один в comment.php другой на саму страницу.
Ответить
Все сделал правильно, но вот что получается: на странице на которой разрешено комментирование появляется поле имени, комментария, а под ним такое:Warning: mysqli::mysqli() [mysqli.mysqli]: (42000/1049): Unknown database 'db' in X:\home\vseobavto.local\www\vnedorojniki_vikipedia.php on line 134 Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli in X:\home\vseobavto.local\www\vnedorojniki_vikipedia.php on line 135 Fatal error: Call to a member function fetch_assoc() on a non-object in X:\home\vseobavto.local\www\vnedorojniki_vikipedia.php on line 136 А когда нажимаешь отправить такое: Warning: mysqli::mysqli() [mysqli.mysqli]: (42000/1049): Unknown database 'db' in X:\home\vseobavto.local\www\comment.php on line 8 Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli in X:\home\vseobavto.local\www\comment.php on line 9 Warning: Cannot modify header information - headers already sent by (output started at X:\home\vseobavto.local\www\comment.php:8) in X:\home\vseobavto.local\www\comment.php on line 10 Что делать?
Ответить
Базы данных у Вас нет, либо она по-другому называется.
Ответить
Где писать название?
Ответить
Это нужно то что Вы написали просто скопировать и все?
Ответить
Да, нужно только подставить свои данные для подключения к базе.
Ответить
Куда именно писать данные? Какие данные нужно вводить?
Ответить
Туда где в комментарии написано " Подключаемся к базе данных". Вы бы лучше почитали статьи про SQL, чтобы лучше разобраться. Нужно ввести логин и пароль пользователя базы, имя базы. Ну и сама таблица в базе у Вас должна существовать с теми названиями, которые у меня там приведены.
Ответить
После того как я создал таблицу, мне самому нужно прописать в ней id, page_id, name и text_comment? Или же это всё пропишится само по себе после нажатия на кнопку "Отправить"? Ответ нужен срочно!
Ответить
Что значит: "В value должен находиться уникальный идентификатор текущей страницы"? На примере Ти задал 150. Мне нужно на каждой странице где будет форма комментов задавать разные числа (не повторять их)? А эти числа будут сами записываться в таблицу, или мне и там нужно прописывать их?
Ответить
Таблицу нужно полностью создать, в коде из статьи нет sql-команд на создание таблицы. Идентификатор должен подставлять движок, если у Вас множество страниц с разным id.
Ответить
У меня всего 5 статических страниц на которых я хочу вставить комменты! Что делать?
Ответить
Пишите id вручную для каждой страницы, раз они статические.
Ответить
Привет всем !!! Скажите куда мне добовлять последний код <?php $page_id = 150;// Уникальный идентификатор страницы (статьи или поста) $mysqli = new mysqli("localhost", "root", "", "db");// Подключается к базе данных $result_set = $mysqli->query("SELECT * FROM `comments` WHERE `page_id`='$page_id'"); //Вытаскиваем все комментарии для данной страницы while ($row = $result_set->fetch_assoc()) { print_r($row); //Вывод комментариев echo "<br />"; } ?> Теперь если его надо вставить в самом начале как мне добавить под формой коментарии добавить тег для записи коментариев
Ответить
В той части страницы, где выводятся комментарии.
Ответить
Как исправить такую проблемку? Вместе с именем и текстом на страницу выводится: Array ( [id] => 2 [page_id] => 6 [name] => Руслан [text_comment] => А это текст комментария!!! )
Ответить
Выводите каждое значение массива отдельно. Желательно сразу в красивый шаблон. Сейчас у Вас просто распечатывается содержимое массива.
Ответить
Понял, но не всё! Я делал всё по этому уроку. В коде вывода комментариев у тебя нет этих значений масива??? Дай пожалуйста код который выводит каждое значение массива отдельно.
Ответить
Вы не знаете, как работать с массивом? Не знаете, что такое ключ и значение? Забрасывайте немедленно этот скрипт, и изучайте самые-самые основы с нуля. Особенно внимательно читайте про массивы. И пока досконально не будете знать и понимать эту тему, бесполезно и бессмысленно двигаться дальше.
Ответить
Что-то у меня это всё не идёт! Я дико извиняюсь, но дай мне пожалуйста код, который выведет все записи правильно (каждое значение массива отдельно).
Ответить
Мне не тяжело подсказать, вот: "<b>".$row["name"]."</b>: ".$row["text_comment"]; Только проку от моей подсказки не много, если Вы самых-самых основ не знаете: http://myrusakov.ru/php-how-study.html
Ответить
Здравствуйте у меня на все это дело выдает ошибку: Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\baht.ru\comment.php:76) in Z:\home\localhost\www\baht.ru\comment.php on line 85 ... Смена кодировки UTF-8 with signature на UTF-8 не помогло! Еще : input hidden. В value должен находиться уникальный идентификатор текущей страницы, вместо "150" что там должно быть, это значение поля page_id, откуда оно должно брать значение, не совсем поняла с этим.
Ответить
В comment.php в 76-й строке происходит вывод, либо через echo, либо просто пробел какой-нибудь за пределами <?php ?>, либо HTML-код начинается. Вот этого вывода не должно быть перед session_start (видимо, от него ошибка идёт). Что находиться в value должно, зависит от Вашего движка, как он отличает одну страницу от другой. Либо если комментирование каких-то статей, то как он отличает одну статью от другой. Обычно это ID, но по-разному бывает.
Ответить
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\baht.ru\comment.php:9) in Z:\home\localhost\www\baht.ru\comment.php on line 18 КОД: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Документ без названия</title> </head> <body> <?php /* Принимаем данные из формы */ $name = $_POST["name"]; $page_id = $_POST["page_id"]; $text_comment = $_POST["text_comment"]; $name = htmlspecialchars($name);// Преобразуем спецсимволы в HTML-сущности $text_comment = htmlspecialchars($text_comment);// Преобразуем спецсимволы в HTML-сущности $mysqli = new mysqli("localhost", "root", "", "nazi6a");// Подключается к базе данных $mysqli->query("INSERT INTO `comments` (`name`, `page_id`, `text_comment`) VALUES ('$name', '$page_id', '$text_comment')");// Добавляем комментарий в таблицу header("Location: ".$_SERVER["HTTP_REFERER"]);// Делаем реридект обратно ?> </body> </html>
Ответить
header() не может быть после самого первого вывода HTML-кода, например. Всю эту обработку надо отправить вверх, а весь HTML-код вниз.
Ответить
вытащила из html кода на верх все равно тоже
Ответить
Вы поняли, в чём была ошибка или нет? header() - функция, отправляющая заголовок, то, что там Вы выводите - это уже тело. Не может быть тело раньше головы. На основании этого, определите ещё одну ошибку и исправьте её. Единственное, что Вы ещё не обязаны знать - это то, что кодировка должна быть строго UTF-8 без BOM (а не просто UTF-8), всё остальное Вы сейчас в состоянии исправить.
Ответить
Это означает, что кодировка должна быть такой: ANSI as UTF-8?
Ответить
В notepad++ будет написано так.
Ответить
Уважаемый Михаил! Я с трудом осваиваю вашу программу по комментариям на странице сайта. НО! Со страницы HTML в базу данных перемещаю записи сделанные на этой странице. НО! Не понимаю как вывести записи из базы данных на страницу HTML. Как второй код PHP должен передавать текст сообщения на страницу с HTML. Спасибо
Ответить
Чтобы создавать подобные скрипты, нужно знать всю базу по PHP: http://myrusakov.ru/php-how-study.html
Ответить
Спасибо Михаил. Но второй php код у Вас вывешен и куда его? Вставлять?
Ответить
На страницу, на которой должны выводиться комментарии.
Ответить
Михаил! И последний вопрос! Как избавиться от "мусора":Array ( [id] => [page_id] => 150 [name] =>Вася [text_comment] => Как помочь? )
Ответить
echo $comment["name"].": ".$comment["text_comment"];
Ответить
Миша! Поправил echo $comment["name"].": ".$comment["text_comment"]; Ничего не изменилось! Вот и думаю... А содержание учебных дисков так же с недосказонностью?
Ответить
А что здесь недосказанного? В курсе разбирается всё с нуля. А если Вы, проигнорировав мой совет прочитать статью, по-прежнему продолжаете спрашивать про комментарии, хотя там чётко я написал про "спецов", подобных Вам (прямо Вашу задачу описал про вывод массива). К сожалению, такие невнимательные ученики не способны научиться создавать сайты. Надо внимательно читать то, что я даю, тогда вопрос про то как вывести массив Вы бы не задали. Вы себе даже представить не можете, насколько он "начален", это 1-е занятие самого лёгкого курса для самых-самых начинающих, и Вы задаёте вопрос в той теме, которая рассчитана уже на более-менее опытных. Такое ощущение, что первоклассник пришёл к студентам и задаёт им вопрос, сколько будет 2*2.
Ответить
Михаил! Все что у Вас здесь издано по поводу комментариев на странице сайта работает на денвере. Правда не достаточно корректно. А в "поле" на хостинге УВЫ! Пришлось создать таблицы под каждую страницу и основательно переработать коды PHP. И обращаться к серверу в php.ini Спасибо за искру к знаниям.
Ответить
увлекся таблицами вот хотелось бы добавить поле в таблице с временем создания комментария,но не смог найти код.подскажите.
Ответить
Его надо не искать, а самому написать. А если не можете, то ознакомьтесь с этой статьёй: http://myrusakov.ru/php-how-study.html
Ответить
понятно, я создал поле "data", там выходит:0000.00.00 тепорь осталось вывести в MySQL текущую дату,как это сделать,нашел предпологаемый код: mysqli>SELECT something FROM `comments` WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; но он вроде неполный.как написать правильно?спасибо,прошу прщения за частые темы
Ответить
Храните в базе UNIX_TIMESTAMP, то есть то, что возвращается в PHP функцией time().
Ответить
не понял. а начало кода с $rs=.........
Ответить
везде пишут SELECT unix_timestamp(now()); а как вставлять код,непонятно
Ответить
SELECT - это выборка, а я говорю про хранение самих записей. Вместо даты там должны быть числа написаны в самой базе.
Ответить
здравствуйте,в этом скрипте,хотел добавить отправку на емайл.вот часть кода: $to = "[email protected]"; $subject="Письмо от ".$name; писмо приходит,но пустым.как сделать правильно запрос,помогите разобратьса.спасибо
Ответить
http://myrusakov.ru/email-php.html
Ответить
ник не могу вывести $subject = "Robot - Робот";
Ответить
Михаил, вопрос о форме комментариев через виджеты соц. сетей. Для моего сайта с точки зрения поисковика в этом есть какой-либо плюс? Считается ли обновлением контента появление комментариев на странице моего сайта, если сами эти комментарии принадлежат соц.сети?
Ответить
Поисковая система не видит комментариев социальных сетей, потому что они добавляются через JavaScript.
Ответить
здравствуйте,можно ли найти урок,как добавить регистрацию для комментариев?не для всего сайта,а для добавления комментария.
Ответить
Нет такого урока, тут надо изучать PHP и MySQL, смотреть отдельно эту статью и смотреть отдельно, как делается регистрация и авторизация пользователей, затем пытаться соединить, в общем, тут без хороших знаний никак.
Ответить
Привет, Михаил - как создать таблицу в базе данных , не понимаю , файл создать что ли .Хочу поставить комментарии на одну страницу . Сайт у меня на бесплатном хостинге
Ответить
На бесплатном хостинге никак, скорее всего. А вообще через phpmyadmin создаётся.
Ответить
там есть phpmyadmin
Ответить
http://myrusakov.ru/phpmyadmin-table.html
Ответить
Не знаю даже...У меня вроде всё правильно, только в БД ничего не сохраняется...Даже ошибки не выдаёт никакой. Скрин:http://forum.php.su/printfile.php?action=attach&img=yes&f=1&t=8338&id=2
Ответить
http://myrusakov.ru/php-finderror.html
Ответить
верно ли будет такая строка print_r ($row["name"]);print_r ($row["text_comment"]); //Вывод комментариев если не сложно подскажите как можно поставить пробел между name и text_comment. А то слитно отображается!
Ответить
echo $row["name"]; и echo $row["text_comment"]; достаточно
Ответить
как можно сделать ,чтобы новые комментарии были внизу $result_set = $mysqli->query("SELECT * FROM `comments` WHERE `page_id`='$page_id'");
Ответить
Отсортировать по дате в запросе через ORDER BY `поле_отвечающее_за_дату`. Безусловно, это поле нужно так же создать и в нём должно быть значение, отвечающее за дату и время создания комментария.
Ответить
а какое значение отвечает за дату?
Ответить
Например, количество секунд, прошедших с полуночи 01.01.1970, с таким форматом проще будет работать потом.
Ответить
Комментарии сделал, все отлично работает! Михаил, подскажите, а как теперь вывести количество оставленных пользователями комментариев под каждой статьей?
Ответить
Есть массив с комментариями и есть функция count(), не вижу проблем.
Ответить
Здравствуйте, Михаил!Я всё сделал и решил сделать форму, но как только начал делать текст комментария в одну строку.Я уже перепробовал много стиле в css но ничего не помогает. Вот код: <div style="clear: left;"> <?php $page_id = 150; $mysqli = new mysqli("", "", "", ""); $result_set = $mysqli->query("SELECT * FROM `comments` WHERE `page_id`='$page_id'"); while ($row = $result_set->fetch_assoc()) { if (count($row) != 0) {?> <? $i = 3; while ($i < count($row)) {?> <span><b><?=$row["name"]?></b></span><br /> <span><?=$row["text_comment"]?></span><br /> <hr /> <?$i++?> <?}?> <?}?> <?}?> </div> Если будет время помогите пожалуйста.С уважением, Андрей.
Ответить
Михаил подскажите пожалуйста как реализовать данные комментарии если я использую tpl файлы. Проблема в том что комментарии у меня выводятся, Но вверху страницы. То есть выше шапки сайта либо же ниже футера.
Ответить
http://myrusakov.ru/php-template.html
Ответить
в админ панели к статье подключить комментирование не сложно,но как сделать так ,чтобы комментирование было именно к зтой статье,пользуясь одной и тойже обработкой,или пример выше тоже подойдет,помоему нет,админ панель со статьями одна
Ответить
Этот пример можно применить где угодно.
Ответить
А как добавить ещё аватарку к комментарием с сервиса Gravatar?
Ответить
Добрый день! Михаил, я сделала вроде как у вас написано (создала таблицу в phpMyAdmin, сделала файл comment.php и внесла туда данные по приему и выводу комментариев, добавила код комментария на сайт но: 1. не прописывается имя в форме для комментариев, 2. при нажатии на кнопку "отправить" возвращаюсь на ту же страницу без комментария. Подскажите в чем причина? Заранее спасибо!
Ответить
Для начала вручную проверить sql запрос в phpmyadmin.
Ответить
Вот что выдает sql запрос: SELECT * FROM `comments` WHERE 1 Сейчас при нажатии на кнопку "отправить" попадаю на пустую страницу с адресом: www.сайт.ru/comment.php
Ответить
Он должен вернуть хоть что-то. У Вас база не пустая же.
Ответить
Вот что появляется при нажатии на кнопку "отправить" Fatal error: Class 'mysqli' not found in /home/k/kopatel345.hut4.ru/WWW/comment.php on line 8 пожалуйста помогите
Ответить
На бесплатных хостингах, видимо, не заботятся о версиях PHP. Поэтому я и рекомендую использовать только платные, а создавать и тестировать можно всё на denwer. Что касается хостинга, то рекомендую этот: http://myrusakov.ru/review-hostia.html
Ответить
А точно причина в этом?
Ответить
Да,причина точно в этом. На вашем хостинге используется PHP 4.3.9. PHP стало работать с mysqli c версии 5 Используйте хотя бы дешёвые платные хостинги. Или же измените запрос в соответствии с PHP более старых версий
Ответить
Здравствуйте, Михаил! К вам такая некая просьба Выложите на свой отдельный Блог видео-урок "Древовидный вид комментариев(поддерживающий аватар пользователя,редактирование и удаления комментария)"(как у вас на сайте). Было бы очень полезно для многих!
Ответить
Михаил, здравствуйте. Скажите, я точно все правильно понял? Создал базу данных db, в ней таблицу comments и поля с названиями по вашему примеру, вставил html-код в index.html, создал файл comment.php, куда целиком поместил ваш PHP-код. На моей странице появились поля заполнения с "именем" и "комментарием". Захотел проверить, вписал туда несколько слов, жму кнопку "отправить" и ничего на страницу не выводится, никаких ошибок тоже не выдается. Посмотрел еще раз таблицу, а там почему-то каждая написанная буква текста заменена на знак "?", но мой восклицательный знак был определен. Подскажите пожалуйста, в чем возможная причина.
Ответить
Илья, здравствуйте. Похоже проблема в кодировке, используйте UTF-8.
Ответить
Специально зарегистрировалась, чтобы сказать, что у Вас, Михаил, стальные нервы. Некоторые вопросы это нечто :)
Ответить
Здравствуй,Михаил! У тебя на сайте на каждый комментарий можно ответить. После ответа комментарий выводиться "правее" изначального. Вопрос такой: как это реализовать?в какую сторону копать? P.S. пишу сайт с нуля. С php дружу)
Ответить
хотел бы тоже узнать, у меня есть идея: добавить в базе данных поле ref(например), где будет написан id сообщения на который был дан ответ, а так же в файле вывода: проверять при добавлении каждого сообщения нету ли для него ref
Ответить
Михаил, подскажите, пожалуйста, как снизу комментария сделать ссылку "Ответить" и что бы при этом открывалась небольшая форма? Спасибо.
Ответить
Добрый день.После добавления последнего кода на страницу у меня вылетает ошибка в строке while ($row = $result_set->fetch_assoc()) { А также футер сайта пропадает. При удалении кода все нормально. В чем может быть проблема?
Ответить
Исправил ошибку сам. Спасибо вам за статью http://myrusakov.ru/php-fetchassoc.html
Ответить
Еще такой вопрос. При отправлении комментария выдает 404 ошибку. В чем может быть проблема?
Ответить
Здравствуйте пожалуйста помогите мне! создание комментария на сайте как бы мое домашнее задание. А я был занят и мне нужен полный код на php без всяких исправлений. Пожалуйста очень прошу
Ответить
Установи себе готовый сервис комментирования будет тебе готовый код))
Ответить
А как из этого "Array ( [id] => 7 [name] => 1 [text_post] => 1 )" сделать пост?
Ответить
Здраствуте я использовала для сайта чтобы друзия коментировали мой сайт html http://dl2.joxi.net/drive/2016/06/08/0015/0773/1020677/77/f2798b279e.jpg но я пока делаю свой сайт хотела после когда после покупки домена все могут написать коментарии http://dl2.joxi.net/drive/2016/06/08/0015/0773/1020677/77/ac4556ac7d.jpg или будет так все ясно вам сказала вам
Ответить
Михаил, здравствуйте! Там в коде прописан логин и пароль, а если злоумышленники возьмут и войдут в базу данных, пускай даже только в эту. Здесь кодировать не нужно? И данные надо вводить от своей созданной базы данных?
Ответить
У меня такая ошибка -Fatal error: Call to a member function fetch_assoc() on a non-object in /home/p217691/www/andra.marketing/urok1/index.php on line 56 . Почему не знаете?
Ответить
Как сделать что-бы не перезагружалось видео при добавление коммента добавляю коммент видео заново начинает играть с начало подскажите пожалуйста. Ещё один вопрос тут где мы пишем все комменты это аналог системы что вы написали выше ?
Ответить
Люди, помогите. Что делать если комментарии выводятся так: "Array ( [id] => 1 [page_id] => 1488 [name] => zsdbvgarbg [text_comment] => aerherhwrhwrh ) Array ( [id] => 2 [page_id] => 1488 [name] => wergrgwergerg [text_comment] => awergetrhtrhtrh )"
Ответить
Я вот что расскажу вам... Хоть верьте хоть нет) Это реально не лохотрон! Это супер вещь! Дочитайте до конца!!! И самое главное сразу включайте мозги ,вдумывайтесь и считайте!!!))) Наткнулась я на это совершенно случайно, когда искала работу для заработка. До этого, я такие статьи даже не дочитывала до конца. В статье говорилось, что «МОЖНО СДЕЛАТЬ СОТНИ ТЫСЯЧ РУБЛЕЙ ЗА ПАРУ НЕДЕЛЬ ПРИ ВЛОЖЕНИИ ВСЕГО В 140 РУБ». В статье говорилось о том, что надо послать по 20 рублей на 7 Internet-кошельков и перечислялись эти кошельки. Потом надо вычеркнуть первый кошелёк из списка, тем самым, сместив список на одну строчку вверх. В результате чего седьмая строчка освобождается, куда Вы вписываете номер своего Internet-кошелька. Затем Вы закидываете данное сообщение, но уже с ВАШИМИ ДАННЫМИ на седьмой строчке, на 200 разных форумов. Я поразмышляла и подумала, что в принципе НИЧЕГО НЕ ТЕРЯЮ кроме 140 руб. Что такое 140 руб.?...Да ни чего...Особенно с нашими ценами...Пару баночек детского пюре,например нам их хватает на пару раз перекусить... В общем, сумма небольшая, а риск - дело благородное. И я решила попробовать. В течение 2-х дней я зарегистрировалась на более чем 100 бизнес-форумах и бесплатных досках объявлений. Прошла неделя, заглядываю в свой Интернет кошелек. Поступлений никаких нет. Вообще. А разные участники пишут, что за неделю заработали кто по 800 руб., кто по 460 руб. Ну что ж, подумала я, попала в очередной лохотрон, желая заработать за пару недель десятки тысяч рублей. Ну и бросила это занятие, так и не дослав свое объявление до 200 форумов. Ещё через неделю (ради любопытства) заглянула в свой Интернет кошелек. Смотрю, всего одно поступление - 20 руб. Да, думаю, дело не стоящее, случайно нашёлся такой же наивный(ая), как и я. Ещё через две недели я все-таки снова открыла свой Интернет кошелек, а в нем уже около 900 руб. Откуда? Непонятная картина, но всё равно за 1 месяц 900 руб. Это очень мало, как пишут предыдущие участники - они за 1 месяц заработали десятки тысяч рублей. И вот, после 1 месяца началось самое интересное: на мой кошелёк стали приходить деньги КАЖДЫЙ ДЕНЬ, затем, спустя ещё 2 недели, на моем счету было уже более 48 000 руб. После этого я отправила свои объявления ещё примерно на 150 форумов. РЕЗУЛЬТАТ МЕНЯ ОШЕЛОМИЛ. По прошествии всего 2 месяцев, я получила 141 000 руб. И деньги шли каждый день. Каждые 10 минут на мой счёт поступали и поступают сейчас по 20-40 руб., так как я стабильно размещаю в день это сообщение на 10 форумах (это примерно 45 минут моего времени в день). И это все пришло ко мне за риск в 140 руб. Не плохо, правда?) Я была в очень плохом экономическом положении и долго не могла найти себе подходящую работу до того, как наткнулась на эту статью. Я не особо верила, что это работает, но всё же рискнула и начала получать переводы со всего света… Я поняла одну вещь: всегда найдутся люди, которые будут убеждать себя и других, что всё это лишь развод для лохов. Но на самом деле причина в них самих - они просто не могут (или не хотят) разместить данное сообщение на 200 форумах. И они будут убеждать всех во всемирном заговоре, но только не в собственной лени. Я Вам хочу рассказать, как это работает, и почему это работает. Я даю вам честное слово, что если вы будете В ТОЧНОСТИ соблюдать ниже перечисленные инструкции, то вы начнете получать НАМНОГО БОЛЬШЕ ДЕНЕГ, чем Вы думали, потратив всего небольшую сумму и несколько часов свободного времени. Согласитесь, это очень просто. ЭТО СОВЕРШЕННО ЛЕГАЛЬНО. И ВАШ ВКЛАД СОСТАВЛЯЕТ ВСЕГО 140 РУБЛЕЙ... Самое ВАЖНОЕ, ЭТО РАБОТАЕТ, И ПРИ ЭТОМ ВЫ НИ ЧЕМ НЕ РИСКУЕТЕ. Прочтите это НЕСКОЛЬКО РАЗ, если вам это требуется. А дальше, следуйте инструкциям в ТОЧНОСТИ, как они написаны и в течении ближайших 2 месяцев вы разбогатеете на очень приличную сумму денег. Вот, собственно и сама инструкция: 1. Зарегистрируйтесь в системе «Яндекс мани (Яндекс Деньги) ». Это некий электронный кошелёк для использования денег в сети Интернет. Ознакомьтесь с данной системой, как она работает. Далее необходимо положить на свой счет 141 руб. (больше на рубль, чем требуется, потому что при осуществлении перевода система снимает 0.5 % переводимой суммы, т.е. Вы должны будете переводить по 20 руб. 10 коп., в сумме - 140 руб. 70 коп.) От себя отмечу, что можно пополнить электронный кошелек в специальных автоматах по приему платежей, которые часто располагаются в магазинах и на станциях метро. В салонах связи «Евросеть», «Связной» и т.д. Лучший вариант - это, конечно, привязать к своему счету в «Яндекс Деньги» любую свою банковскую карту (можно кредитную). Как только Вы положите на свой кошелек 140 руб. 70 коп., - все готово, вы можете переходить к следующему шагу! 2. Необходимо перевести по 20 руб. 10 коп. (10 коп. снимается службой перевода за совершение операции) на 7 предлагаемых ниже счетов яндекс-денег. Для того чтобы осуществить перевод, необходимо зайти на сайт яндекс деньги. Затем, если вы еще не вошли под своим именем, нажмите на ссылку «Войти…», которая располагается в самом верху страницы и выделена красным шрифтом. Далее вам предложат ввести логин и пароль, которые вы получили при регистрации. Затем находим ссылку «Перевести». Здесь, как раз и нужно будет перевести с вашего яндекс-кошелька по 20 руб,10 копеек на 7 указанных кошельков. Важно! Перевод нужно осуществлять на счет, а не на e-mail !! Важно! При каждом отправлении указывайте в поле «Название платежа» следующую фразу: «Пожалуйста, внесите меня в список яндекс-кошельков». Чтобы получать доход, необходимо отправить на каждый из этих 7 кошельков по 20 руб. 10 коп., иначе вы просто не будете включены в систему сетевыми модераторами яндекс-кошельков и не сможете обналичить доход. (20 руб. 10 коп. - это отправляемая Вами сумма, при этом получатель получает ровно 20 руб.) Итак, отправьте по 20 руб. 10 коп. на каждый из следующих счетов: (1) -410013653858943 (2) -410014850448022 (3) -410014850458447 (4) -410013658602082 (5) -410013658607525 (6) -410014854962340 (7) -410013658673741 ПОВТОРЯЮ, чтобы получать доход, необходимо отправить НА КАЖДЫЙ из этих 7 кошельков по 20 руб. 10 коп. - иначе, сетевыми модераторами яндекс -кошельков, вы просто не будете включены в систему и не сможете обналичить доход. 3. Теперь ВНИМАНИЕ!!! После того, как Вы выполнили ШАГ 2, скопируйте к себе на компьютер весь этот текст от начала до конца. В скопированной статье удалите из списка кошельков ПЕРВЫЙ (ВЕРХНИЙ) кошелёк и переместите 2-ой кошелёк на место 1-го, который Вы стёрли, 3-ий - на место 2-го, 4-ый - на место 3-го, 5-ый - на место 4-го, 6-ой - на место 5-го и 7-ой - на место 6-го ! И самое ВАЖНОЕ в 7-ой номер, который оказался пустым, ВПИШИТЕ НОМЕР Вашего КОШЕЛЬКА!!! Разместите эту статью (или объявление с ссылкой на страницу, которую Вы без труда можете сделать на одном из бесплатных сайтов) - на, НЕ МЕНЕЕ ЧЕМ 200-300 ФОРУМАХ (за любой отрезок времени, хоть за месяц, хоть за полгода, хоть за пару дней) и НОВОСТНЫХ ЛЕНТАХ. ЗАПОМНИТЕ! ЧЕМ БОЛЬШЕ Вы разместите объявлений, ТЕМ ВЫШЕ БУДЕТ ВАШ ДОХОД. И этот доход будет НАПРЯМУЮ ЗАВИСЕТЬ ОТ ВАС. Размещение этой статьи на 200 форумах, даже на самых малопосещаемых, ГАРАНТИРУЕТ Вам очень хороший доход!!!, в течение двух месяцев!!! БОЛЬШЕ РАЗМЕЩЕНИЙ - БОЛЬШЕ ДОХОД (при том в ГЕОМЕТРИЧЕСКОЙ ПРОГРЕССИИ). ИТАК, КОГДА ВЫ ДОСТИГНЕТЕ ПЕРВОЙ ПОЗИЦИИ В СПИСКЕ, ВЫ БУДЕТЕ ИМЕТЬ ТЫСЯЧИ РУБЛЕЙ ПРОСТО КАК СОЗДАТЕЛЬ СПИСКА!!! Я думаю, ЭТО стоит 140 рублей и СОВСЕМ НЕ ТРУДНОЙ РАБОТЫ. А теперь, с помощью ПРОСТЕЙШЕЙ МАТЕМАТИКИ, я Вам объясню, почему Вы в любом случае ничего не теряете, а ТОЛЬКО ВЫИГРЫВАЕТЕ. Скажем, из 200 размещений вы получите только 5 ответов (очень низкая цифра). Значит, вы сделаете 100 рублей, находясь на 7 позиции в списке. Теперь эти 5 людей делают опять же МИНИМУМ 200 размещений с вашим кошельком на 6 позиции, и только 5 людей отвечают тем первым 5 - это уже 500 рублей. Дальше эти 25 людей делают по 200 размещений с вашим кошельком на 5 строчке и только 5 отвечают - ваш доход 2 500 рублей. Теперь эти 125 людей, разместив и получив только по 5 ответов, дают вам 12 500 рублей прибыли (вы на 4 позиции). Далее, эти 625 людей делают по минимум 200 размещений с вами уже на 3 строчке и только 5 людей отвечают - это 62 500 рублей. Самое интересное то, что эти 3 125 людей сделают еще по 200 размещений, и если им ответят только 5 людей, ваш доход составит 312 500 рублей (вы на 2 позиции). Теперь ВНИМАНИЕ, эти 15 625 людей сделают еще по 200 размещений, и если им отвечают только 5 человек - это 1 562 500 рублей!!! Не правда ли внушительная цифра? Вы только вдумайтесь!! Так вы сможете заработать свой первый миллион!! И это всё за первоначальный вклад в 140 рублей!!! Вы себе можете представить, что тысячи людей со всего мира присоединяются к Интернету и читают эти статьи каждый день. Так что!? Потратите ли Вы 140 рублей? А если им будут отвечать не по 5 человек, а по 10? 20? Представляете, в какой геометрической прогрессии будет расти ваш доход???!! Вам абсолютно нечего терять!!! А приобрести можете много!!! Просто включите мозги!!! Удачи!
Ответить
Здравствуйте, почему у меня выводятся комментарии выводятся как массив? Array ( [id] => 0 [page_id] => 1 [name] => 0 [text_comment] => 0 ) Попытался разобраться в массивах, но там пишут про Array, а в этом скрипте Array не нашёл. Помогите, пожалуйста.
Ответить
А у меня они вообще не выводятся я заметил что кнопка без действия!
Ответить
Покажите пожалуйста на примере как сделать комментирование уже авторизованного пользователя как сейчас я пишу, что бы заново не вводить сдесь имя или логин, везде в интернете искал у всех одно и тоже водит имя или логин затем комментирование
Ответить
Добрый день! Подскажите, как это же прописать через общую function в файле model.php подключение таблицы через константу и выводить на каждую страничку свой comments через foreach. Не могу понять как присвоить и выводить page_id=. Заранее благодарен.
Ответить
Парни, кто подскажет как редактировать комментарии пользователю??
Ответить
Подскажите как сделать ответы на комментарии?
Ответить
Давно хотел создать на своём сайте систему комментариев. А сегодня я прочитал эту статью и получилось!!! Огромное вам спасибо!!!
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.