За последние 24 часа нас посетили 17153 программиста и 1607 роботов. Сейчас ищут 1217 программистов ...

Зона комментариев

Тема в разделе "PHP для новичков", создана пользователем Oogily, 13 мар 2020.

  1. Oogily

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

    С нами с:
    25 авг 2009
    Сообщения:
    33
    Симпатии:
    1
    Добрый день! Есть страница, на которой нужно вывести комментарии. Выводит так:
    (картинка 1 во вложении)
    А хотелось бы так:
    (картинка 2 во вложении)
    В общем, задача заключается в сворачивании "ответов" в один спойлер (не каждый в своём, а все в одном),
    ещё, если не затруднит, можете посоветовать другой спойлер, не <details>
    Код:
    (!!! много букв !!!)
    PHP:
    1. <!-- PHP SETTINGS BEGIN -->
    2.  
    3.  
    4. <?php
    5. $time=time();
    6.  
    7. $db=mysqli_connect("localhost","id12877352_qwerty","qwerty","id12877352_commets") or die();
    8. $res=mysqli_query($db,"set names utf8");
    9.  
    10. $mess_url='https://3forum.000webhostapp.com/index.php';
    11.  
    12. //получаем id текущей темы
    13. $res=mysqli_query($db,"SELECT id FROM таблица WHERE file_name='".$mess_url."'");
    14. $res=mysqli_fetch_array($res);
    15. $theme_id=0;
    16.  
    17. if (isset($_POST["contr_cod"])){    //отправлен комментарий
    18. $mess_login=htmlspecialchars($_POST["mess_login"]);
    19. $user_text=htmlspecialchars($_POST["user_text"]);
    20. if (md5($_POST["contr_cod"])==$_POST["prov_summa"]){    //код правильный
    21.   if ($mess_login!='' and $user_text!=''){
    22.    if (is_numeric($_POST["parent_id"]) and is_numeric($_POST["f_parent"]))
    23.     $res=mysqli_query($db,"insert into comment
    24.    (parent_id, first_parent, date, theme_id, login, message)
    25.    values ('".$_POST["parent_id"]."','".$_POST["f_parent"]."',
    26.    '".$time."','".$theme_id."','".$mess_login."','".$user_text."')");
    27.    else $res=mysqli_query($db,"insert into comment (date, theme_id, login, message)
    28.   values ('".$time."','".$theme_id."','".$mess_login."','".$user_text."')");
    29.     $_SESSION["send"]="Комментарий принят!";
    30.     header("Location: index.php#last"); #exit;
    31.  }
    32.   else {
    33.    $_SESSION["send"]="Не все поля заполнены!";
    34.    header("Location: index.php#last"); #exit;
    35.  }
    36. }
    37. else {
    38.   $_SESSION["send"]="Неверный проверочный код!";
    39.   header("Location: index.php#last"); #exit;
    40. }
    41. }
    42.  
    43. if (isset($_SESSION["send"]) and $_SESSION["send"]!="") {    //вывод сообщения
    44.     echo '<script type="text/javascript">alert("'.$_SESSION["send"].'");</script>';
    45.     $_SESSION["send"]="";
    46. }
    47. ?>
    48.  
    49.  
    50. <!-- PHP SETTINGS END -->
    51.  
    52.  
    53. <!-- HTML BEGIN -->
    54.  
    55.  
    56. <html lang="ru">
    57. <head>
    58.     <meta charset="UTF-8">
    59.     <link rel="icon" href="images/favicon.ico">
    60.     <title>3 форум - </title>
    61.     <style type="text/css">
    62.         .header {
    63.             height: 120px;
    64.             background-color: green;
    65.             margin: 5px;
    66.             border: 2px solid #DFD;
    67.         }
    68.         .content {
    69.             background-color: green;
    70.             margin: 5px;
    71.         }
    72.         .footer {
    73.             background-color: green;
    74.             margin: 5px;
    75.         }
    76.         .add_comment {
    77.             display: table;
    78.             width: 580px;
    79.             border: 1px solid #000;
    80.             background-color: #6AF;
    81.         }
    82.         .close_hint, .open_hint {
    83.             float: right;
    84.             border: 1px solid #77A;
    85.             background: #6e6;
    86.             width: 100px;
    87.             text-align: center;
    88.             cursor: pointer;
    89.         }
    90.         .close_hint { margin: 5px; color: #F00; }
    91.             .comm_body { padding: 0 5px; background-color: #EEE; text-align:left; }
    92.             .comm_head { padding: 3px; border: 1px solid #77A; background-color: #DFD; }
    93.             .comm_minus { background: url('images/minus.png') no-repeat; }
    94.             .comm_plus { background: url('images/plus.png') no-repeat; }
    95.             .comm_minus, .comm_plus {
    96.             float: right;
    97.             width: 19px;
    98.             height: 18px;
    99.             cursor: pointer;
    100.         }
    101.         .comm_text { display: none; }
    102.         .sp_link { color: #F33; cursor: pointer; }
    103.         .strelka {
    104.             background: url(images/strelka.png) no-repeat;
    105.             border-left: 2px solid #000;
    106.         }
    107.         .strelka_2 { background: url(images/strelka_2.png) no-repeat; }
    108.         #hint { position: absolute; display: none; z-index: 100; }
    109.     </style>
    110.     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    111.     <script type="text/javascript">
    112. //Добавление в форму отправки комментария значений id родительских комментариев
    113. function comm_on(p_id,first_p){
    114.     document.add_comment.parent_id.value=p_id;
    115.     document.add_comment.f_parent.value=first_p;
    116. }
    117.  
    118. $(document).ready(function(){
    119. //Показать скрытое под спойлером сообщение
    120. $(".sp_link").click(function(){
    121.     $(this).parent().children(".comm_text").toggle("normal");
    122. });
    123.  
    124. //Показать форму ответа на имеющийся комментарий
    125. $(".open_hint").click(function(){
    126.     $("#hint").animate({
    127.         top: $(this).offset().top + 25, left: $(document).width()/2 -
    128.         $("#hint").width()/2
    129.     }, 400).fadeIn(800);
    130. });
    131.  
    132. //Скрыть форму ответа на имеющийся комментарий
    133. $(".close_hint").click(function(){ $("#hint").fadeOut(1200); });
    134.  
    135. //Получение id оцененного комментария
    136. $(".comm_plus,.comm_minus").click(function(){
    137.     id_comm=$(this).parents(".comm_head").attr("id").substr(1);
    138. });
    139.  
    140. //Отправление оценки комментария в файл rating_comm.php
    141. $(".comm_plus").click(function(){
    142.     jQuery.post("rating_comm.php",{comm_id:id_comm,ocenka:1},rating_comm);
    143. });
    144. $(".comm_minus").click(function(){
    145.     jQuery.post("rating_comm.php",{comm_id:id_comm,ocenka:0},rating_comm);
    146. });
    147.  
    148. //Возврат рейтинга комментария и его обновление
    149. function rating_comm(data){
    150.     $("#rating_comm"+id_comm).fadeOut(800,function(){
    151.         $(this).html(data).fadeIn(800);
    152.     });
    153. }
    154. });
    155. </script>
    156. </head>
    157. <body background="images/bg.jpg">
    158.     <div class="header">
    159.         <h1>header</h1>
    160.     </div>
    161.     <div class="content">
    162.         <h1>content</h1>
    163.      
    164.      
    165.         <!-- COMMENTS AREA BEGIN -->
    166.      
    167.         <!-- COMMENTS LIST AREA BEGIN -->
    168. <?php
    169. function parents($up=0, $left=0) {    //Строим иерархическое дерево комментариев
    170. global $tag,$mess_url;
    171.  
    172. for ($i=0; $i<=count($tag[$up])-1; $i++) {
    173. //Можно выделять цветом указанные логины
    174. if ($tag[$up][$i][2]=='Admin') $tag[$up][$i][2]='<font color="#C00">Admin</font>';
    175. if ($tag[$up][$i][6]==0) $tag[$up][$i][6]=$tag[$up][$i][0];
    176. //Высчитываем рейтинг комментария
    177. $sum=$tag[$up][$i][4]-$tag[$up][$i][5];
    178. if ($up==0) echo '<div style="padding:5px 0 0 0;">';
    179. else {
    180.     if (count($tag[$up])-1!=$i)
    181.         echo '<div class="strelka" style="padding:5px 0 0 '.($left-2).'px;">'; #тут открываем комментарий со стрелкой влево
    182.    else echo '<div class="strelka_2" style="padding:5px 0 0 '.$left.'px;">'; #иначе тут открываем комментарий со вниз стрелкой влево
    183. }
    184. echo '<div class="comm_head" id="m'.$tag[$up][$i][0].'">';
    185. echo '<div style="float:left;"><b>'.$tag[$up][$i][2].'</b></div>';
    186. echo '<div class="comm_minus"></div>';
    187. echo '<div style="float:right; width:30px;" id="rating_comm'.$tag[$up][$i][0].'">';
    188. echo '<b>'.$sum.'</b></div><div class="comm_plus"></div>';
    189. echo '<a style="float:right; width:70px;" href="'.$mess_url.'#m';
    190. echo $tag[$up][$i][0].'"># '.$tag[$up][$i][0].'</a>';
    191. echo '<div style="float:right; width:170px;">';
    192. echo '('.date("H:i:s d.m.Y", $tag[$up][$i][3]).' г.)</div>';
    193. echo '<div style="clear:both;"></div></div>';
    194. echo '<div class="comm_body">';
    195. #if ($sum<0) echo '<u class="sp_link">Показать/скрыть</u><div class="comm_text">';
    196. echo '<div style="word-wrap:break-word;">';
    197. echo str_replace("<br />","<br>",nl2br($tag[$up][$i][1])).'</div>';
    198. echo '<div class="open_hint" onClick="comm_on('.$tag[$up][$i][0].',
    199.     '.$tag[$up][$i][6].')">Ответить</div><div style="clear:both;"></div></div>';
    200.  
    201. if (isset($tag[ $tag[$up][$i][0] ])) parents($tag[$up][$i][0],20); #ну а тут закрываем все стрелки
    202. echo '</div>';
    203. }
    204. }
    205.  
    206. $res=mysqli_query($db,"SELECT * FROM comment
    207.    WHERE theme_id='".$theme_id."' ORDER BY id"); #and moderation=1
    208. $number=mysqli_num_rows($res);
    209.  
    210. if ($number>0) {
    211. echo '<div style="border:1px solid #000000;padding:5px;text-align:center;">';
    212. echo '<b>Последние комментарии:</b><br>';
    213. while ($com=mysqli_fetch_assoc($res))
    214.     $tag[(int)$com["parent_id"]][] = array((int)$com["id"], $com["message"],
    215.     $com["login"], $com["date"], $com["plus"], $com["minus"], $com["first_parent"]);
    216. echo parents().'</div><br>';
    217. }
    218. ?>
    219.      
    220.         <!-- COMMENTS LIST AREA END -->
    221.      
    222. <?php
    223. $cod=rand(1,5); $cod2=rand(5,10);
    224. echo '<div id="last" align="center">';
    225. echo '<form method="POST" action="'.$mess_url.'#last" class="add_comment"';
    226. echo 'name="add_comment" id="hint"><div class="close_hint">Закрыть</div>';
    227. echo '<textarea cols="68" rows="5" name="user_text"></textarea>';
    228. echo '<div style="margin:5px; float:left;">';
    229. echo 'Имя: <input type="text" name="mess_login" maxlength="20" value=""></div>';
    230.  
    231. echo '<div style="margin:5px; float:right;">'.$cod.' + '.$cod2.' = ';
    232. echo '<input type="hidden" name="prov_summa" value="'.md5($cod+$cod2).'">';
    233. echo '<input type="hidden" name="parent_id" value="0">';
    234. echo '<input type="hidden" name="f_parent" value="0">';
    235. echo '<input type="text" name="contr_cod" maxlength="4" size="4">&nbsp;';
    236. echo '<input type="submit" value="Отправить"></div>';
    237. echo '</form>';
    238.  
    239. echo '<form method="POST" action="'.$mess_url.'#last" class="add_comment">';
    240. echo 'Добавить комментарий:';
    241. echo '<textarea cols="68" rows="5" name="user_text"></textarea>';
    242. echo '<div style="margin:5px; float:left;">';
    243. echo 'Имя: <input type="text" name="mess_login" maxlength="20" value=""></div>';
    244. echo '<div style="margin:5px; float:right;">'.$cod.' + '.$cod2.' = ';
    245. echo '<input type="hidden" name="prov_summa" value="'.md5($cod+$cod2).'">';
    246. echo '<input type="text" name="contr_cod" maxlength="4" size="4">&nbsp;';
    247. echo '<input type="submit" value="Отправить"></div>';
    248. echo '</form></div>';
    249. ?>
    250.      
    251.         <!-- COMMENTS AREA END -->
    252.      
    253.     </div>
    254.     <div class="footer">
    255.         <h1>footer</h1>
    256.     </div>
    257. </body>
    258. </html>
    259.  
    260.  
    261. <!-- HTML END -->
    Простите за немного зеленоватый оттенок и краткость содержания, страница в разработке. Заранее очень благодарен за подсказанное решение.
    картинка 1.PNG картинка 2.PNG
    Если будут нужны какие-либо другие элементы страницы, пишите, отправлю!