Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 19.04.2016
Сообщений: 139

Коментирование статьи на php

19.11.2017, 22:17. Показов 587. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня вопрос. Как сделать добавление комментария в базу?)Я сделал вывод комментария к определённой статье . Связал таблицы, приравнял ид коммента и ид статьи.

вывод коммента
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
    if(isset($_GET['id'])){
        $sqlquery = "SELECT * FROM `comments` WHERE `id_news` = ".$_GET['id']."";
    }else{
        $sqlquery = "SELECT * FROM `comments` ORDER BY `id` DESC, `datetime`";
    }
    $sql = mysql_query($sqlquery) or die(mysql_error());
    while($row = mysql_fetch_array($sql)){
?>
        <?php echo $row['author']; ?>
        <?php echo $row['datetime']; ?><br>
        <?php echo $row['text']; ?>
                    <div style="clear: both;"><br></div>
    <?php } ?>
Спрашиваю почему? Потому, что не понимаю добавление так же делать приравниванием ид комента к статье или как.

форма

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<form name="comment" action="" method="post">
  <p>
    <label>Имя:</label>
    <input type="text" name="name" />
  </p>
  <p>
    <label>Комментарий:</label>
    <br />
    <textarea name="text_comment" cols="26" rows="3"></textarea>
  </p>
  <p>
    <input type="hidden" name="page_id" value="150" Что с этим валуе делать, зачем оно? />
    <input type="submit" value="Отправить" />
  </p>
</form>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.11.2017, 22:17
Ответы с готовыми решениями:

Простое комментирование статьи на PHP
Здраствуйте, как сделать самое простое комментирование стать на php? Есть 3 php документа со статьями str1-3.php. И в них нужно в блоке div...

Добавление картинки в вывод статьи на PHP
Здраствуйте, написал добавление статьи в базу и вывод. Проблема в том , что я хочу еще сделать добавление изображение и вывод с этой же...

Статьи через php и базы данных
Всем привет. Я вот посмотрел на сайтах и увидел, что менюшки ссылаются на такие вот ссылки: ...

12
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
19.11.2017, 23:29
Цитата Сообщение от Xelinel32 Посмотреть сообщение
Что с этим валуе делать, зачем оно?
Ловите его в $_POST['page_id'] и записываете в столбец id_news.
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
19.11.2017, 23:43
Xelinel32, что к чему вы собрались приравнивать? Снабдите добавляемый комментарий идентификатором статьи и все. Судя по значению action у вас POST-обработчик привязывается к адресу статьи, поэтому идентификатор можете брать непосредственно из адреса, как и при GET. GET-параметры можно использовать и в POST-запросах. Также можете заносить идентификатор в скрытое поле формы при GET и потом получать его, как один из POST-параметров. В любом случае перед вставкой комментария нужно проверять существование комментируемой статьи по id (есть и способ контроля наличия связи на уровне БД, но в данном случае обычно используется менее жесткий вариат, о котором я написал). Может, вы про это спрашивали?

По-моему в адресе проще передавать идентификатор, т.к. можно на первом этапе использовать унифицированный код проверки id для GET/POST.

