С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 5

Добавление комментариев с премодерацией

31.03.2016, 11:32. Показов 1383. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня не получается сделать премодерацию при добавлении комментариев. То есть, если пользователь добавил коммент и пока администратор его не активирует, комментарий не будет виден всем пользователям. Вот весь скрипт модуля:

main.php:
Кликните здесь для просмотра всего текста

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
function COMMENTS() {global $CONNECT, $Module, $Page, $Param;
if ($_SESSION['USER_LOGIN_IN'] != 1 and !$_SESSION['USER_LOGIN']) {
/*Форма коментариев для гостей*/
$Avatar = 0; echo '<br/><a href="#login_form" style="margin-left:50%" id="button">Войти</a>
<br/><br/><img src="/resource/avatar/'.$Avatar.'.jpg" width="80" height="74" alt="Аватар" align="left" id="avatar" style="cursor:pointer;margin:0 5px 0 0" />
        <form method="POST" action="/comments/add/module/'.$Page.'/id/'.$Param['id'].'">
        <textarea id="message" name="text" placeholder="Текст сообщения" maxlength="990" onkeypress="return isNotMax(event)" required></textarea>
        <br/><input type="submit" name="enter" value="Отправить" style="margin-left:97px" />
        <input type="hidden" name="user_id" value="'.$_SESSION['USER_ID'].'">
        </form>
        <br><br>';}
        
/*Форма коментариев для пользователей*/
else {$Avatar = (empty($_SESSION['USER_AVATAR'])) ? 0 : $_SESSION['USER_AVATAR'].'/'.$_SESSION['USER_ID'];
    echo '<div><br/><br/><ul id="soc"><li>
    <img src="/resource/avatar/'.$Avatar.'.jpg" width="80" height="74" alt="Аватар" align="left" id="avatar" style="cursor:pointer;margin:0 5px 0 0" />
    <ul style="top:-48px"><li><div id="count" style="padding:5px 5px 24px 5px"> 
    <a href="/profile" id="link">Профиль</a><br><a href="/account/logout" id="link">Выход</a>
    </li></ul></li></ul>
    <form method="POST" action="/comments/add/module/'.$Page.'/id/'.$Param['id'].'">
    <textarea id="message" name="text" placeholder="Текст сообщения" maxlength="990" onkeypress="return isNotMax(event)" required></textarea>
    <br/><input type="submit" name="enter" value="Отправить" style="margin-left:97px" />
    <input type="hidden" name="user_id" value="'.$_SESSION['USER_ID'].'" />
    </form></div><br/><br/>';}
$ID = ModuleID($Page);
$Param['page'] = (!$Param['page']) ? 1 :  $Param['page'];
    
$sql = "SELECT c.`id`, c.`text`, c.user_id, c.`active`, DATE_FORMAT(c.`date`, '%d.%m.%Y, %H:%i:%s') AS date, u.avatar, u.login, u.name, u.group, u.email, u.regdate FROM `comments` AS c LEFT JOIN `users` AS u ON u.id = c.user_id WHERE c.`module` = $ID AND c.`material` = '".$Param['id']."' ORDER BY c.`id` DESC";
$Result = mysqli_query($CONNECT, $sql) or die( mysqli_error($CONNECT) );
while ($Row = mysqli_fetch_assoc($Result)) {
if (!$Row['active'] and $_SESSION['USER_GROUP'] != 2 and $Row['id']) $wait='<span> (Комментарий ожидает модерации)</span>';  
/*Активация коментов*/ if (!$Row['active'] != $_SESSION['USER_ID'] and $Row['user_id'] OR $_SESSION['group'] == 2) $Active = ' [ <a href="/comments/control/id/'.$Row['id'].'/command/active">Активировать</a> ]';
/*Управление коментами*/ $Admin = ''; if ($_SESSION['USER_ID'] == $Row['user_id'] OR $_SESSION['group'] == 2)    $Admin = ' [ <a href="/comments/control/action/edit/id/'.$Row['id'].'">Редактировать</a> ] [ <a href="#del">Удалить</a> ]<a href="" class="overlay" id="del"></a>
<div id="popup" style="margin-top:-37px;min-height:3em"><hr id="hr" />
<p id="logtext" style="font-size:13pt;margin:9px 0 9px 0">Предупреждение</p>
<h4>Вы действительно хотите удалить?</h4>
<div id="yes"><br/><a href="/comments/control/action/delete/id/'.$Row['id'].'" id="yes">Да </a><a href="#1" id="no">Нет</a></div></div>';
            
        // Если есть настройка позволяющая редактировать комментарии.
        if ($Row['id'] == $_SESSION['COMMENTS_EDIT']) 
            $Row['text'] = '<form method="POST" action="/comments/control">
                <textarea id="comedit" name="text" placeholder="Текст сообщения" maxlength="990" onkeypress="return isNotMax(event)" required>'.$Row['text'].'</textarea>
                <br/><input type="submit" name="save" value="Сохранить" /> <input type="submit" name="cancel" value="Отменить" /></form>';     
$Avatar = (empty($Row['avatar'])) ? 0 : $Row['avatar'].'/'.$Row['user_id'];
$Info = (empty($Row['name'])) ? '<b id="name">Аноним</b>' : '     
    <! --Информация о пользователе-- >
<span id="spoiler" tabindex="1"><a>'.$Row['name'].'</a>
    <div class="spoiler">
        <b>Группа:</b> ('.UserGroup($Row['group']).')
        <br/><b>Имя:</b> '.$Row['name'].'
        <br/><b>E-mail:</b> '.HideEmail($Row['email']).'
        <br/><b>Дата регистрации:</b> '.$Row['regdate'].'</p>
         <a href="" style="position:relative;top:-83px;left:293px" id="close"></a>
    </div></span>';
    
echo '<img src="/resource/avatar/'.$Avatar.'.jpg" width="60" height="60" alt="Аватар" align="left" id="avatar" />
        <div id="comments" style="margin-left:70px">'.$Info.$wait.'
            <span style="float:right">'.$Row['date'].$Admin.$Active.'</span><br/>'.$Row['text'].'</div><br/>';
}}
?>


add.php:
Кликните здесь для просмотра всего текста

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php 
if ($_SESSION['USER_GROUP'] == 2) $Active = 1;
else $Active = 0;
 
if ($_POST['enter'] and $_POST['text']) {
    $_POST['text'] = FormChars($_POST['text']);
    $ID = ModuleID($Param['module']);
    if ($ID == 1) 
        $Table = 'publ';
    else 
        if ($ID == 2) 
            $Table = 'loads';
    else 
        if ($ID == 3) 
            $Table = 'addons';
    
    $Row = mysqli_fetch_assoc(mysqli_query($CONNECT, 'SELECT `id` FROM `'.$Table.'` WHERE `id` = '.$Param['id']));
    if (!$Row['id']) 
        MessageSend(1, 'Материал не найден.', '/'.$Param['module']);
    $sql = "INSERT INTO `comments` SET `material` = ".$Param['id'].", `module` = $ID, `added` = '".$_SESSION[USER_LOGIN]."', `text` = '".$_POST['text']."', `date` = NOW(), `user_id` = '".(int)$_POST['user_id']."', `active` = $Active";
    mysqli_query($CONNECT, $sql) or die( mysqli_error($CONNECT) );
    MessageSend(3, 'Комментарий добавлен.', '/'.$Param['module'].'/material/id/'.$Param['id']);
}
?>


control.php:
Кликните здесь для просмотра всего текста

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if ($Param['action'] == 'delete') {
    mysqli_query($CONNECT, "DELETE FROM `comments` WHERE `id` = $Param[id]");
    MessageSend(3, 'Комментарий удален.');
 
} else if ($Param['action'] == 'edit') {
    $_SESSION['COMMENTS_EDIT'] = $Param['id'];
    exit(header('location: '.$_SERVER['HTTP_REFERER']));
 
    } else if ($_POST['save']) {
        mysqli_query($CONNECT, "UPDATE `comments` SET `text` = '$_POST[text]' WHERE `id` = $_SESSION[COMMENTS_EDIT]");
        unset($_SESSION['COMMENTS_EDIT']);
        MessageSend(3, 'Коментарий отредактирован.');   
    
        } else if ($_POST['cancel']) {
            unset($_SESSION['COMMENTS_EDIT']);
            MessageSend(3, 'Редактирование отмененно.');
            
            } else if ($Param['command'] == 'active') {
             mysqli_query($CONNECT, "UPDATE `comments` SET `active` = 1 WHERE `id` = $Param[id]");
             MessageSend(3, 'Комментарий активирован', '/addons/material/id/'.$Param['id']);
            }
?>


База данных phpmyadmin:
Кликните здесь для просмотра всего текста

PHP
1
2
3
4
5
6
7
8
id   - int
material  - int
module   - int
added     - varchar
text   - mediumtext
date  - datetime
user_id  - int
active    - int
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2016, 11:32
Ответы с готовыми решениями:

Добавление комментариев
Добрый день! пишу сразу я новичок, много чего пока не понимаю. Есть скрип добавление комментарии $mess =...

PHP добавление комментариев
Есть у кого скрипт для добавления комментариев , точнее нужен редактор добавить урл и тд. чтобы обрабатывал BBcode . P.S Я могу...

Добавление комментариев
Ребят,есть следующие строки: &lt;?php include(&quot;functions.php&quot;); $nomer = mysql_real_escape_string($_GET); $query=&quot;insert into...

7
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
31.03.2016, 11:41

Не по теме:

От этого кода хочется плакать...



Цитата Сообщение от Hunter0k Посмотреть сообщение
не получается сделать премодерацию
А что именно не получается? При создании записи записываем в базу 0, при редактировании даём возможность выбрать 1 или 0.
0
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 5
31.03.2016, 12:25  [ТС]
А как это прописать в условии?

Добавлено через 36 минут
В принципе активация коментов проходит, только она проходит сразу для всех комментариев. Вот сижу ломаю голову какое условие прописать, чтобы проходила активация только для конкретного комментария конкретного пользователя.
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
31.03.2016, 15:34
Флаг добавьте «опубликован/на премодерации».
0
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 5
01.04.2016, 14:26  [ТС]
Не не получается
0
 Аватар для arava
340 / 135 / 70
Регистрация: 30.06.2014
Сообщений: 717
01.04.2016, 17:19
Код не смотрел но делал похожую задачу,постараюсь пояснить принцип модерации словами.
В БД с вашей таблицей нужно добавить дополнительный столбик с названием к примеру "approved" и желательно типом данных TINYINT,этот тип позволяет вносить значения только 1 или 0.при создании столбца указать что по умолчанию создается строка со значением 0(default 0),т.е. не допущена к общему прочтению тема.
Далее в цикле while ($row=mysql_fetch_array($query) вывести запрос на выбор данных где столбик approved имеет значение 0,т.е. всех заявок которые не модерированы и создать гиперссылки которая будет выполнять сценарий который внесет в approved 1
Как то так...
0
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
01.04.2016, 20:15
Цитата Сообщение от arava Посмотреть сообщение
TINYINT,этот тип позволяет вносить значения только 1 или 0
это от куда такая информация?
На сколько я знаю
TINYINT это 1 байт и диапазон от -128 до 127
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
01.04.2016, 22:41
Цитата Сообщение от Hunter0k Посмотреть сообщение
Не не получается
Да ладно.

arava, Виталюска прав. А если беззнаковый, то соответственно 0-255. Ели хотите ограничить набор значений, объявляйте как внешний ключ.

Цитата Сообщение от arava Посмотреть сообщение
Далее в цикле while ($row=mysql_fetch_array($query) вывести запрос на выбор данных где столбик approved имеет значение 0,т.е. всех заявок которые не модерированы и создать гиперссылки которая будет выполнять сценарий который внесет в approved 1
Лучше бы начали с того, как вывести одобренные комменты, т.е. со значением 1. Остальное по идее можно сделать штатными средствами администрирования. В большинстве наших админок даже создание отдельной группы комментов на премодерации не потребовало бы программирования, хотя при невысокой частоте появления таких комментов я не вижу особой необходимости в их выделении в отдельную группу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.04.2016, 22:41
Помогаю со студенческими работами здесь

Добавление комментариев в БД
Хочу сделать форму добавления комментариев для новостного сайта. Саму форму я сделал, но вот заставить заносить данные в базу не могу. ...

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

Скрипт: добавление комментариев
Итак, есть задача, которая требует решения. Буду благодарна тем, кто поможет. Нашла бесплатный скрипт комментариев, который мне нужно...

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

Добавление комментариев на сайте
Доброго времени суток. На сайте подключен &quot;Комментирование через соц-сети&quot; Как мне сделать что бы не только через соц было авторизация, а...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru