Kenpack
Сержант
Сообщений: 37
У нас с: Jan 2014
|
RE: Построение дерева иерархии или дерева комментариев
У меня получился такой результат: на одной странице я сделал все родительские комментарии, а на 2 странице 1 родительский и 4 дочерних, причём 3 из них отображаются, а 4 дочерний на другую страницу перешел, да ещё и не отображается. Я ещё сделал тест, я добавил 1 дочерний коммент к родительскому в 1 странице, когда там уже 5 комментов (предел) то дочерний не добавляется, то есть не отображается, да ещё возможно добавляет 1 пустую страницу, если нету места вообще.
Весь код у меня такой
Код:
<?php
session_start();
include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
if (isset($_COOKIE['auto']) and isset($_COOKIE['name']) and isset($_COOKIE['password']))
{//если есть необходимые переменные
if ($_COOKIE['auto'] == 'yes') { // если пользователь желает входить автоматически, то запускаем сессии
$_SESSION['password']=strrev(md5($_COOKIE['password']))."b3p6f"; //в куках пароль был не зашифрованный, а в сессиях обычно храним зашифрованный
$_SESSION['name']=$_COOKIE['name'];//сессия с логином
$_SESSION['id']=$_COOKIE['id'];//идентификатор пользователя
}
}
if (!empty($_SESSION['name']) and !empty($_SESSION['password']))
{
//если существет логин и пароль в сессиях, то проверяем их и извлекаем аватар
$name = $_SESSION['name'];
$password = $_SESSION['password'];
$result2 = mysql_query("SELECT id,avatar FROM users WHERE name='$name' AND password='$password' AND activation='1'",$db);
$myrow2 = mysql_fetch_array($result2);
//извлекаем нужные данные о пользователе
}
$link = mysql_connect("localhost", "Danil", "1234561") or die("Could not connect: " . mysql_error());
mysql_select_db("comment", $link);
$_SESSION[full_url]=mysql_real_escape_string(basename($_SERVER['REQUEST_URI']));
$_SESSION[mess_url]=strtok($_SESSION[full_url], '?');
if (isset($_POST[contr_cod])) {
$_SESSION[comment_mess_login]=$_POST[mess_login];
$_SESSION[comment_user_text]=$_POST[user_text];
if (get_magic_quotes_gpc()=="0") {
$_SESSION[comment_mess_login]=mysql_real_escape_string($_SESSION[comment_mess_login]);
$_SESSION[comment_user_text]=mysql_real_escape_string($_SESSION[comment_user_text]);
}
$_SESSION[comment_mess_login]=htmlspecialchars($_POST[mess_login]);
$_SESSION[comment_user_text]=htmlspecialchars($_POST[user_text]);
if (md5($_POST[contr_cod])==$_POST[prov_summa]) {
if (isset($_POST[parent_id])) $result = mysql_query("insert into comment (parent_id,first_parent,date,theme,login,message) values ('".$_POST[parent_id]."','".$_POST[first_parent]."','".date("Y-m-d H:i:s")."','".$_SESSION[mess_url]."','".$_SESSION[comment_mess_login]."','".$_SESSION[comment_user_text]."')");
else $result = mysql_query("insert into comment (date,theme,login,message) values ('".date("Y-m-d H:i:s")."','".$_SESSION[mess_url]."','".$_SESSION[comment_mess_login]."','".$_SESSION[comment_user_text]."')");
$_SESSION[send]='Комментарий принят и ожидает модерации.';
$_SESSION[comment_mess_login]='';
$_SESSION[comment_user_text]='';
header("Location: $_SESSION[mess_url]#last");
exit;
}
else {
$_SESSION[send] = "Неверный проверочный код!";
header("Location: $_SESSION[mess_url]#last");
exit;
}
}
?>
<?php
if (!empty($_SERVER['HTTP_CLIENT_IP']))
$ip=$_SERVER['HTTP_CLIENT_IP'];
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
else $ip=$_SERVER['REMOTE_ADDR'];
$ip_position=strpos($ip,',');
if ($ip_position>0) $ip_short=substr($ip, 0, $ip_position);
else $ip_short=$ip;
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Сайт</title>
<style type="text/css">
.spoiler_body {display:none;}
.spoiler_link {cursor:pointer;}
.open_hint {margin:5px 0px 0px 0px; width:100px; border: 1px solid #4874a3; cursor:pointer; background:#afeeee;}
</style>
</head>
<script type="text/javascript"
src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.spoiler_link').click(function(){
$(this).parent().children('div.spoiler_body').toggle('normal');
return false;
});
});
</script>
<body>
<?php
if (!isset($myrow2['avatar']) or $myrow2['avatar']=='')
{
if (isset($_COOKIE['name']))
{
echo ' value="'.$_COOKIE['name'].'">';
}
if (isset($_COOKIE['password']))
{
echo ' value="'.$_COOKIE['password'].'">';
}
print <<<HERE
<p><a href='vxod.php'>Авторизация</a></p>
HERE;
}
else
{
print <<<HERE
<img alt='$_SESSION[name]' src='$myrow2[avatar]' class='avatar_menu_user'><a href='user.php?id=$_SESSION[id]'>Моя страница</a>
HERE;
}
?>
<?php
echo '<div id="last" align="center">';
echo '<form method="POST" action="'.$_SESSION[mess_url].'#last">';
echo '<table border="0" style="border: 1px solid #4874a3;
border-radius:8px;" bgcolor="#7799ee" cellspacing="4" align="center">';
echo '<tr><td colspan="2" align="center">';
echo '<b>Добавить комментарий к теме:</b><br>';
$prov_cod=rand(1000,9980); $prov_cod_2=rand(1,19);
echo '<textarea cols="65" rows="5" name="user_text" required>'
.$_SESSION[comment_user_text].'</textarea><br>';
echo '</td></tr><tr><td width="300">';
echo '<b>Ваше имя: </b><input type="text" name="mess_login" maxlength="20"
value="'.$_SESSION['name'].'" required>';
echo '</td><td align="right">';
echo '<b>'.$prov_cod.' + '.$prov_cod_2.' = </b>';
echo '<input type="hidden" name="prov_summa" value="'.md5($prov_cod+$prov_cod_2).'">';
echo '<input type="text" name="contr_cod" maxlength="4" size="4" required>';
echo '<input type="submit" value="Отправить"></td></tr></table></form>';
$_SESSION[comment_mess_login]='';
$_SESSION[comment_user_text]='';
if (isset($_SESSION[send])and($_SESSION[send]!="")) {
echo '<font color="red"><b>'.$_SESSION[send].'</b></font>';
$_SESSION[send]="";
}
echo '</div>';
?>
<table border="0" width="555" align="center">
<tr>
<td>
<hr>
<div style="border: 2px solid Cornflowerblue; padding:4px; border-radius:5px;">
<?php
function col_pages($count, $this, $radius) {
$j=0; $out=""; $td='<td width="35" bgcolor="lightgreen">';
if (($this-$radius)<1) $i=1;
else $i=$this-$radius;
if ($i==1) $i++;
if (($count-($radius*2+1))<$i) $i=$count-($radius*2+1);
if ($i<2) $i=2;
if ($this!=1)
$out.=$td.'<a href="'.$_SESSION[mess_url].'?comment_list=1">1</a></td>';
else $out.=$td.'<b>[ 1 ]</b></td>';
if ($i>2) $out.=$td.'...</td>';
while ((($i<=($this+$radius)) or ($j<($radius*2+1))) and ($i<$count)) {
if ($i!==$this)
$out.=$td.'<a href="'.$_SESSION[mess_url].'?comment_list='.$i.'">'.$i.'</a></td>';
else $out.=$td.'<b>[ '.$i.' ]</b></td>';
$i++; $j++;
}
if ($i<$count) $out.=$td.'...</td>';
if ($count>1) {
if ($count!=$this)
$out.=$td.'<a href="'.$_SESSION[mess_url].'?comment_list='.$count.'">
'.$count.'</a></td>';
else $out.=$td.'<b>[ '.$count.' ]</b></td>';
}
return $out;
}
if (is_numeric($_POST[comment_id])and($_POST[ocenka]=='0' or $_POST[ocenka]=='1')){
$result = mysql_query("SELECT count(id),ocenka FROM ocenka_comment WHERE comment_id='".$_POST[comment_id]."' and ip='".$ip_short."'", $link);
$number = mysql_fetch_array($result);
if ($number[0]==0) {
$result = mysql_query("insert into ocenka_comment (date,comment_id,ip,ocenka)
values ('".date("Y-m-d H:i:s")."','".$_POST[comment_id]."','".$ip_short."','".$_POST[ocenka]."')"); }
elseif ($number[ocenka]!=$_POST[ocenka]) {
$result = mysql_query("UPDATE ocenka_comment
SET date='".date("Y-m-d H:i:s")."',ocenka='".$_POST[ocenka]."'
WHERE comment_id='".$_POST[comment_id]."' and ip='".$ip_short."'"); }
}
if (is_numeric($_GET[comment_list]) and $_GET[comment_list]>0) {
if ($_GET[comment_list]>$count_list) $comment_list=$count_list;
else $comment_list=$_GET[comment_list];
}
else $comment_list=1;
if ($comment_list==0) $comment_list=1;
$result = mysql_query("SELECT * FROM comment WHERE theme='".$_SESSION[mess_url]."' and moderation=1 and first_parent=0", $link);
$count_list=floor((mysql_num_rows($result)-1)/5)+1;
if (is_numeric($_GET[comment_list]) and $_GET[comment_list]>0) {
if ($_GET[comment_list]>$count_list) $comment_list=$count_list;
else $comment_list=$_GET[comment_list];
}
else $comment_list=1;
if ($comment_list==0) $comment_list=1;
$result = mysql_query("SELECT * FROM comment WHERE theme='".$_SESSION[mess_url]."' and moderation=1 ORDER BY id LIMIT ".($comment_list*5-5).",5", $link);
$number = mysql_num_rows($result);
$zapros='';
for ($n=1; $n<=$number; $n++) {
$parents[$n]=mysql_fetch_array($result);
$zapros.=$parents[$n][id].','.$parents[$n][id].',';
}
$zapros=substr($zapros, 0, -1);
$result = mysql_query("SELECT * FROM comment WHERE theme='".$_SESSION[mess_url]."' and moderation=1 and id IN(".$zapros.") ORDER BY id desc", $link);
$result2 = mysql_query("SELECT * FROM comment WHERE theme='".$_SESSION[mess_url]."' and moderation=1 and first_parent IN(".$zapros.") ORDER BY id", $link);
$number = mysql_num_rows($result);
if ($number>0) {
echo '<hr><div align="center" style="padding:3px; border-radius:5px;">
<u><b>Последние комментарии посетителей:</b></u><br>';
function parents($parent=0,$left=0) {
global $tags;
for ($i=0;$i<=count($tags[$parent])-1;$i++) {
$result_minus = mysql_query("SELECT sum(ocenka=1), sum(ocenka=0) FROM ocenka_comment WHERE comment_id='".$tags[$parent][$i][0]."' LIMIT 1");
$ocenka_com=mysql_fetch_array($result_minus);
if ($tags[$parent][$i][2]=='Administrator') $tags[$parent][$i][2]='<font color="#cc1111">Administrator</font>';
if ($tags[$parent][$i][4]==0) $tags[$parent][$i][4]=$tags[$parent][$i][0];
echo '<div align="right" style="margin:0px 0px 0px '.$left.'px;">';
echo '<br><table border="0" width="95%" style="border: 1px solid #4874a3;" bgcolor="#fffabc"><tr>';
echo '<td align="left" style="padding:5px 5px 5px 5px;">';
echo '<div id="m'.$tags[$parent][$i][0].'"></div><b>'.$tags[$parent][$i][2].'</b></td>';
echo '<td width="140">';
echo '<span style="font-size:12px;">('.$tags[$parent][$i][3].')</span></td>';
echo '<td width="20" >';
echo '<form method="POST" action="'.$_SESSION[mess_url].'#m'.$tags[$parent][$i][0].'">';
echo '<input type="hidden" name="comment_id" value="'.$tags[$parent][$i][0].'">';
echo '<input type="hidden" name="ocenka" value="1">';
echo '<input type="image" src="comm_up.gif" title="Хороший комментарий" align="middle">';
echo '</form></td>';
echo '<td width="5"><b>'.($ocenka_com[0]-$ocenka_com[1]).'</b></td>';
echo '<td width="20">';
echo '<form method="POST" action="'.$_SESSION[mess_url].'#m'.$tags[$parent][$i][0].'">';
echo '<input type="hidden" name="comment_id" value="'.$tags[$parent][$i][0].'">';
echo '<input type="hidden" name="ocenka" value="0">';
echo '<input type="image" src="comm_down.gif" title="Плохой комментарий" align="middle">';
echo '</form></td></tr></table>';
echo '<table border="0" width="95%" style="border: 1px solid #eeeeee;"bgcolor="#f0fff0">';
echo '<td>';
if (($ocenka_com[0]-$ocenka_com[1])<0)
echo '<div><a href="javscript://" class="spoiler_link">Показать / скрыть плохой комментарий</a><div class="spoiler_body">'.wordwrap(nl2br($tags[$parent][$i][1]), 70, "\n", 1).'</div></div>';
else echo wordwrap(nl2br($tags[$parent][$i][1]), 70, "\n", 1);
echo '</td></tr></table>';
echo '<div align="center" class="open_hint" onClick="comm_on('.$tags[$parent][$i][0].','.$tags[$parent][$i][6].')">Ответить</div>';
if (isset($tags[ $tags[$parent][$i][0] ])) parents($tags[$parent][$i][0],20);
echo '</div>';
}
}
}
else echo '<hr>';
while ($comments=mysql_fetch_assoc($result)) $tags[(int)$comments['parent_id']][]=array((int)$comments['id'], $comments['message'], $comments['login'], $comments['date'], $comments['plus'], $comments['minus'], $comments['first_parent'] );
while ($comments=mysql_fetch_assoc($result2)) $tags[(int)$comments['parent_id']][]=array((int)$comments['id'], $comments['message'], $comments['login'], $comments['date'], $comments['plus'], $comments['minus'], $comments['first_parent'] );
echo parents().'</div>';
echo '<table style="border: 1px solid #4874a3;" cellspacing="2" cellpadding="0">';
echo '<tr align="center">';
echo '<td bgcolor="lightgreen" width="65">';
if ($comment_list>1) echo '<a href="'.$_SESSION[mess_url].'">В начало</a>';
else echo 'В начало';
echo '</td>';
echo '<td bgcolor="lightgreen" width="65">';
if ($comment_list>1) echo '<a href="'.$_SESSION[mess_url].'?comment_list='.($comment_list-1).'">Назад</a>';
else echo 'Назад';
echo '</td>';
echo col_pages((int)$count_list, (int)$comment_list, 3);
echo '<td bgcolor="lightgreen" width="65">';
if ($comment_list<$count_list) echo '<a href="'.$_SESSION[mess_url].'?comment_list='.($comment_list+1).'">Вперед</a>';
else echo 'Вперед';
echo '</td>';
echo '<td bgcolor="lightgreen" width="65">';
if ($comment_list<$count_list) echo '<a href="'.$_SESSION[mess_url].'?comment_list='.$count_list.'">В конец</a>';
else echo 'В конец';
echo '</td>';
echo '</tr>';
echo '</table>';
?>
<div id="hint" style="position:absolute; display: none;">
<?php echo '<form name="add_comment" method="POST" action="'.$_SESSION[mess_url].'#last">'; ?>
<table border="0" style="border: 1px solid #4874a3; border-radius:8px;" bgcolor="#7799ee" cellspacing="4" align="center">
<tr>
<td colspan="2" style="cursor:pointer;" align="right"><font color="Lawngreen"><div id="close_hint"><b>Закрыть[x]</b></div></font>
<?php
$prov_cod=rand(100,980); $prov_cod_2=rand(1,19);
echo '<textarea cols="65" rows="5" name="user_text" required>'.$_SESSION[comment_user_text].'</textarea>';
echo '</td></tr><tr><td width="300">';
echo '<b>Ваше имя: </b><input type="text" name="mess_login" maxlength="20" value="'.$_SESSION[comment_mess_login].'" required>';
echo '</td><td align="right">';
echo '<b>'.$prov_cod.' + '.$prov_cod_2.' = </b>';
echo '<input type="hidden" name="prov_summa" value="'.md5($prov_cod+$prov_cod_2).'">';
?>
<input type="text" name="contr_cod" maxlength="4" size="4" required>
<input type="hidden" name="parent_id" value="0">
<input type="hidden" name="first_parent" value="0">
<input type="submit" value="Отправить">
</td>
</tr>
</table>
</form>
</div>
</div>
</td>
</tr>
</table>
<script type="text/javascript"
src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$('html').mousemove(function(e){
$('.open_hint').click(function(){
$('#hint').fadeIn(700);
$('#hint').offset({top:e.pageY+15, left:e.pageX-550});
return false;
});
});
$('#close_hint').click(function(){
$('#hint').fadeOut(700);
return false;
});
</script>
<script type="text/javascript">
function comm_on(p_id,first_p) {
document.add_comment.parent_id.value = p_id;
document.add_comment.first_parent.value = first_p;
}
</script>
</body>
</html>
У меня ещё один вопрос возник, точнее я забыл его задать в первый раз. Как например отключить оценку комментирования от имени Administrator? А то просто люди проголосуют против администратора и придётся открывать коммент.
|
|