Надеюсь, код выше учебный/упрощенный/неполный, потому что не увидел никакой защиты от получения "опасных" значений в id.
0
0 / 0 / 1
Регистрация: 19.04.2016
Сообщений: 139
20.11.2017, 13:17  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Ловите его в $_POST['page_id'] и записываете в столбец id_news.
Вот таблица в базе
Миниатюры
Коментирование статьи на php  
0
0 / 0 / 1
Регистрация: 19.04.2016
Сообщений: 139
20.11.2017, 18:31  [ТС]
Цитата Сообщение от Phantom-84 Посмотреть сообщение
что к чему вы собрались приравнивать? Снабдите добавляемый комментарий идентификатором статьи и все. Судя по значению action у вас POST-обработчик привязывается к адресу статьи, поэтому идентификатор можете брать непосредственно из адреса, как и при GET. GET-параметры можно использовать и в POST-запросах. Также можете заносить идентификатор в скрытое поле формы при GET и потом получать его, как один из POST-параметров. В любом случае перед вставкой комментария нужно проверять существование комментируемой статьи по id (есть и способ контроля наличия связи на уровне БД, но в данном случае обычно используется менее жесткий вариат, о котором я написал). Может, вы про это спрашивали?
По-моему в адресе проще передавать идентификатор, т.к. можно на первом этапе использовать унифицированный код проверки id для GET/POST.
Надеюсь, код выше учебный/упрощенный/неполный, потому что не увидел никакой защиты от получения "опасных" значений в id.
А как мне сделать , что бы поле с логином пользователя и даты было скрыто но заносилось в базу?
Вот поменял форму, вытягиваю из сессии логин и беру сегодняшнюю дату. Как мне скрыть эти поля от пользователей или убрать их редактирование?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<form name="comment" action="" method="post">
  <p>
    <label>Имя:</label>
    <input type="text" name="name" value="<?php echo $_SESSION['session_username'];?>" />
  </p>
   <p>
    <label>Дата:</label>
    <input type="text" name="name" value="<?php echo date("Y-m-d H:i:s"); ?>" />
  </p>
  <p>
    <label>Комментарий:</label>
    <br />
    <textarea name="text_comment" cols="26" rows="3"></textarea>
  </p>
  <p>
    <input type="hidden" name="page_id" value="150" />
    <input type="submit" value="Отправить" />
  </p>
</form>
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
20.11.2017, 20:04
PHP/HTML
1
<input type="hidden" name="name" value="<?php echo date("Y-m-d H:i:s"); ?>" />
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
20.11.2017, 20:35
Xelinel32, у вас же в исходнике был пример скрытого поля.

В БД нужно добавлять id пользователя, а не логин. Даже если пользователь - гость, можно попробовать выявить его наличие в БД по значению email. Дату через форму задавать не нужно. Это можно сделать непосредственно в POST-обработчике или даже настроить поле на автоматическую генерацию значения при добавлении записи.

Добавлено через 5 минут
Да, естественно, поле author и у новостей, и у комментариев должно хранить не ник/имя/логин, а числовой id.
0
0 / 0 / 1
Регистрация: 19.04.2016
Сообщений: 139
21.11.2017, 12:10  [ТС]
Цитата Сообщение от Phantom-84 Посмотреть сообщение
у вас же в исходнике был пример скрытого поля.
В БД нужно добавлять id пользователя, а не логин. Даже если пользователь - гость, можно попробовать выявить его наличие в БД по значению email. Дату через форму задавать не нужно. Это можно сделать непосредственно в POST-обработчике или даже настроить поле на автоматическую генерацию значения при добавлении записи.
Спасибо, разобрался. А как еще сделаить, что бы в новости выводило количество коментариев?
Вот вывод новости
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
?php
    if(isset($_GET['cat_id'])){
        $sqlquery = "SELECT * FROM `news` WHERE `id_category` = ".$_GET['cat_id']."";
    }else{
        $sqlquery = "SELECT * FROM `news` ORDER BY `id` DESC, `datetime`";
    }
    $sql = mysql_query($sqlquery) or die(mysql_error());
    while($row = mysql_fetch_array($sql)){
?>
    <div class="article">
            <a href="statia.php?id=<?php echo $row['id']; ?>"><img src="img/<?php echo($row['image']) ?>"></a>
            <a id="first" href="statia.php?id=<?php echo $row['id']; ?>"><?php echo($row['title']) ?></a>
            <span><?php echo($row['mini_text']) ?></span>
            <i class="fa fa-comment-o" aria-hidden="true">2</i> Количество коментов
            <i class="fa fa-eye" aria-hidden="true">1</i> Количество просмотров новости
                <i><?php echo($row['datetime']) ?></i>
</div>
    <?php } ?>
