<MyRusakov.ru />

Создание движка на PHP и MySQL 2.0

Создание движка на PHP и MySQL 2.0

Видеокурс "Создание движка на PHP и MySQL 2.0" научит Вас создавать профессиональные движки для сайтов на PHP и MySQL с использованием ООП и паттерна MVC.

В курсе разобрана вся теория по структуре движка: как всё устроено, какие должны быть объекты, какая у них иерархия и как они взаимодействуют между собой.

В практической части будет создан движок с чистого листа. Будет создано ядро, все адаптеры, все вспомогательные классы, а также классы для работы с объектами базы данных. И чтобы курс был максимально полезным, будет создан движок для сайта MyRusakov.ru.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

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

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

Очень часто у меня спрашивают, как сделать комментирование на сайте на 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

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (150):

fulky fulky 01.02.2012 20:02:42

не понял с пунктом "вывод комментариев на странице" это создаётся ещё один php файл?? или все в одном? и ещё один вопрос, создал форму, как у вас и пхп файл, как нажимаю в форме кнопку отправить пишет вот такое: query("INSERT INTO `comments` (`name`, `page_id`, `text_comment`) VALUES ('$name', '$page_id', '$text_comment')");// Добавляем комментарий в таблицу header("Location: ".$_SERVER["HTTP_REFERER"]);// Делаем реридект обратно ?>

Ответить

Admin Admin 01.02.2012 20:06:20

Вы либо невнимательно читаете, либо Вам ещё просто рано про это вообще читать. Вы основы точно знаете? Теперь по вопросам: 1. Вывод комментариев на той же странице, где форма. 2. Как он может такое писать? Только если, конечно, Вы не открываете через file:///Z:\home... Если так, то забудьте про эту статью. С такой проблемой новички сталкиваются в первый день обучения PHP.

Ответить

lion337 lion337 01.02.2012 22:51:51

Евгений вы для начала разберите алгоритм создания комментариев. Всё создаётся на одной или двух страницах. Допустим если на двух то: text.php //это файл для формы и вивода комментов update_comment.php //это фаил обработчик Вот и всё!

Ответить

fulky fulky 01.02.2012 20:14:16

сорри поспешил, ушел дальше разбираться

Ответить

Nikitoz01 Nikitoz01 02.02.2012 13:00:10

Спасибо Михаил всё это знал только вот не знал как id страницы отправить спасибо!! <input type="hidden" name="page_id" value="150" />

Ответить

Karlen Karlen 03.02.2012 23:18:43

Салам! Михайил У меня вывод комментариев на странице не выходить. В базе MySQL данные есть но на странице нету!

Ответить

Admin Admin 03.02.2012 23:31:19

Тысяча причин, все перечислить невозможно. Могу лишь назвать парочку: по-другому названы поля в таблице, соответственно, неверный запрос. Либо ещё файл не обрабатывает PHP вообще, либо он имеет расширение html, либо запускается неправильно (допустим, просто открывается через двойной клик в браузере).

Ответить

Arthur Arthur 16.02.2012 08:01:35

Михаил, а идентификатор страницы, обычная строка или с Auto_increment

Ответить

Admin Admin 16.02.2012 08:27:49

Это уникальный номер страницы (число). А какой он, неважно, главное, чтобы число и уникальный.

Ответить

mg_loima mg_loima 17.04.2012 15:23:32

хорошая статья)) попробую ))

Ответить

Petya Petya 16.05.2012 19:02:08

Здравствуйте, как я понял, мне нужно создать два файла, один - это 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] => арао )

Ответить

Admin Admin 16.05.2012 19:04:44

Да, поскольку используется PHP-код.

Ответить

Petya Petya 16.05.2012 19:13:13

теперь выдает Array ( [id] => 0 [page_id] => 150 [name] => Петр [text_comment] => Все хорошо )) ) Это как вообще?

Ответить

Petya Petya 22.05.2012 17:30:04

Как мне сделать, чтоб просто выводило Имя и комментарий?

Ответить

