За последние 24 часа нас посетили 25840 программистов и 1726 роботов. Сейчас ищут 825 программистов ...

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

Тема в разделе "PHP и базы данных", создана пользователем hunter0k, 31 мар 2016.

  1. hunter0k

    hunter0k Активный пользователь

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

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

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    у меня не получается выполнить это силой мысли. будь добр описать словами в чём загвоздка, что происходит. ты вывод ошибок включал? остояние переменных контролировыал?
    phpfaq.ru/debug

    Добавлено спустя 2 минуты 31 секунду:
    используй [code=php] вместо [code] чтобы твоя куча букв хотябы была синтаксически подсвечена.
     
  3. hunter0k

    hunter0k Активный пользователь

    С нами с:
    15 мар 2016
    Сообщения:
    18
    Симпатии:
    0
    В принципе активация коментов проходит, только она проходит сразу для всех комментариев. Вот сижу ломаю голову какое условие прописать, чтобы проходила активация только для конкретного комментария конкретного пользователя.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    В таких случаях выручает var_dump($_POST) — смотришь что пришло и понимаешь как обратиться к нуным данным.

    "конкретный", это когда указан id этого коментария/пользователя, правильно? иначе он будет неконкретный. вот и указывай где-то свою конкретику. а потом используй её.
    — К.О.
     
  5. hunter0k

    hunter0k Активный пользователь

    С нами с:
    15 мар 2016
    Сообщения:
    18
    Симпатии:
    0
    id комментария Row[id] нужно поставить в условие, ток как это правильно сделать? В php я не силен.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    хороший повод стать силеном.