0
Особый статус
 Аватар для FloppyDisc
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
21.11.2017, 14:03
Цитата Сообщение от Xelinel32 Посмотреть сообщение
А как еще сделаить, что бы в новости выводило количество коментариев?
SQL
1
SELECT n.*, COUNT(c.comment) AS commentcount FROM `news` n LEFT JOIN `comments` c ON c.news_id = n.id
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
21.11.2017, 17:57
Цитата Сообщение от Xelinel32 Посмотреть сообщение
А как еще сделаить, что бы в новости выводило количество коментариев?
Лучше завести у новостей для этого отдельное поле и делать его инкремент/декремент триггерами по INSERT/DELETE на таблице комментариев.
0
0 / 0 / 1
Регистрация: 19.04.2016
Сообщений: 139
23.11.2017, 18:32  [ТС]
Цитата Сообщение от Phantom-84 Посмотреть сообщение
Xelinel32, у вас же в исходнике был пример скрытого поля.
В БД нужно добавлять id пользователя, а не логин. Даже если пользователь - гость, можно попробовать выявить его наличие в БД по значению email. Дату через форму задавать не нужно. Это можно сделать непосредственно в POST-обработчике или даже настроить поле на автоматическую генерацию значения при добавлении записи.
Добавлено через 5 минут
Да, естественно, поле author и у новостей, и у комментариев должно хранить не ник/имя/логин, а числовой id.
Все равно что-то не выходит. Я отправляю форму, ошибок не выводит все нормально, но значения в базу не заносит.
обработчик
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
  $mysqli = new mysqli("localhost", "Xelinel32", "ArT1999eM", "colevents");
  $name = $_POST["name"];
  $date = $_POST["datetime"];
  $page_id = $_POST["page_id"];
  $text_comment = $_POST["text_comment"];
  $name = htmlspecialchars($name);
  $text_comment = htmlspecialchars($text_comment);
  $mysqli->query("INSERT INTO `comments` (`name`, `page_id`, `text_comment`,`datetime`) VALUES ('$name', '$page_id', '$text_comment','$datetime')");
  header("Location: ".$_SERVER["HTTP_REFERER"]);
?>
Форма
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<form name="comment" action="phpscript/comments.php" method="post">
  <p>
    <label>Имя:</label>
    <input disabled="" class="inp" type="text" name="name" value="<?php echo $_SESSION['session_username'];?>" />
  </p>
   <p>
    <label>Дата:</label>
    <input class="inp" disabled=""  type="text" name="datetime" value="<?php echo date("Y-m-d H:i:s"); ?>" />
  </p>
  <p>
    <label>Комментарий:</label>
    <br />
    <textarea rows="4" cols="43" name="text_comment" cols="26" rows="3"></textarea>
  </p>
  <p>
    <input  type="hidden" name="page_id" value="" />
    <input id="bt" type="submit" value="Отправить" />
  </p>