Admin Admin 22.05.2012 17:31:14

Вы не умеете работать с массивами? Очень плохо... Найдите в Google материалы по работе с массивами в PHP, посмотрите, что это такое, как они создаются, как считываются значения.

Ответить

Petya Petya 23.05.2012 16:15:05

Разобрался, сделал. Теперь у меня вопрос по поводу проверки на ввод данных! Нужно чтобы выводились сообщения если не введено имя и текст комментария. Что-то не получается (( $log ==""; $error="no"; //флаг наличия ошибки if($name == ''){ $log .= "Пожалуйста, введите Ваше имя<br>"; $error = "yes"; } //Проверка наличия введенного текста комментария if (empty($text_comment)){ $log .= "Необходимо указать текст сообщения!<br>"; $error = "yes"; } Подскажите, что не так?

Ответить

Admin Admin 23.05.2012 17:31:45

$log ==""; - это не присваивание, а сравнение.

Ответить

Petya Petya 23.05.2012 18:02:05

и ещё, у меня русские буквы не отображаются. Я пишу <meta content="text/html; charset=utf8"> но ничего не меняется (

Ответить

Admin Admin 23.05.2012 18:17:42

http://myrusakov.ru/php-encoding-problems.html

Ответить

Frederico Frederico 01.01.2013 00:37:59

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

Ответить

ken15 ken15 06.06.2012 13:28:14

Михаил, у меня на сайте около каждого(входящего или исходящего) сообщения стоит ссылка \ответитть\ но, я сделал что-то типа диалогов, как сделать ссылку в этом случае

Ответить

Admin Admin 06.06.2012 18:52:01

В этом случае, при нажатии на "ответить" должна отправляться уже заполненная форма.

Ответить

schpunt schpunt 01.07.2012 20:52:12

Михайл я новичок, все вроде сделал но комент как и у предыдущего человека в базу данных попадает но на странице его нет. Ну да ладно это я со временем разберусь у меня другой вопрос "код вывода комментария на страницу должен находиться на странице comment.php ??? т.e на той-же странице что и код обработки.

Ответить

Admin Admin 01.07.2012 20:53:35

Можно и так, а можно в разных файлах - это не так важно.

Ответить

schpunt schpunt 01.07.2012 21:00:07

Ёще один вопросик, а как код понимает в каком месте страницы ему отобразить комментарий.С формой то все понятно она четко прописана а вот место где комментарий выводиться не очень понятно.

Ответить

Admin Admin 01.07.2012 21:02:05

Комментарий выводится в примере через print_r(). Вот где этот print_r и будет написан, в том месте и появится комментарий.

Ответить

schpunt schpunt 01.07.2012 21:38:51

Тяжеловато((( видно не созрел я ((. Спасибо огромное все очень пригодилось

Ответить

schpunt schpunt 01.07.2012 22:30:04

И все таки не дает мне покоя этот каменный цветок "print_r" где его писать-то Как всегда не понятна элементарная штука как код понимает в каком месте HTML Страницы отображать комментарии не сбоку и не в верху а четко над формой добавления комментария.

Ответить

Admin Admin 01.07.2012 23:35:56

Так Вы выводите print_r() перед HTML-тегом формы.

Ответить

malina95 malina95 10.08.2012 04:52:12

Михаил, у меня возникла ошибка в коде...Можете подсказать как её устранить? Собственно сама ошибка : Fatal error: Call to a member function fetch_assoc() on a non-object in Z:\home\malina.local\www\index.php on line 53

Ответить

Admin Admin 10.08.2012 13:37:28

Значит в запросе была ошибка. Всегда лучше проверять, что он вернул, а потом уже делать fetch_assoc()

Ответить

malina95 malina95 05.09.2012 18:38:24

Да кстати я заметил что в новом денвере нет полезности как "$mysqli = new mysqli(...)" Вы не знаете почему её убрали?

Ответить

Admin Admin 06.09.2012 19:01:48

Не знаю где Вы берете такую версию Денвера. У меня всё работало.

Ответить

malina95 malina95 06.09.2012 19:12:25

Позавчера скачал...и переустановил, ну раз переустановил решил что нибудь написать и увмдел что он ругается на оба файла на одну и туже ошибку Parce error $mysqli->query;

Ответить

Admin Admin 06.09.2012 19:22:11

Странно. Я давно обновлял, но насколько я помню там можно было установить и старую версию, более стабильную.

Ответить

malina95 malina95 06.09.2012 19:28:34

Всмысле про старую версию

Ответить

Admin Admin 06.09.2012 19:35:43

Там есть версия на старом PHP 5.2

Ответить

malina95 malina95 10.09.2012 20:13:49

Извините, дурак он и в африке дурак...Я забыл установить соединение с бд пожтому он и ругался

Ответить

snup snup 13.11.2016 03:36:57

Сделай так: while ($row = mysql_fetch_assoc($result_set)) { print_r($row); //Вывод комментариев echo "<br />"; }

Ответить

Martin Martin 20.12.2013 11:10:07

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

Ответить

malina95 malina95 15.09.2012 22:46:33

А всё таки... Как быть если надо вставить код в сообщение, а все теги становятся просто текстом!!! Как быть в такой ситуации?

Ответить

Ksu Ksu 09.10.2012 19:19:34

Здравствуйте. Не знаю как это убрать... Комментарии добавляются нормально, но в таком виде: Array ( [id] => 0 [page_id] => 150 [name] => Ксю [text_comment] => Пампампам... ) Как сделать что бы нормально было?

Ответить

Admin Admin 09.10.2012 19:33:18

Выводите каждое значение массива отдельно. Желательно сразу в красивый шаблон. Сейчас у Вас просто распечатывается содержимое массива.

Ответить

Ksu Ksu 09.10.2012 19:34:52

Спасибо))

Ответить

yurashura yurashura 23.01.2013 19:17:11

Ксюша пришлите пожалуйста выведение каждого массива в кодовом вырвжении

Ответить

89182315462 89182315462 16.10.2012 16:00:24

Михаил сделал вроде бы все, как написано в статье, но нажимаю ,,Сохранить,, появляется вот это 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 В чем причина...

Ответить

Admin Admin 16.10.2012 20:57:50

База у Вас не создана, либо неправильные данные для подключения к ней, из-за этого ошибка.

Ответить

Ricco Ricco 23.10.2012 16:26:16

в базу не заноситься русский текст, кодировка колонки стоит utf-8 general_ci почему кирилицы нету?

Ответить

Admin Admin 23.10.2012 20:34:43

Может на самом сервере кодировка не установлена: http://myrusakov.ru/php-encoding-problems.html

Ответить

promaks promaks 16.07.2013 12:35:35

Достаточно просто создать базу данных и ввести её данные в формы или необходимо создать таблицу в базе данных. Спасибо.

Ответить

Admin Admin 16.07.2013 13:36:59

Почитайте про структуру базы данных: http://myrusakov.ru/struktura-basy-dannyh.html

Ответить

promaks promaks 16.07.2013 15:37:00

Структура понятна. А для начинающих скриншот таблицы базы данных для комментариев можно? Буду очень признателен.

Ответить

Admin Admin 16.07.2013 21:01:05

В этой статье написано всё.

Ответить

Frederico Frederico 23.10.2012 16:20:11

Последние два тега добавлять в comment.php?

Ответить

Admin Admin 23.10.2012 20:35:06

Один в comment.php другой на саму страницу.

Ответить

Frederico Frederico 23.10.2012 20:39:24

Все сделал правильно, но вот что получается: на странице на которой разрешено комментирование появляется поле имени, комментария, а под ним такое: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 Что делать?

Ответить

Admin Admin 23.10.2012 20:40:50

Базы данных у Вас нет, либо она по-другому называется.

Ответить

Frederico Frederico 23.10.2012 20:42:19

Где писать название?

Ответить

Frederico Frederico 24.10.2012 13:15:13

Это нужно то что Вы написали просто скопировать и все?

Ответить

Admin Admin 24.10.2012 18:30:51

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

Ответить

Frederico Frederico 24.10.2012 19:08:50

Куда именно писать данные? Какие данные нужно вводить?

Ответить

Admin Admin 24.10.2012 19:20:38

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

Ответить

Adrenalin Adrenalin 26.10.2012 14:48:09

После того как я создал таблицу, мне самому нужно прописать в ней id, page_id, name и text_comment? Или же это всё пропишится само по себе после нажатия на кнопку "Отправить"? Ответ нужен срочно!

Ответить

Adrenalin Adrenalin 26.10.2012 14:55:30

Что значит: "В value должен находиться уникальный идентификатор текущей страницы"? На примере Ти задал 150. Мне нужно на каждой странице где будет форма комментов задавать разные числа (не повторять их)? А эти числа будут сами записываться в таблицу, или мне и там нужно прописывать их?

Ответить

Admin Admin 26.10.2012 19:35:24

Таблицу нужно полностью создать, в коде из статьи нет sql-команд на создание таблицы. Идентификатор должен подставлять движок, если у Вас множество страниц с разным id.

Ответить

Adrenalin Adrenalin 26.10.2012 20:07:27

У меня всего 5 статических страниц на которых я хочу вставить комменты! Что делать?

Ответить

Admin Admin 27.10.2012 18:47:08

Пишите id вручную для каждой страницы, раз они статические.

Ответить

kva191098 kva191098 06.11.2012 03:19:30

Привет всем !!! Скажите куда мне добовлять последний код <?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 />"; } ?> Теперь если его надо вставить в самом начале как мне добавить под формой коментарии добавить тег для записи коментариев

Ответить

Admin Admin 06.11.2012 09:49:00

В той части страницы, где выводятся комментарии.

Ответить

Adrenalin Adrenalin 07.11.2012 00:14:29

Как исправить такую проблемку? Вместе с именем и текстом на страницу выводится: Array ( [id] => 2 [page_id] => 6 [name] => Руслан [text_comment] => А это текст комментария!!! )

Ответить

Admin Admin 07.11.2012 10:01:41

Выводите каждое значение массива отдельно. Желательно сразу в красивый шаблон. Сейчас у Вас просто распечатывается содержимое массива.

Ответить

Adrenalin Adrenalin 07.11.2012 17:44:13

Понял, но не всё! Я делал всё по этому уроку. В коде вывода комментариев у тебя нет этих значений масива??? Дай пожалуйста код который выводит каждое значение массива отдельно.

Ответить

Admin Admin 07.11.2012 18:51:13

Вы не знаете, как работать с массивом? Не знаете, что такое ключ и значение? Забрасывайте немедленно этот скрипт, и изучайте самые-самые основы с нуля. Особенно внимательно читайте про массивы. И пока досконально не будете знать и понимать эту тему, бесполезно и бессмысленно двигаться дальше.

Ответить

Adrenalin Adrenalin 14.11.2012 04:38:37

Что-то у меня это всё не идёт! Я дико извиняюсь, но дай мне пожалуйста код, который выведет все записи правильно (каждое значение массива отдельно).

Ответить

Admin Admin 14.11.2012 06:52:18

Мне не тяжело подсказать, вот: "<b>".$row["name"]."</b>: ".$row["text_comment"]; Только проку от моей подсказки не много, если Вы самых-самых основ не знаете: http://myrusakov.ru/php-how-study.html

Ответить

nazi6a nazi6a 18.12.2012 21:04:37

Здравствуйте у меня на все это дело выдает ошибку: 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, откуда оно должно брать значение, не совсем поняла с этим.

Ответить

Admin Admin 18.12.2012 21:25:09

В comment.php в 76-й строке происходит вывод, либо через echo, либо просто пробел какой-нибудь за пределами <?php ?>, либо HTML-код начинается. Вот этого вывода не должно быть перед session_start (видимо, от него ошибка идёт). Что находиться в value должно, зависит от Вашего движка, как он отличает одну страницу от другой. Либо если комментирование каких-то статей, то как он отличает одну статью от другой. Обычно это ID, но по-разному бывает.

Ответить

nazi6a nazi6a 18.12.2012 21:30:52

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>

Ответить

Admin Admin 18.12.2012 21:33:11

header() не может быть после самого первого вывода HTML-кода, например. Всю эту обработку надо отправить вверх, а весь HTML-код вниз.

Ответить

nazi6a nazi6a 18.12.2012 21:36:39

вытащила из html кода на верх все равно тоже

Ответить

Admin Admin 18.12.2012 21:39:15

Вы поняли, в чём была ошибка или нет? header() - функция, отправляющая заголовок, то, что там Вы выводите - это уже тело. Не может быть тело раньше головы. На основании этого, определите ещё одну ошибку и исправьте её. Единственное, что Вы ещё не обязаны знать - это то, что кодировка должна быть строго UTF-8 без BOM (а не просто UTF-8), всё остальное Вы сейчас в состоянии исправить.

Ответить

Frederico Frederico 01.01.2013 15:17:26

Это означает, что кодировка должна быть такой: ANSI as UTF-8?

Ответить

Admin Admin 01.01.2013 16:07:01

В notepad++ будет написано так.

Ответить

yurashura yurashura 21.01.2013 12:31:33

Уважаемый Михаил! Я с трудом осваиваю вашу программу по комментариям на странице сайта. НО! Со страницы HTML в базу данных перемещаю записи сделанные на этой странице. НО! Не понимаю как вывести записи из базы данных на страницу HTML. Как второй код PHP должен передавать текст сообщения на страницу с HTML. Спасибо

Ответить

Admin Admin 21.01.2013 20:50:52

Чтобы создавать подобные скрипты, нужно знать всю базу по PHP: http://myrusakov.ru/php-how-study.html

Ответить

yurashura yurashura 21.01.2013 21:46:41

Спасибо Михаил. Но второй php код у Вас вывешен и куда его? Вставлять?

Ответить

Admin Admin 22.01.2013 10:37:24

На страницу, на которой должны выводиться комментарии.

Ответить

yurashura yurashura 22.01.2013 23:40:14

Михаил! И последний вопрос! Как избавиться от "мусора":Array ( [id] => [page_id] => 150 [name] =>Вася [text_comment] => Как помочь? )

Ответить

Admin Admin 23.01.2013 10:15:06

echo $comment["name"].": ".$comment["text_comment"];

Ответить

yurashura yurashura 23.01.2013 12:21:52

Миша! Поправил echo $comment["name"].": ".$comment["text_comment"]; Ничего не изменилось! Вот и думаю... А содержание учебных дисков так же с недосказонностью?

Ответить

Admin Admin 23.01.2013 20:44:25

А что здесь недосказанного? В курсе разбирается всё с нуля. А если Вы, проигнорировав мой совет прочитать статью, по-прежнему продолжаете спрашивать про комментарии, хотя там чётко я написал про "спецов", подобных Вам (прямо Вашу задачу описал про вывод массива). К сожалению, такие невнимательные ученики не способны научиться создавать сайты. Надо внимательно читать то, что я даю, тогда вопрос про то как вывести массив Вы бы не задали. Вы себе даже представить не можете, насколько он "начален", это 1-е занятие самого лёгкого курса для самых-самых начинающих, и Вы задаёте вопрос в той теме, которая рассчитана уже на более-менее опытных. Такое ощущение, что первоклассник пришёл к студентам и задаёт им вопрос, сколько будет 2*2.

Ответить

yurashura yurashura 04.02.2013 22:14:58

Михаил! Все что у Вас здесь издано по поводу комментариев на странице сайта работает на денвере. Правда не достаточно корректно. А в "поле" на хостинге УВЫ! Пришлось создать таблицы под каждую страницу и основательно переработать коды PHP. И обращаться к серверу в php.ini Спасибо за искру к знаниям.

Ответить

shamil shamil 28.03.2013 13:54:21

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

Ответить

Admin Admin 28.03.2013 15:54:41

Его надо не искать, а самому написать. А если не можете, то ознакомьтесь с этой статьёй: http://myrusakov.ru/php-how-study.html

Ответить

shamil shamil 29.03.2013 09:31:43

понятно, я создал поле "data", там выходит:0000.00.00 тепорь осталось вывести в MySQL текущую дату,как это сделать,нашел предпологаемый код: mysqli>SELECT something FROM `comments` WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; но он вроде неполный.как написать правильно?спасибо,прошу прщения за частые темы

Ответить

Admin Admin 29.03.2013 09:47:49

Храните в базе UNIX_TIMESTAMP, то есть то, что возвращается в PHP функцией time().

Ответить

shamil shamil 29.03.2013 10:06:14

не понял. а начало кода с $rs=.........

Ответить

shamil shamil 29.03.2013 11:26:04

везде пишут SELECT unix_timestamp(now()); а как вставлять код,непонятно

Ответить

Admin Admin 29.03.2013 12:28:44

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

Ответить

shamil shamil 02.04.2013 15:25:06

здравствуйте,в этом скрипте,хотел добавить отправку на емайл.вот часть кода: $to = "3vek@list.ru"; $subject="Письмо от ".$name; писмо приходит,но пустым.как сделать правильно запрос,помогите разобратьса.спасибо

Ответить

Admin Admin 02.04.2013 15:52:05

http://myrusakov.ru/email-php.html

Ответить

shamil shamil 02.04.2013 16:41:31

ник не могу вывести $subject = "Robot - Робот";

Ответить

papajustify papajustify 05.04.2013 17:11:20

Михаил, вопрос о форме комментариев через виджеты соц. сетей. Для моего сайта с точки зрения поисковика в этом есть какой-либо плюс? Считается ли обновлением контента появление комментариев на странице моего сайта, если сами эти комментарии принадлежат соц.сети?

Ответить

Admin Admin 05.04.2013 21:17:05

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

Ответить

shamil shamil 08.04.2013 11:03:12

здравствуйте,можно ли найти урок,как добавить регистрацию для комментариев?не для всего сайта,а для добавления комментария.

Ответить

Admin Admin 08.04.2013 19:18:08

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

Ответить

MrDawn MrDawn 12.04.2013 16:55:18

Привет, Михаил - как создать таблицу в базе данных , не понимаю , файл создать что ли .Хочу поставить комментарии на одну страницу . Сайт у меня на бесплатном хостинге

Ответить

Admin Admin 12.04.2013 21:17:12

На бесплатном хостинге никак, скорее всего. А вообще через phpmyadmin создаётся.

Ответить

MrDawn MrDawn 12.04.2013 21:21:42

там есть phpmyadmin

Ответить

Admin Admin 12.04.2013 21:22:54

http://myrusakov.ru/phpmyadmin-table.html

Ответить

Indever2 Indever2 13.04.2013 18:03:57

Не знаю даже...У меня вроде всё правильно, только в БД ничего не сохраняется...Даже ошибки не выдаёт никакой. Скрин:http://forum.php.su/printfile.php?action=attach&img=yes&f=1&t=8338&id=2

Ответить

Admin Admin 13.04.2013 21:14:51

http://myrusakov.ru/php-finderror.html

Ответить

Super BeLka Super BeLka 29.04.2013 21:28:49

верно ли будет такая строка print_r ($row["name"]);print_r ($row["text_comment"]); //Вывод комментариев если не сложно подскажите как можно поставить пробел между name и text_comment. А то слитно отображается!

Ответить

Admin Admin 30.04.2013 04:18:11

echo $row["name"]; и echo $row["text_comment"]; достаточно

Ответить

shamil shamil 06.05.2013 11:52:51

как можно сделать ,чтобы новые комментарии были внизу $result_set = $mysqli->query("SELECT * FROM `comments` WHERE `page_id`='$page_id'");

Ответить

Admin Admin 06.05.2013 12:09:39

Отсортировать по дате в запросе через ORDER BY `поле_отвечающее_за_дату`. Безусловно, это поле нужно так же создать и в нём должно быть значение, отвечающее за дату и время создания комментария.

Ответить

shamil shamil 06.05.2013 12:47:36

а какое значение отвечает за дату?

Ответить

Admin Admin 06.05.2013 12:51:20

Например, количество секунд, прошедших с полуночи 01.01.1970, с таким форматом проще будет работать потом.

Ответить

alexandr_93 alexandr_93 21.05.2013 19:24:57

Комментарии сделал, все отлично работает! Михаил, подскажите, а как теперь вывести количество оставленных пользователями комментариев под каждой статьей?

Ответить

Admin Admin 21.05.2013 21:14:43

Есть массив с комментариями и есть функция count(), не вижу проблем.

Ответить

Andru543 Andru543 02.06.2013 15:40:50

Здравствуйте, Михаил!Я всё сделал и решил сделать форму, но как только начал делать текст комментария в одну строку.Я уже перепробовал много стиле в 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> Если будет время помогите пожалуйста.С уважением, Андрей.

Ответить

Eks1g1 Eks1g1 03.07.2013 04:24:14

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

Ответить

Admin Admin 03.07.2013 04:26:05

http://myrusakov.ru/php-template.html

Ответить

shamil shamil 20.08.2013 10:04:55

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

Ответить

Admin Admin 20.08.2013 18:24:15

Этот пример можно применить где угодно.

Ответить

Dima2000%. Dima2000%. 08.09.2013 15:37:59

А как добавить ещё аватарку к комментарием с сервиса Gravatar?

Ответить

Tatiana Tatiana 21.09.2013 12:52:32

Добрый день! Михаил, я сделала вроде как у вас написано (создала таблицу в phpMyAdmin, сделала файл comment.php и внесла туда данные по приему и выводу комментариев, добавила код комментария на сайт но: 1. не прописывается имя в форме для комментариев, 2. при нажатии на кнопку "отправить" возвращаюсь на ту же страницу без комментария. Подскажите в чем причина? Заранее спасибо!

Ответить

Admin Admin 21.09.2013 19:47:25

Для начала вручную проверить sql запрос в phpmyadmin.

Ответить

Tatiana Tatiana 24.09.2013 23:36:28

Вот что выдает sql запрос: SELECT * FROM `comments` WHERE 1 Сейчас при нажатии на кнопку "отправить" попадаю на пустую страницу с адресом: www.сайт.ru/comment.php

Ответить

Admin Admin 25.09.2013 19:26:51

Он должен вернуть хоть что-то. У Вас база не пустая же.

Ответить

Gitara200026 Gitara200026 15.11.2013 18:35:53

Вот что появляется при нажатии на кнопку "отправить" Fatal error: Class 'mysqli' not found in /home/k/kopatel345.hut4.ru/WWW/comment.php on line 8 пожалуйста помогите

Ответить

Admin Admin 15.11.2013 19:51:58

На бесплатных хостингах, видимо, не заботятся о версиях PHP. Поэтому я и рекомендую использовать только платные, а создавать и тестировать можно всё на denwer. Что касается хостинга, то рекомендую этот: http://myrusakov.ru/review-hostia.html

Ответить

Gitara200026 Gitara200026 15.11.2013 20:12:13

А точно причина в этом?

Ответить

alexandrdante alexandrdante 15.11.2013 21:25:41

Да,причина точно в этом. На вашем хостинге используется PHP 4.3.9. PHP стало работать с mysqli c версии 5 Используйте хотя бы дешёвые платные хостинги. Или же измените запрос в соответствии с PHP более старых версий

Ответить

krasavchek krasavchek 05.05.2014 10:49:04

Здравствуйте, Михаил! К вам такая некая просьба Выложите на свой отдельный Блог видео-урок "Древовидный вид комментариев(поддерживающий аватар пользователя,редактирование и удаления комментария)"(как у вас на сайте). Было бы очень полезно для многих!

Ответить

Сильвер Сильвер 19.02.2014 20:34:35

Михаил, здравствуйте. Скажите, я точно все правильно понял? Создал базу данных db, в ней таблицу comments и поля с названиями по вашему примеру, вставил html-код в index.html, создал файл comment.php, куда целиком поместил ваш PHP-код. На моей странице появились поля заполнения с "именем" и "комментарием". Захотел проверить, вписал туда несколько слов, жму кнопку "отправить" и ничего на страницу не выводится, никаких ошибок тоже не выдается. Посмотрел еще раз таблицу, а там почему-то каждая написанная буква текста заменена на знак "?", но мой восклицательный знак был определен. Подскажите пожалуйста, в чем возможная причина.

Ответить

tikkiwiki tikkiwiki 24.02.2014 13:24:56

Илья, здравствуйте. Похоже проблема в кодировке, используйте UTF-8.

Ответить

sugarcult sugarcult 21.05.2014 08:09:00

Специально зарегистрировалась, чтобы сказать, что у Вас, Михаил, стальные нервы. Некоторые вопросы это нечто :)

Ответить

horan horan 13.07.2014 14:49:48

Здравствуй,Михаил! У тебя на сайте на каждый комментарий можно ответить. После ответа комментарий выводиться "правее" изначального. Вопрос такой: как это реализовать?в какую сторону копать? P.S. пишу сайт с нуля. С php дружу)

Ответить

Minetrader Minetrader 03.12.2014 19:48:08

хотел бы тоже узнать, у меня есть идея: добавить в базе данных поле ref(например), где будет написан id сообщения на который был дан ответ, а так же в файле вывода: проверять при добавлении каждого сообщения нету ли для него ref

Ответить

forcomp forcomp 21.02.2015 11:53:27

Михаил, подскажите, пожалуйста, как снизу комментария сделать ссылку "Ответить" и что бы при этом открывалась небольшая форма? Спасибо.

Ответить

baravas812 baravas812 02.03.2015 12:53:49

Добрый день.После добавления последнего кода на страницу у меня вылетает ошибка в строке while ($row = $result_set->fetch_assoc()) { А также футер сайта пропадает. При удалении кода все нормально. В чем может быть проблема?

Ответить

baravas812 baravas812 02.03.2015 15:34:59

Исправил ошибку сам. Спасибо вам за статью http://myrusakov.ru/php-fetchassoc.html

Ответить

baravas812 baravas812 02.03.2015 17:12:32

Еще такой вопрос. При отправлении комментария выдает 404 ошибку. В чем может быть проблема?

Ответить

amal.1996 amal.1996 07.09.2015 05:39:59

Здравствуйте пожалуйста помогите мне! создание комментария на сайте как бы мое домашнее задание. А я был занят и мне нужен полный код на php без всяких исправлений. Пожалуйста очень прошу

Ответить

Ilia Ilia 24.02.2016 17:36:55

А как из этого "Array ( [id] => 7 [name] => 1 [text_post] => 1 )" сделать пост?

Ответить

kamila291088 kamila291088 08.06.2016 13:49:35

Здраствуте я использовала для сайта чтобы друзия коментировали мой сайт 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 или будет так все ясно вам сказала вам

Ответить

serega73serega serega73serega 18.10.2016 22:07:29

Михаил, здравствуйте! Там в коде прописан логин и пароль, а если злоумышленники возьмут и войдут в базу данных, пускай даже только в эту. Здесь кодировать не нужно? И данные надо вводить от своей созданной базы данных?

Ответить

serega73serega serega73serega 18.10.2016 22:39:38

У меня такая ошибка -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 . Почему не знаете?

Ответить

snup snup 13.11.2016 03:38:52

Как сделать что-бы не перезагружалось видео при добавление коммента добавляю коммент видео заново начинает играть с начало подскажите пожалуйста. Ещё один вопрос тут где мы пишем все комменты это аналог системы что вы написали выше ?

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.