Добавление комментариев на сайт
В данной теме мы хотим предложить Вам скрипт для создания на своем сайте формы для добавления комментариев к темам сайта. Данная форма нужна для того, чтобы посетители Вашего сайта могли оставлять отзывы и пожелания к темам сайта, а также задавать вопросы и получать на них ответы от администрации и других посетителей сайта.
Ранее на нашем сайте уже была создана подобная тема, в которой мы рассказывали о том, как создать на своем сайте форму добавления комментариев к темам, но с момента ее создания прошло много времени и уже многое изменилось. В данной темы мы хотим показать улучшенную и оптимизированную версию той формы добавления комментариев для сайта.
Для полноценной работы скрипта, приведенного в данной теме, Вам понадобиться в MySQL создать две таблицы: comment и ocenka_comment.
В таблице comment будут храниться комментарии посетителей и вся необходимая информация о данных комментариях. В таблице ocenka_comment будут храниться последние оценки к комментариям, поставленные посетителями.
Структура обеих таблиц приведена на скриншотах ниже:
Таблица comment.
Таблица ocenka_comment.
Для быстрого создания таблиц comment и ocenka_comment, воспользуйтесь следующими SQL запросами, приведенными ниже. Для создания таблицы comment используйте код:
CREATE TABLE IF NOT EXISTS `comment` (
`id` int(9) unsigned NOT NULL auto_increment,
`parent_id` mediumint(9) unsigned NOT NULL default '0',
`first_parent` mediumint(9) unsigned NOT NULL default '0',
`date` int(10) unsigned NOT NULL,
`theme_id` smallint(6) unsigned NOT NULL,
`login` varchar(30) collate utf8_unicode_ci NOT NULL,
`message` varchar(9999) collate utf8_unicode_ci NOT NULL,
`moderation` tinyint(3) unsigned NOT NULL default '0',
`plus` mediumint(9) NOT NULL default '0',
`minus` mediumint(9) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `theme_id` (`theme_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;
А для создания таблицы ocenka_comment воспользуйтесь кодом:
CREATE TABLE IF NOT EXISTS `ocenka_comment` (
`id` int(10) unsigned NOT NULL auto_increment,
`date` int(10) unsigned NOT NULL,
`comment_id` mediumint(8) unsigned NOT NULL,
`ip` int(10) unsigned NOT NULL,
`ocenka` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;
В результате выполнения приведенных выше SQL запросов у Вас в MySQL должны появиться таблицы, как на скриншотах выше.
После того, как необходимые таблицы в MySQL были уже созданы, в начало Ваших страничек, на которых будет присутствовать форма добавления комментариев (выше тега <head>) поместите следующий PHP код, предназначенный для обработки отправленных сообщений:
<?php
$time=time();
if (session_id()=='') session_start();
$db=mysqli_connect("localhost","Ваш_логин","Ваш_пароль","Имя_базы") or die();
$res=mysqli_query($db,"set names utf8");
$mess_url=mysqli_real_escape_string($db,basename($_SERVER['SCRIPT_FILENAME']));
//получаем id текущей темы
$res=mysqli_query($db,"SELECT id FROM таблица WHERE file_name='".$mess_url."'");
$res=mysqli_fetch_array($res);
$theme_id=$res["id"];
if (isset($_POST["contr_cod"])){ //отправлен комментарий
$mess_login=htmlspecialchars($_POST["mess_login"]);
$user_text=htmlspecialchars($_POST["user_text"]);
if (md5($_POST["contr_cod"])==$_POST["prov_summa"]){ //код правильный
if ($mess_login!='' and $user_text!=''){
if (is_numeric($_POST["parent_id"]) and is_numeric($_POST["f_parent"]))
$res=mysqli_query($db,"insert into comment
(parent_id, first_parent, date, theme_id, login, message)
values ('".$_POST["parent_id"]."','".$_POST["f_parent"]."',
'".$time."','".$theme_id."','".$mess_login."','".$user_text."')");
else $res=mysqli_query($db,"insert into comment (date, theme_id, login, message)
values ('".$time."','".$theme_id."','".$mess_login."','".$user_text."')");
$_SESSION["send"]="Комментарий принят!";
header("Location: $mess_url#last"); exit;
}
else {
$_SESSION["send"]="Не все поля заполнены!";
header("Location: $mess_url#last"); exit;
}
}
else {
$_SESSION["send"]="Неверный проверочный код!";
header("Location: $mess_url#last"); exit;
}
}
if (isset($_SESSION["send"]) and $_SESSION["send"]!="") { //вывод сообщения
echo '<script type="text/javascript">alert("'.$_SESSION["send"].'");</script>';
$_SESSION["send"]="";
}
?>
Не забудьте при подключении к Вашей MySQL базе в функции mysqli_connect() указать Ваши логин, пароль и имя БД.
Хотим обратить Ваше внимание на еще один важный момент - получение id идентификатора текущей темы. Т.к. нам неизвестно, какая структура БД у Вас на сайте, то Вам этот момент придется доделать самим, а именно получить id темы и поместить его в переменную $theme_id. В коде id мы получаем запросом после комментария "//получаем id текущей темы".
Далее, для нормального отображения комментариев и формы добавления комментариев к темам сайта нам понадобятся CSS стили. Для этого добавьте себе следующий CSS код:
<style type="text/css">
.add_comment {
display: table;
width: 580px;
border: 1px solid #000;
background-color: #6AF;
}
.close_hint, .open_hint {
float: right;
border: 1px solid #77A;
background: #6e6;
width: 100px;
text-align: center;
cursor: pointer;
}
.close_hint { margin: 5px; color: #F00; }
.comm_body { padding: 0 5px; background-color: #EEE; text-align:left; }
.comm_head { padding: 3px; border: 1px solid #77A; background-color: #DFD; }
.comm_minus { background: url('image/minus.png') no-repeat; }
.comm_plus { background: url('image/plus.png') no-repeat; }
.comm_minus, .comm_plus {
float: right;
width: 19px;
height: 18px;
cursor: pointer;
}
.comm_text { display: none; }
.sp_link { color: #F33; cursor: pointer; }
.strelka {
background: url(image/strelka.png) no-repeat;
border-left: 2px solid #000;
}
.strelka_2 { background: url(image/strelka_2.png) no-repeat; }
#hint { position: absolute; display: none; z-index: 100; }
</style>
Теперь, после того, как БД создана, и стили прописаны, можно приступать к коду, отвечающему за вывод и добавление комментариев.
В том месте странички, где должны выводиться оставленные посетителями комментарии, добавляем следующий PHP код:
<?php
function parents($up=0, $left=0) { //Строим иерархическое дерево комментариев
global $tag,$mess_url;
for ($i=0; $i<=count($tag[$up])-1; $i++) {
//Можно выделять цветом указанные логины
if ($tag[$up][$i][2]=='Admin') $tag[$up][$i][2]='<font color="#C00">Admin</font>';
if ($tag[$up][$i][6]==0) $tag[$up][$i][6]=$tag[$up][$i][0];
//Высчитываем рейтинг комментария
$sum=$tag[$up][$i][4]-$tag[$up][$i][5];
if ($up==0) echo '<div style="padding:5px 0 0 0;">';
else {
if (count($tag[$up])-1!=$i)
echo '<div class="strelka" style="padding:5px 0 0 '.($left-2).'px;">';
else echo '<div class="strelka_2" style="padding:5px 0 0 '.$left.'px;">';
}
echo '<div class="comm_head" id="m'.$tag[$up][$i][0].'">';
echo '<div style="float:left;"><b>'.$tag[$up][$i][2].'</b></div>';
echo '<div class="comm_minus"></div>';
echo '<div style="float:right; width:30px;" id="rating_comm'.$tag[$up][$i][0].'">';
echo '<b>'.$sum.'</b></div><div class="comm_plus"></div>';
echo '<a style="float:right; width:70px;" href="'.$mess_url.'#m';
echo $tag[$up][$i][0].'"># '.$tag[$up][$i][0].'</a>';
echo '<div style="float:right; width:170px;">';
echo '('.date("H:i:s d.m.Y", $tag[$up][$i][3]).' г.)</div>';
echo '<div style="clear:both;"></div></div>';
echo '<div class="comm_body">';
if ($sum<0) echo '<u class="sp_link">Показать/скрыть</u><div class="comm_text">';
else echo '<div style="word-wrap:break-word;">';
echo str_replace("<br />","<br>",nl2br($tag[$up][$i][1])).'</div>';
echo '<div class="open_hint" onClick="comm_on('.$tag[$up][$i][0].',
'.$tag[$up][$i][6].')">Ответить</div><div style="clear:both;"></div></div>';
if (isset($tag[ $tag[$up][$i][0] ])) parents($tag[$up][$i][0],20);
echo '</div>';
}
}
$res=mysqli_query($db,"SELECT * FROM comment
WHERE theme_id='".$theme_id."' and moderation=1 ORDER BY id");
$number=mysqli_num_rows($res);
if ($number>0) {
echo '<div style="border:1px solid #000000;padding:5px;text-align:center;">';
echo '<b>Последние комментарии:</b><br>';
while ($com=mysqli_fetch_assoc($res))
$tag[(int)$com["parent_id"]][] = array((int)$com["id"], $com["message"],
$com["login"], $com["date"], $com["plus"], $com["minus"], $com["first_parent"]);
echo parents().'</div><br>';
}
?>
Если Вы не планируете модерацию оставленных комментариев (чего бы мы Вам не советовали), то просто удалите and moderation=1 из последнего SQL запроса выше приведенного кода. Таким образом, все оставленные посетителями комментарии будут незамедлительно опубликованы.
Если Вы все-таки решили оставить модерацию комментариев, то Вам необходимо перейти в тему модерация комментариев на сайте, в которой приведен PHP код, который позволит Вам быстро изменять, удалять и публиковать оставленные посетителями комментарии.
Теперь Вам необходимо добавить форму для того чтобы посетители сайта могли оставлять комментарии. Для этого Вам понадобится добавить на сайт следующий PHP код:
<?php
$cod=rand(100,900); $cod2=rand(1,99);
echo '<div id="last" align="center">';
echo '<form method="POST" action="'.$mess_url.'#last" class="add_comment"';
echo 'name="add_comment" id="hint"><div class="close_hint">Закрыть</div>';
echo '<textarea cols="68" rows="5" name="user_text"></textarea>';
echo '<div style="margin:5px; float:left;">';
echo 'Имя: <input type="text" name="mess_login" maxlength="20" value=""></div>';
echo '<div style="margin:5px; float:right;">'.$cod.' + '.$cod2.' = ';
echo '<input type="hidden" name="prov_summa" value="'.md5($cod+$cod2).'">';
echo '<input type="hidden" name="parent_id" value="0">';
echo '<input type="hidden" name="f_parent" value="0">';
echo '<input type="text" name="contr_cod" maxlength="4" size="4"> ';
echo '<input type="submit" value="Отправить"></div>';
echo '</form>';
echo '<form method="POST" action="'.$mess_url.'#last" class="add_comment">';
echo 'Добавить комментарий:';
echo '<textarea cols="68" rows="5" name="user_text"></textarea>';
echo '<div style="margin:5px; float:left;">';
echo 'Имя: <input type="text" name="mess_login" maxlength="20" value=""></div>';
echo '<div style="margin:5px; float:right;">'.$cod.' + '.$cod2.' = ';
echo '<input type="hidden" name="prov_summa" value="'.md5($cod+$cod2).'">';
echo '<input type="text" name="contr_cod" maxlength="4" size="4"> ';
echo '<input type="submit" value="Отправить"></div>';
echo '</form></div>';
?>
Как Вы могли заметить, мы используем две практически одинаковые формы для отправки комментариев. Не стоит пугаться, т.к. одна форма постоянно видна, и предназначена для обычного добавления комментариев, в то время как вторая форма скрыта и появляется только при клике по кнопке "Ответить" и предназначена для ответов на уже имеющиеся комментарии.
Для добавления плавности при появлении и исчезновении формы ответа на уже существующие комментарии, а также для оценивания комментариев без перезагрузки странички, Вам потребуется подключить библиотеку jQuery. Делается это так:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js">
</script>
Библиотека jQuery требуется для работы JavaScript кода, который и отвечает за все выше перечисленные функции. Оговоренный JavaScript код необходимо добавить на Ваш сайт, желательно где-нибудь в конце странички после приведенных PHP кодов и подключения библиотеки jQuery.
<script type="text/javascript">
//Добавление в форму отправки комментария значений id родительских комментариев
function comm_on(p_id,first_p){
document.add_comment.parent_id.value=p_id;
document.add_comment.f_parent.value=first_p;
}
$(document).ready(function(){
//Показать скрытое под спойлером сообщение
$(".sp_link").click(function(){
$(this).parent().children(".comm_text").toggle("normal");
});
//Показать форму ответа на имеющийся комментарий
$(".open_hint").click(function(){
$("#hint").animate({
top: $(this).offset().top + 25, left: $(document).width()/2 -
$("#hint").width()/2
}, 400).fadeIn(800);
});
//Скрыть форму ответа на имеющийся комментарий
$(".close_hint").click(function(){ $("#hint").fadeOut(1200); });
//Получение id оцененного комментария
$(".comm_plus,.comm_minus").click(function(){
id_comm=$(this).parents(".comm_head").attr("id").substr(1);
});
//Отправление оценки комментария в файл rating_comm.php
$(".comm_plus").click(function(){
jQuery.post("rating_comm.php",{comm_id:id_comm,ocenka:1},rating_comm);
});
$(".comm_minus").click(function(){
jQuery.post("rating_comm.php",{comm_id:id_comm,ocenka:0},rating_comm);
});
//Возврат рейтинга комментария и его обновление
function rating_comm(data){
$("#rating_comm"+id_comm).fadeOut(800,function(){
$(this).html(data).fadeIn(800);
});
}
});
</script>
Теперь Вам остается только добавить на свой сайт файл rating_comm.php, на который мы запросом jQuery.post() отсылаем оценки, поставленные комментариям. Файл rating_comm.php будет получать и обрабатывать поставленные (отправленные) оценки комментариям и высчитывать рейтинг комментариев. Файл rating_comm.php включает в себя следующий PHP код:
<?php
if (isset($_POST["comm_id"]) and is_numeric($_POST["comm_id"]))
$obj=$_POST["comm_id"];
else $obj='';
if (isset($_POST["ocenka"]) and ($_POST["ocenka"]==0 or $_POST["ocenka"]==1))
$ocenka=$_POST["ocenka"];
else $ocenka='';
if ($ocenka!='' and $obj>0) {
$ip=$_SERVER['REMOTE_ADDR'];
$db=mysqli_connect("localhost","Ваш_логин","Ваш_пароль","Имя_базы") or die();
$res=mysqli_query($db,"SELECT count(id),ocenka FROM ocenka_comment
WHERE comment_id='".$obj."' and ip=INET_ATON('".$ip."')");
$number=mysqli_fetch_array($res);
if ($number[0]==0) {
$res=mysqli_query($db,"INSERT INTO ocenka_comment (date,comment_id,ip,ocenka)
values ('".time()."','".$obj."',INET_ATON('".$ip."'),'".$ocenka."')");
if ($ocenka==0) $res=mysqli_query($db,"UPDATE comment SET minus=(minus+1)
WHERE id='".$obj."' LIMIT 1");
else $res=mysqli_query($db,"UPDATE comment SET plus=(plus+1)
WHERE id='".$obj."' LIMIT 1");
}
elseif ($number["ocenka"]!=$ocenka) {
$res=mysqli_query($db,"UPDATE ocenka_comment SET date='".time()."',
ocenka='".$ocenka."' WHERE comment_id='".$obj."' and ip=INET_ATON('".$ip."')");
if ($ocenka==0) $res=mysqli_query($db,"UPDATE comment SET minus=(minus+1),
plus=(plus-1) WHERE id='".$obj."' LIMIT 1");
else $res=mysqli_query($db,"UPDATE comment SET plus=(plus+1), minus=(minus-1)
WHERE id='".$obj."' LIMIT 1");
}
$res=mysqli_query($db,"SELECT plus,minus FROM comment WHERE id='".$obj."' LIMIT 1");
$rating=mysqli_fetch_array($res);
echo '<b>'.( $rating["plus"]-$rating["minus"]).'</b>';
mysqli_close($db);
}
?>
Данный скрипт позволяет оставлять только одну оценку к одному комментарию. Для того чтобы через некоторое время было возможно повторно оценить комментарий, необходимо удалять старые оценки из таблицы ocenka_comment. Для этого используйте следующий PHP код, который удаляет все оценки старше 30 дней:
<?php
$del_date=$time-2592000; //время в секундах (2592000 сек. = 30 дней)
$res=mysqli_query($db,"DELETE FROM ocenka_comment WHERE date<".$del_date."");
?>
После создания в MySQL указанных таблиц и добавления на свой сайт всех выше приведенных PHP и JavaScript кодов, у Вас должна получиться полноценная форма для оставления комментариев к темам сайта.
Перед публикацией все комментарии проходят обязательную модерацию!
Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started on line 3
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given on line 12
Подобного не было со старой формой. Скорее всего проблема в получении id идентификатора текущей темы.
Сайт находится на локальном сервере (Denwer, OpenServer).
Получается, нужно создать таблицу, чтобы извлекать id и как реализовать или все проще?
Заранее благодарен за помощь.
По поводу id - если у Вас сайт основан на БД, то берите id темы оттуда. Если сайт состоит из отдельных страничек, то внутри каждой из них нужно присвоить переменной $theme_id уникальное число.
При этом три строчки кода после "//получаем id текущей темы" необходимо удалить.
Остальной код подключаем через include там, где будут располагаться комментарии с формой добавления.
Для каждой новой странички меняете значение переменной $theme_id на новое число.
В начале страничек подключаю так:
<?php $theme_id=1; include $_SERVER['DOCUMENT_ROOT']."/php/comment.php"; ?>
Ошибок нет; (три строчки кода после "//получаем id текущей темы" удалил).
Там где, хочу вывести форму подключаю по аналогии:
<?php include $_SERVER['DOCUMENT_ROOT']."/php/comment_db.php"; ?>
Ошибок нет, форма появляется, но если попробовать, что-нибудь отправить, то отправляется несмотря на то, что даже не заполнены поля "Ваше имя" и поле для проверочного кода и нет никакого сообщения, да и в таблицу comment ничего не заносится.
Может быть $theme_id=1; нужно и еще где-то прописывать или ошибка в другом?
Заранее благодарен.
В первый файл (comment.php) необходимо поместить первый PHP код. Во второй файл (comment_db.php) - начиная с CSS (включительно) по второй JavaScript код (включительно).
Судя по описанию - проблема в первом файле (коде) или его подключении (пути, имени и т.д.).
При незаполненных полях или неверном проверочном коде должно появиться всплывающее JavaScript сообщение с ошибкой. Попробуйте заново скопировать первый код в файл comment.php, а также в конец файла добавьте какой-нибудь текст, чтобы убедиться что файл подключен верно.
Дальнейшее обсуждение перенес на <a href="http://usefulscript.ru/forum/showthread.php?tid=328">форум</a>.
Подскажите, пожалуйста, могу ли я разместить скрипт данного комментария на ряде страниц моего сайта, выразив на главной странице сайта благодарность Вашему сайту и опубликовав на главной странице ссылку на Ваш сайт?
Попробуйте добавить в файл .htaccess строчку: AddHandler application/x-httpd-php htm html
Тогда внутри html файлов можно будет размещать PHP код.
P.S. Ваш ответ и дальнейшее обсуждение перенес на наш форум.
В скрипте изменений не делал...
Ваш вопрос был перенесен в соответствующую тему на наш форум.
До этого ставил предыдущую форму комментариев, все работало норм, в этой даже ума не приложу, почему так выходит...
Русские буквы не то чтобы показываются вопросительными знаками, они вообще не показываются, как будто я ничего не вводил в форму.
Единственное, что я менял в вашем коде - это получение id темы, я просто присвоил конкретное значение id, удалив предыдущие две строки. Но думаю проблема не в этом.
echo 'Имя: <input type="text" name="mess_login" maxlength="20" value=""></div>';
на такую:
echo 'Имя: <input type="text" name="mess_login" maxlength="20" value="'.$user_name.'"></div>';
где $user_name - PHP переменная, содержащая логин зарегистрированного пользователя. Таким образом, в поле "Имя" будет сразу помещаться логин пользователя, но его пользователь сможет сам изменить.
Решается заменой строчки $res=mysqli_fetch_array($res); на:
if ($result) { $myrow = mysql_fetch_array($result); }
else { echo mysql_error(); }
1. Форма выводятся.
2. В базу отправляются (но не заполняется theme_id).
3. Но сами комментарии на странице НЕ отображаются (сама статья подключается через <?php echo $results['article']->content?>.
$res=mysqli_query($db,"SELECT * FROM comment
WHERE theme_id='".$theme_id."' and moderation=1 ORDER BY id DESC");
Остается лишь вывести на экран: echo 'Комментариев - '.$number;
Дальнейшее обсуждение перенес на форум.
По поводу ...a.ru/news.php?id_news=3 думаю стоит в коде странички news.php посмотреть как там обрабатывается данная GET переменная и присвоить ее переменной theme_id.
// Защита от инъекционных запросов
if(!preg_match("|^[\d]*$|",$_GET['id_news'])) puterror("Ошибка при обращении к блоку новостей");
и комментарий стал отправляться по адресу!
имеется строчка: header("Location: $mess_url#last"); exit;
Так вот вместо "$mess_url#last" укажите нужный Вам URL адрес,
например: header("Location: comments_site.php"); exit;
$theme_id=1; сделал так.
<script type="text/javascript"
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
Кнопка ответить работает, некорректно скрипт написал.
на два таких:
$res=mysqli_query($db,"SELECT * FROM comment WHERE theme_id='".$theme_id."' and moderation=1 and first_parent<>0 ORDER BY id");
$res2=mysqli_query($db,"SELECT * FROM comment WHERE theme_id='".$theme_id."' and moderation=1 and first_parent=0 ORDER BY id desc");
Далее после: while ($com=mysqli_fetch_assoc($res))
$tag[(int)$com["parent_id"]][] = array((int)$com["id"], $com["message"],
$com["login"], $com["date"], $com["plus"], $com["minus"], $com["first_parent"]);
добавьте: while ($com=mysqli_fetch_assoc($res2))
$tag[(int)$com["parent_id"]][] = array((int)$com["id"], $com["message"],
$com["login"], $com["date"], $com["plus"], $com["minus"], $com["first_parent"]);
<?php
$del_date=$time-2592000; //время в секундах (2592000 сек. = 30 дней)
$res=mysqli_query($db,"DELETE FROM ocenka_comment WHERE date<".$del_date."");
?>
if (date('H') == '11' or date('H') == '19') {
$del_date = time() - 2592000;
$res = mysqli_query($mysqli, "DELETE FROM ocenka_comment WHERE date < " . $del_date . "");
}
$user_text=htmlspecialchars($_POST["user_text"]);
Используйте такую:
$user_text=htmlspecialchars(substr($_POST["user_text"],0,500));
Подозрение на "PHP код, предназначенный для обработки отправленных сообщений". Возможно я его не правильно вставил в страницу (вставлял выше тега <head>), либо это связано с id (идентификатором текущей темы), потому как я не понял откуда его брать и куда вставлять (я решил что так: $theme_id=$res["521"]; где 521 - число от балды).
Скрипт прекрасно работает, но есть одна проблемка. В первом комменте поле ТЕКСТ сильно растягивается, остальные коменты в норме. Пробовал что-то сделать через CSS не получается дивами тоже не получается. Может вы подскажите, что можно сделать.
Заранее спасибо.
P.S. Ссылку на скриншот удалил.
Подскажите пожалуйста (я только учусь). 1. Надо чтоб на странице было только 10 комментов. Добавляется 11-й - первый убирается.
Какая строчка в коде за это отвечает? Второй страницы не надо. Только лимит видимых комментариев.
2. У вас при ответе слово администратор красным цветом. Это при заполнении "ответить" можно настроить? Какая строчка за это отвечает?
Спасибо.
2. В коде все есть: //Можно выделять цветом указанные логины
if ($tag[$up][$i][2]=='Admin') $tag[$up][$i][2]='<font color="#C00">Admin</font>';
Как вариант, ссылки на странички на Вашем сайте могут выглядеть так:
http://usefulscript.ru/forum/showthread.php?tid=355
Тогда Вам надо использовать в качестве id темы значение GET переменной tid (в нашем случае это 355).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//RU" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<?php $theme_id=1; include $_SERVER['DOCUMENT_ROOT']."comment/comment.php"; ?>
<head>
Внутри comment.php весь первый код php с базой данной и start session.
У меня хостинг до 12 часов php код обрабатывает, просмотреть не могу, но как я понял форму регистрации надо самому проделывать, тут только стили прописаны?
Что значит форму регистрации надо проделывать? Просто оформить на свой вкус и все.
<?php if (true): ?>
<html>
<?php else: ?>
<html>
<?php endif; ?>
Каким должно быть название базы данных MySQL чтобы после этого в них можно было создать таблицы comment и ocenka_comment?
Чтобы отправлять комментарии без перезагрузки странички необходимо использовать, например, jQuery запросы $.post() и .load().
Название базы данных может быть любым, главное правильно его указать в mysqli_connect() при подключении.
Но вот следующий вопрос: как сделать, чтобы пользователю, оставившему комментарий, приходили на e-mail ответы?
А как сделать, чтобы фон подкомментариев отличался от основных комментариев?
Можно ли всё это дело привязать к CMS Joomla? Без указания id для каждого материала, например, применительно к определенным категориям статей.
Тот же вопрос - доступ к комментированию только авторизованным пользователям.
Благодарю за Ваш труд, всех благ.
Что делать?
$mess_url=mysqli_real_escape_string($links,basename($_SERVER['REQUEST_URI'])); видимо с реквест что-то нужно сделать?
Не подскажете как сделать, чтобы сумма комментариев считалась в отдельной таблице (мне так будет проще выводить инфу в статьях и в админке, чтобы не делать постоянно лишний запрос, ответ на запрос и вывод комментариев в отдельном месте находил на форуме)? Например, как в статье "Счетчик посещений на PHP".
$res=mysqli_query($db,"SELECT count(id) FROM comment WHERE moderation=1");
$num=mysqli_fetch_array($res);
echo $num[0];
Я имел ввиду, что хотелось бы выводить количество комментариев к каждой теме в таблицу со статьями, например, как со счетчиком, мы добавляли в таблицу "all_theme" столбец "visits" и там суммировались все просмотры по каждой статье. Здесь можно сделать так же?
$res=mysqli_query($db,"SELECT id,name FROM all_theme");
while ($n=mysqli_fetch_array($res)) $name[$n["id"]]=$n["name"];
$res=mysqli_query($db,"SELECT theme_id,count(id) AS summ FROM comment WHERE moderation=1 GROUP BY theme_id");
while ($num=mysqli_fetch_array($res)) {
echo $name[$num["theme_id"]].' - '.$num["summ"].' шт.<br>';
}
где в первом SQL запросе name - заголовок темы, а all_theme - наименование таблицы с заголовками и id тем.
P.S. На форуме Вашу учетку активировал.
Добрый день. Подскажите как исправить.
$res=mysqli_query($db,"UPDATE comment SET message='".htmlspecialchars($_POST["com"])."' WHERE id='".$_POST["com_id"]."'");
header("Location: Modera.html");
}
Здравствуйте. Ошибка в этом блоке. С уважением Олег.
Попробуйте заменить if ($_POST["com"]!='') { на if (isset($_POST["com"])) {
Заменил. Замечание исчезло. Спасибо. Все работает кроме рейтинга. Подскажите в какую сторону двигаться. Спасибо. Олег.
По поводу оценки, сложно сказать, не зная в чем у Вас ошибка. Попробуйте в файле rating_comm.php в самом начале явно указать $_POST["comm_id"]=1 (вместо 1 лучше указать id существующего комментария) и $_POST["ocenka"]=1. Вызовите данный файл в браузере, тогда появиться ошибка, вот ее и надо устранять.