</form>
Я не понял как добавить в скрытое поле id статьи и , что бы оно в обработчике его брало. Может через гет вытягивать, не понимаю(
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
23.11.2017, 19:14
Цитата Сообщение от Xelinel32 Посмотреть сообщение
Все равно что-то не выходит. Я отправляю форму, ошибок не выводит все нормально, но значения в базу не заносит.
Ну вы ничего из того, что я вам писал, не сделали, так что ничем помочь не могу.

Цитата Сообщение от Xelinel32 Посмотреть сообщение
Я не понял как добавить в скрытое поле id статьи и , что бы оно в обработчике его брало.
PHP/HTML
1
<input type="hidden" name="page_id" value="<?= $page['id'] ?>">
Цитата Сообщение от Xelinel32 Посмотреть сообщение
Может через гет вытягивать, не понимаю(
Я вам именно об этом писал. Идентификатор статьи определяете по адресу/из адреса, время берете прямо при вставке или совсем его опускаете, оставляя это на откуп БД, идентификатор пользователя тоже берете прямо при вставке (если пользователь авторизован, - из состояния авторизованного пользователя; если нет, то пытаетесь добавить пользователя и потом по уникальному email взять его id вложенным запросом прямо при вставке комментария*).

*
PHP
1
... VALUES ('.$page['id'].',IFNULL((SELECT `author` FROM `author` WHERE `email`="'.$email.'"),0),...
0 - это служебный идентификатор пользователя, чтобы комментарии не терялись в случае возникновения накладки.

Добавлено через 3 минуты
Наличие статьи в любом случае нужно проверять, прежде чем что-то делать (писал об этом в первом посте).

Добавлено через 6 минут
Когда вставляете автора, во избежание ошибки совпадения email (поле должно быть уникальным индексом) используйте INSERT IGNORE.
0
0 / 0 / 1
Регистрация: 19.04.2016
Сообщений: 139
23.11.2017, 21:05  [ТС]
Цитата Сообщение от Phantom-84 Посмотреть сообщение
Сообщение от Xelinel32
Все равно что-то не выходит. Я отправляю форму, ошибок не выводит все нормально, но значения в базу не заносит.
Ну вы ничего из того, что я вам писал, не сделали, так что ничем помочь не могу.
Сообщение от Xelinel32
Я не понял как добавить в скрытое поле id статьи и , что бы оно в обработчике его брало.
PHPHTMLВыделить код
1
<input type="hidden" name="page_id" value="<?= $page['id'] ?>">
Сообщение от Xelinel32
Может через гет вытягивать, не понимаю(
Я вам именно об этом писал. Идентификатор статьи определяете по адресу/из адреса, время берете прямо при вставке или совсем его опускаете, оставляя это на откуп БД, идентификатор пользователя тоже берете прямо при вставке (если пользователь авторизован, - из состояния авторизованного пользователя; если нет, то пытаетесь добавить пользователя и потом по уникальному email взять его id вложенным запросом прямо при вставке комментария*).
*
PHPВыделить код
1
... VALUES ('.$page['id'].',IFNULL((SELECT `author` FROM `author` WHERE `email`="'.$email.'"),0),...
0 - это служебный идентификатор пользователя, чтобы комментарии не терялись в случае возникновения накладки.
Добавлено через 3 минуты
Наличие статьи в любом случае нужно проверять, прежде чем что-то делать (писал об этом в первом посте).
Добавлено через 6 минут
Когда вставляете автора, во избежание ошибки совпадения email (поле должно быть уникальным индексом) используйте INSERT IGNORE.
Все огромное спасибо. В форме в валуе я написал
PHP
1
<?= $_GET['id']?>
А вот обработчик, все окей
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
  $mysqli = new mysqli("localhost", "Xelinel32", "ArT1999eM", "colevents");
  $name = $_POST["name"];
  $date = $_POST["datetime"];
  $id_news = $_POST["id_news"];
  $text_comment = $_POST["text_comment"];
  $name = htmlspecialchars($name);
  $text_comment = htmlspecialchars($text_comment);
  $mysqli->query("INSERT INTO `comments` (`author`, `id_news`, `text`,`datetime`) VALUES ('$name', '$id_news', '$text_comment','$date')");
  header("Location: ".$_SERVER["HTTP_REFERER"]);
?>
Хочу еще сделать проверки там на пустые поля. И вот вопрос когда ставлю в инпут disable поля отправляются в базу пустые, почему так? Не хочу hide прописывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.11.2017, 21:05
Помогаю со студенческими работами здесь

Как вывести статьи с определенной категорией на php на отдельной странице ?
-Таблица articles -id -title -text -pubdate -views -categorie_id -Таблица articles_categories -id

Статьи на php + css
Можете, очень срочно нужно, покажите пример вывода статей php+ html+ css пожайлуста

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

Как в php вывести ссылку на статьи по определенным категориям?
Есть учебный блог с разными статьями по категориям. Вот код вывода статей из одной категории categorie_id = 2 на странице &lt;?php ...

Коментирование кода
Привет всем) Помогите разобраться пожалуйста, желательно каждый шаг. using System; using System.Collections.Generic; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru