Сейчас: 00:08:34   29-го марта 2024 г.
UsefulScript.ruСкриптыРазныеКомментарии для сайта
41
203

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

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


Ранее на нашем сайте уже была создана подобная тема, в которой мы рассказывали о том, как создать на своем сайте форму добавления комментариев к темам, но с момента ее создания прошло много времени и уже многое изменилось. В данной темы мы хотим показать улучшенную и оптимизированную версию той формы добавления комментариев для сайта.


Для полноценной работы скрипта, приведенного в данной теме, Вам понадобиться в MySQL создать две таблицы: comment и ocenka_comment.


В таблице comment будут храниться комментарии посетителей и вся необходимая информация о данных комментариях. В таблице ocenka_comment будут храниться последние оценки к комментариям, поставленные посетителями.


Структура обеих таблиц приведена на скриншотах ниже:


Таблица, содержащая комментарии посетителей и информацию о них
Таблица comment.

Таблица, содержащая последние оценки поставленные комментариям
Таблица ocenka_comment.

Для быстрого создания таблиц comment и ocenka_comment, воспользуйтесь следующими SQL запросами, приведенными ниже. Для создания таблицы comment используйте код:

Цитата:
CREATE TABLE IF NOT EXISTS `comment` (
  `
idint(9unsigned NOT NULL auto_increment,
  `
parent_idmediumint(9unsigned NOT NULL default '0',
  `
first_parentmediumint(9unsigned NOT NULL default '0',
  `
dateint(10unsigned NOT NULL,
  `
theme_idsmallint(6unsigned NOT NULL,
  `
loginvarchar(30collate utf8_unicode_ci NOT NULL,
  `
messagevarchar(9999collate utf8_unicode_ci NOT NULL,
  `
moderationtinyint(3unsigned NOT NULL default '0',
  `
plusmediumint(9NOT NULL default '0',
  `
minusmediumint(9NOT 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` (
  `
idint(10unsigned NOT NULL auto_increment,
  `
dateint(10unsigned NOT NULL,
  `
comment_idmediumint(8unsigned NOT NULL,
  `
ipint(10unsigned NOT NULL,
  `
ocenkatinyint(3unsigned NOT NULL,
  
PRIMARY KEY  (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;

В результате выполнения приведенных выше SQL запросов у Вас в MySQL должны появиться таблицы, как на скриншотах выше.


После того, как необходимые таблицы в MySQL были уже созданы, в начало Ваших страничек, на которых будет присутствовать форма добавления комментариев (выше тега <head>) поместите следующий PHP код, предназначенный для обработки отправленных сообщений:

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 код:

HTML код:
<style type="text/css">
    .
add_comment {
        
displaytable;
        
width580px;
        
border1px solid #000;
        
background-color#6AF;
    
}
    .
close_hint, .open_hint {
        
floatright;
        
border1px solid #77A;
        
background#6e6;
        
width100px;
        
text-aligncenter;
        
cursorpointer;
    }
    .
close_hint margin5pxcolor#F00; }
    
.comm_body padding0 5pxbackground-color#EEE; text-align:left; }
    
.comm_head padding3pxborder1px solid #77A; background-color: #DFD; }
    
.comm_minus backgroundurl('image/minus.png'no-repeat; }
    .
comm_plus backgroundurl('image/plus.png'no-repeat; }
    .
comm_minus, .comm_plus {
        
floatright;
        
width19px;
        
height18px;
        
cursorpointer;
    }
    .
comm_text displaynone; }
    .
sp_link color#F33; cursor: pointer; }
    
.strelka {
        
backgroundurl(image/strelka.pngno-repeat;
        
border-left2px solid #000;
    
}
    .
strelka_2 backgroundurl(image/strelka_2.pngno-repeat; }
    
#hint { position: absolute; display: none; z-index: 100; }
</style>

Теперь, после того, как БД создана, и стили прописаны, можно приступать к коду, отвечающему за вывод и добавление комментариев.


В том месте странички, где должны выводиться оставленные посетителями комментарии, добавляем следующий PHP код:

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 код:
<?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">&nbsp;';
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">&nbsp;';
echo 
'<input type="submit" value="Отправить"></div>';
echo 
'</form></div>';
?>

Как Вы могли заметить, мы используем две практически одинаковые формы для отправки комментариев. Не стоит пугаться, т.к. одна форма постоянно видна, и предназначена для обычного добавления комментариев, в то время как вторая форма скрыта и появляется только при клике по кнопке "Ответить" и предназначена для ответов на уже имеющиеся комментарии.


Для добавления плавности при появлении и исчезновении формы ответа на уже существующие комментарии, а также для оценивания комментариев без перезагрузки странички, Вам потребуется подключить библиотеку jQuery. Делается это так:

JavaScript код:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js">
</script>

Библиотека jQuery требуется для работы JavaScript кода, который и отвечает за все выше перечисленные функции. Оговоренный JavaScript код необходимо добавить на Ваш сайт, желательно где-нибудь в конце странички после приведенных PHP кодов и подключения библиотеки jQuery.

JavaScript код:
<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 25left: $(document).width()/-
        $(
"#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 код:
<?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"]==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 код:
<?php
$del_date
=$time-2592000;    //время в секундах (2592000 сек. = 30 дней)
$res=mysqli_query($db,"DELETE FROM ocenka_comment WHERE date<".$del_date."");
?>

После создания в MySQL указанных таблиц и добавления на свой сайт всех выше приведенных PHP и JavaScript кодов, у Вас должна получиться полноценная форма для оставления комментариев к темам сайта.

Дата создания: 21:47:57 19.04.2015 г.
Посещений: 66407 раз(а).

Комментарии посетителей (130 шт.):
Евгений
104
# 2412
(20:41:44  21.04.2015 г.)

Спасибо большое за Ваш труд! Все работает просто замечательно!
Ответить

Владислав
22
# 3540
(17:39:44  06.11.2016 г.)

Измучился не могу поставить комментарии для сайта, может подскажете проще вариант?
Ответить

Administrator
15
# 3541
(17:50:55  06.11.2016 г.)

Как вариант, попробуйте виджет для комментариев вконтакте.
Ответить

Иван
8
# 3683
(11:26:36  18.01.2017 г.)

Как вариант готовый скрипт комментирования, которые предоставляют бесплатные сервисы Disqus, GetRate, Hypercomments. Выбирайте любой!
Ответить

bob
6
# 4589
(17:25:57  01.01.2020 г.)

Как вариант готовый скрипт комментирования, которые предоставляют бесплатные сервисы Disqus, GetRate, Hypercomments. Выбирайте любой!
Ответить

sevidi
8
# 3589
(20:44:38  24.11.2016 г.)

Много функциональный скрипт. Буду тестировать.
Ответить

Алесей
2
# 2413
(23:20:25  21.04.2015 г.)

Здравствуйте, выполнил sql запрос успешно и после добавления 1 кода появляется ошибка:
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 и как реализовать или все проще?
Заранее благодарен за помощь.
Ответить

Administrator
18
# 2414
(00:20:31  22.04.2015 г.)

Первая ошибка связана с тем, что до функции session_start() что-то выводится на экран (пробел, табуляция и т.д.), либо присутствует какой-то невидимый служебный символ.
По поводу id - если у Вас сайт основан на БД, то берите id темы оттуда. Если сайт состоит из отдельных страничек, то внутри каждой из них нужно присвоить переменной $theme_id уникальное число.
Ответить

Алексей
10
# 2415
(00:45:01  22.04.2015 г.)

Да, мой сайт состоит из отдельных страничек, а не подскажите на примере одной страницы article.html как реализовать, т.е. как присвоить переменной $theme_id уникальное число. Получается, весь код у меня будет на всех страницах, где у переменной $theme_id будет уникальное число, а если я хочу подключить скрипт с помощью include, то получается, у меня на странице будет только $theme_id с уникальным числом, а остальной код будет подгружаться.
Ответить

Administrator
11
# 2418
(23:01:27  22.04.2015 г.)

Одним include не обойтись, т.к. самый первый PHP код темы должен быть в самом начале страничек. Следовательно, код следует разбить на две части. Первую часть подключаете в самом начале страничек, например, так: <?php $theme_id=1; include "comments_site.php";?>
При этом три строчки кода после "//получаем id текущей темы" необходимо удалить.
Остальной код подключаем через include там, где будут располагаться комментарии с формой добавления.
Для каждой новой странички меняете значение переменной $theme_id на новое число.
Ответить

Алексей
-3
# 2432
(01:14:25  27.04.2015 г.)

Здравствуйте,
В начале страничек подключаю так:
<?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; нужно и еще где-то прописывать или ошибка в другом?
Заранее благодарен.
Ответить

Administrator
13
# 2437
(21:42:56  28.04.2015 г.)

Вы все сделали правильно. У меня подключение таким образом работает отлично.
В первый файл (comment.php) необходимо поместить первый PHP код. Во второй файл (comment_db.php) - начиная с CSS (включительно) по второй JavaScript код (включительно).
Судя по описанию - проблема в первом файле (коде) или его подключении (пути, имени и т.д.).
При незаполненных полях или неверном проверочном коде должно появиться всплывающее JavaScript сообщение с ошибкой. Попробуйте заново скопировать первый код в файл comment.php, а также в конец файла добавьте какой-нибудь текст, чтобы убедиться что файл подключен верно.
Дальнейшее обсуждение перенес на <a href="http://usefulscript.ru/forum/showthread.php?tid=328">форум</a>.
Ответить

Алина
2
# 2441
(09:33:06  30.04.2015 г.)

Добрый день! Спасибо Вам большое за данный материал! У меня почти все получилось, но возникла одна проблема - не считается рейтинг комментариев. Создала файл rating_comm.php в точности, как здесь написано, базу свою подключила правильно, в базу данные попадают, но когда я ставлю оценку, то общее число оценок не меняется, показывается только 2 значения: "1" или "-1", независимо от того, сколько раз нажимаю на кнопку рейтинга, также не появляется "0" ("1" меняется сразу на "-1" и наоборот). В базе тоже значения стоят только "1" и "-1", подскажите, пожалуйста, в чем может быть проблема?
Ответить

Administrator
6
# 2444
(21:15:23  30.04.2015 г.)

Все верно. Скрипт позволяет оставлять только одну оценку к одному комментарию раз в 30 дней чтобы избежать многократного оценивания. Скрипт устроен таким образом, что при смене оценки отменяется старая оценка, и сразу ставится новая, потому и кажется, что значение меняется сразу на два пункта.
Ответить

Алина
4
# 2445
(22:08:32  30.04.2015 г.)

СПАСИБО!!! Действительно все работает! Я просто проверила теперь на разных IP и поняла что к чему. Искренне желаю Вашему проекту стать одним из лучших.
Подскажите, пожалуйста, могу ли я разместить скрипт данного комментария на ряде страниц моего сайта, выразив на главной странице сайта благодарность Вашему сайту и опубликовав на главной странице ссылку на Ваш сайт?
Ответить

Administrator
2
# 2446
(22:34:34  30.04.2015 г.)

Конечно, но исходный код можно публиковать только при наличии ссылки на данную страничку.
Ответить

Виктория
4
# 2456
(19:28:02  03.05.2015 г.)

Прежде всего хочу поблагодарить Вас за очень полезные материалы. У меня при установлении скрипта комментариев возникла такая проблема: файл, куда я планирую установить комментарий - в формате html, если я его переименовываю в формат php - на сервере хостинга выдаются ошибки, если же я оставляю формат html, то получается, что данный скрипт просто выводится текстом. Пожалуйста, сориентируйте, как быть с форматами, как правильно переделать файл html в php, или если страница остается в формате html (а это бы, наверное, для меня было лучше) - куда вставить данный код, чтобы страница в формате html нормально его восприняла. Заранее благодарна.
Ответить

Administrator
-1
# 2457
(20:21:01  03.05.2015 г.)

А у Вашего хостинга есть поддержка PHP?
Попробуйте добавить в файл .htaccess строчку: AddHandler application/x-httpd-php htm html
Тогда внутри html файлов можно будет размещать PHP код.
P.S. Ваш ответ и дальнейшее обсуждение перенес на наш форум.
Ответить

Андрей
0
# 2518
(17:47:54  09.06.2015 г.)

Комментарий был перенесен на форум.
Ответить

Андрей
2
# 2529
(00:53:53  19.06.2015 г.)

Меня перекидывают на главную страницу, не открывается скрытая форма.
В скрипте изменений не делал...
Ваш вопрос был перенесен в соответствующую тему на наш форум.
Ответить

Станислав
-1
# 2545
(16:45:33  23.06.2015 г.)

Здравствуйте! У меня так получилось, что в форме не отображаются русские буквы, только английские. Хотя делал так как описано выше. В чем может быть проблема?
Ответить

Administrator
-1
# 2546
(22:36:41  23.06.2015 г.)

Проблема скорее всего в кодировке. Проверьте, чтобы кодировка сайта и MySQL базы была UTF-8. Также пересохраните php файлы в UTF-8. Должно помочь.
Ответить

Станислав
2
# 2547
(08:30:41  24.06.2015 г.)

В php коде у меня прописана utf8, база данных тоже формата utf8.
До этого ставил предыдущую форму комментариев, все работало норм, в этой даже ума не приложу, почему так выходит...
Русские буквы не то чтобы показываются вопросительными знаками, они вообще не показываются, как будто я ничего не вводил в форму.
Единственное, что я менял в вашем коде - это получение id темы, я просто присвоил конкретное значение id, удалив предыдущие две строки. Но думаю проблема не в этом.
Ответить

Administrator
1
# 2548
(22:55:19  24.06.2015 г.)

А в БД русские буквы пишутся? Добавьте кодировку в файл .htaccess: AddDefaultCharset UTF-8
Ответить

Станислав
-1
# 2550
(07:20:57  26.06.2015 г.)

Спасибо, помогло добавление записи кодировки в .htaccess
Ответить

Сергей
3
# 2832
(19:29:26  27.11.2015 г.)

Я совсем новичок в сайто-строении и у меня возник вопрос: как сделать так, чтобы если пользователь зарегистрировался у меня на сайте, комментарии добавлялись от его имени?
Ответить

Administrator
1
# 2833
(15:39:58  28.11.2015 г.)

Как самый простой вариант, предлагаю заменить строчку:
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 переменная, содержащая логин зарегистрированного пользователя. Таким образом, в поле "Имя" будет сразу помещаться логин пользователя, но его пользователь сможет сам изменить.
Ответить

Сергей
3
# 2838
(13:08:56  29.11.2015 г.)

Спасибо за ответ, я к такому варианту только что пришел сам, в принципе этого может быть достаточно. Сейчас ищу способ скрыть форму добавления комментариев от не зарегистрированных пользователей. И было бы здорово, чтобы для зарегистрированных пользователей имя = логин прописывалось автоматически и не было проверки/капчи в форме ввода.
Ответить

Сергей
4
# 2840
(13:39:16  29.11.2015 г.)

В обработчике ошибка: mysql_fetch_array() expects parameter 1...
Решается заменой строчки $res=mysqli_fetch_array($res); на:
if ($result) { $myrow = mysql_fetch_array($result); }
else { echo mysql_error(); }
Ответить

Сергей
3
# 2862
(11:38:12  03.12.2015 г.)

А аватарки авторизованных пользователей, как прикрепить к этим комментариям?
Ответить

Administrator
0
# 2870
(14:41:10  05.12.2015 г.)

Отдельным SQL запросом при выводе комментариев. Все зависит от структуры БД.
Ответить

Сергей
0
# 2880
(18:58:16  06.12.2015 г.)

В БД есть таблица users, там соответственно id, login, password, avatar. И есть соответственно таблица comment. Ну с ней все понятно, таблица ваша.
Ответить

Administrator
2
# 2881
(20:29:48  06.12.2015 г.)

В таблицу comment в таком случае необходимо добавить еще один столбец - id пользователя. Для авторизованных пользователей помещать туда id, совпадающий с id из таблицы users. При выводе комментария делать проверку, id=0 или нет. Если не равен, то тянем аватарку из таблицы users по id.
Ответить

Сергей
1
# 2883
(21:17:27  06.12.2015 г.)

Спасибо, буду пытаться, для меня это темный лес. А в интернете по моим запросам только уроки по готовым движкам, от которых я однозначно отказался.
Ответить

Дмитрий
1
# 2901
(14:49:09  14.12.2015 г.)

Добрый день. Помогите решить проблему (сделано по инструкции):
1. Форма выводятся.
2. В базу отправляются (но не заполняется theme_id).
3. Но сами комментарии на странице НЕ отображаются (сама статья подключается через <?php echo $results['article']->content?>.
Ответить

Administrator
-2
# 2904
(22:53:41  14.12.2015 г.)

В переменную $theme_id необходимо поместить id темы, который предварительно надо получить (либо задать) для конкретной темы. Если в БД у комментариев отсутствуют значения в столбце theme_id, то комментарии и не будут выведены, т.к. скрипт для вывода ищет только комментарии с theme_id равным id темы с которой он вызывается.
Ответить

Владимир
0
# 2937
(20:21:32  30.12.2015 г.)

Здравствуйте, как вывести самые новые комментарии вверх? Т.е. снизу вверх очередь шла.
Ответить

Administrator
1
# 2938
(21:53:26  30.12.2015 г.)

При получении комментариев в SQL запросе просто отсортируйте их в обратном порядке (добавьте DESC):
$res=mysqli_query($db,"SELECT * FROM comment
WHERE theme_id='".$theme_id."' and moderation=1 ORDER BY id DESC");
Ответить

Владимир
1
# 2939
(00:56:38  31.12.2015 г.)

И еще такой вопрос: Возможно как-то вывести общее число комментариев на страницу? И как?
Ответить

Administrator
0
# 2942
(19:31:31  31.12.2015 г.)

В строке: $number=mysqli_num_rows($res); мы уже получили количество комментариев на странице.
Остается лишь вывести на экран: echo 'Комментариев - '.$number;
Дальнейшее обсуждение перенес на форум.
Ответить

Сергей
1
# 2964
(02:30:34  13.01.2016 г.)

Есть новостная лента которая выводит новости из таблицы вот так: <?php новость, ссылки на все новости и есть ссылки на каждую новость вида: ...a.ru/news.php?id_news=3 ?>; как прикрепить эти комментарии к каждой новости? Никак не получается выцепить id_news новости и присвоить его theme_id. :(
Ответить

Administrator
1
# 2965
(22:03:25  13.01.2016 г.)

Попробуйте так: $theme_id=(int)$_GET["id_news"];
Ответить

Сергей
1
# 2966
(22:18:52  13.01.2016 г.)

Warning: Cannot modify header information - headers already sent by (output started at /home/h0025290/public_html/news.php:487) in /home/h0025290/public_html/comment.php on line 46 - вот такую ошибку выдает. theme_id ничего не присваивает. Т.е. работает скрипт и новости из бд выводит все на одну и ту же страницу, а url меняется, но почему то не получается прокомментировать эту новость, комментарии отображаются на странице со всеми новостями.
Ответить

Administrator
1
# 2967
(22:28:59  13.01.2016 г.)

Ошибка из-за того что до session_start() что-то выводится на экран. Переместите session_start() в самое начало странички.
По поводу ...a.ru/news.php?id_news=3 думаю стоит в коде странички news.php посмотреть как там обрабатывается данная GET переменная и присвоить ее переменной theme_id.
Ответить

Сергей
2
# 2969
(09:54:17  14.01.2016 г.)

Сессия стартует в самом начале. Переменная GET впервые встречается вот в таком виде перед блоком вывода новостей <?php if (isset($_GET['id_news'])){?>
Ответить

Сергей
4
# 2972
(12:48:31  15.01.2016 г.)

С ошибкой разобрался, действительно у меня сессия начиналась дважды, проблема решилась переподключением одного из файлов. Никак не получается присвоить php?id_news=3 комментарию при отправке, хотя если прописать значение "3" в таблице, комментарий отображается корректно на странице новости.
Ответить

Administrator
3
# 2975
(22:58:39  15.01.2016 г.)

Вам нужно просто найти, какой переменной присваивается $_GET['id_news'] в коде странички news.php и подставить ее в наш скрипт. А еще возможно, что у Вас происходит редирект, и переменные $_GET обнуляются. Тогда нужно смотреть, как этот редирект делается.
Ответить

Сергей
0
# 2978
(11:46:41  16.01.2016 г.)

Скорее всего обнуляются. Т.к. добавляю комментарий он добавляется и ему присваивается theme_id=0, в таблице меняю значение на id новости и комментарий появляется. Единственное не понимаю, как редикт происходит, может быть вот эта строчка виновата:
// Защита от инъекционных запросов
if(!preg_match("|^[\d]*$|",$_GET['id_news'])) puterror("Ошибка при обращении к блоку новостей");
Ответить

Сергей
2
# 2979
(12:26:43  16.01.2016 г.)

Ура! Решение лежало на поверхности: файл comments.php нужно было поменять $mess_url=mysqli_real_escape_string($db,basename($_SERVER['REQUEST_FILENAME'])); на $mess_url=mysqli_real_escape_string($db,basename($_SERVER['REQUEST_URL']));
и комментарий стал отправляться по адресу!
Ответить

Игорь
0
# 3056
(10:02:34  26.02.2016 г.)

Добрый день! Подскажите, пожалуйста, можно ли сделать, что бы после добавления комментария перекидывало на определенную (выбранную) страницу.
Ответить

Administrator
1
# 3058
(22:53:09  26.02.2016 г.)

Да, конечно. После строчки: $_SESSION["send"]="Комментарий принят!";
имеется строчка: header("Location: $mess_url#last"); exit;
Так вот вместо "$mess_url#last" укажите нужный Вам URL адрес,
например: header("Location: comments_site.php"); exit;
Ответить

Андрей
0
# 3061
(20:45:39  27.02.2016 г.)

Спасибо за материал. Все работает. Кроме кнопки ответить: при нажатии ничего не происходит.
$theme_id=1; сделал так.
Ответить

Administrator
1
# 3062
(22:12:57  27.02.2016 г.)

При нажатии на кнопку "Ответить" должно появиться второе окно добавления комментария. Скорее всего, у Вас не подключена библиотека jQuery или отключен JavaScript.
Ответить

Андрей
1
# 3063
(14:56:41  28.02.2016 г.)

В браузере включен javascript. Библиотеку подключил вот так перед запуском скрипта:
<script type="text/javascript"
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
Ответить

Андрей
0
# 3064
(15:07:11  29.02.2016 г.)

И как сортировать комментарии, чтобы сначала свежие были, а ответы на них наоборот?
Кнопка ответить работает, некорректно скрипт написал.
Ответить

Administrator
0
# 3066
(23:02:49  01.03.2016 г.)

Замените запрос: $res=mysqli_query($db,"SELECT * FROM comment WHERE theme_id='".$theme_id."' and moderation=1 ORDER BY id");
на два таких:
$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"]);
Ответить

Игорь
1
# 3685
(17:57:04  21.01.2017 г.)

Сделал как тут написано, и после этого перестал появляться комментарий. Пишет, что всё принято, в модераторстве принимаю его, но он не появляется на странице. Без данного кода всё работало отлично.
Ответить

Денис
2
# 3105
(17:53:01  20.03.2016 г.)

Не пойму, а куда подскажите вставлять этот код:
<?php
$del_date=$time-2592000; //время в секундах (2592000 сек. = 30 дней)
$res=mysqli_query($db,"DELETE FROM ocenka_comment WHERE date<".$del_date."");
?>
Ответить

Administrator
1
# 3106
(19:40:03  20.03.2016 г.)

Желательно конечно в PHP-файл, выполняющийся через определенные промежутки времени по CRON-у.
Ответить

Клаус
0
# 4952
(15:10:40  03.01.2023 г.)

Я сделал без крона. Добавил в rating_comm.php по условию. Срабатывает два часа в день.

if (date('H') == '11' or date('H') == '19') {
$del_date = time() - 2592000;
$res = mysqli_query($mysqli, "DELETE FROM ocenka_comment WHERE date < " . $del_date . "");
}
Ответить

Administrator
1
# 4954
(20:56:37  05.01.2023 г.)

Тут все будет зависеть от частоты выставления оценок комментариев. У Вас может срабатывать в указанные часы многократно или ни разу (если никто не оценил ни одного комментария).
Ответить

Вика
0
# 3163
(18:49:57  06.04.2016 г.)

Подскажите, пожалуйста, как сделать, чтобы количество слов, которые можно ввести в качестве комментария, было как-то ограничено. Попробовала в таблице "comment" поменять значение поля message c varchar(9999) на varchar(5), но все равно в форму забивается неограниченное количество символов.
Ответить

Administrator
2
# 3167
(20:29:23  06.04.2016 г.)

Обрезайте длину комментария при помощи PHP. Для этого вместо строки:
$user_text=htmlspecialchars($_POST["user_text"]);
Используйте такую:
$user_text=htmlspecialchars(substr($_POST["user_text"],0,500));
Ответить

de-lion
1
# 3193
(13:53:05  01.05.2016 г.)

Привет как сделать так чтобы этот скрипт работал без "Модерация комментариев на сайте"?
Ответить

Administrator
1
# 3194
(15:19:30  01.05.2016 г.)

Из SQL запроса в коде вывода комментариев удалите: and moderation=1
Ответить

юра
0
# 3205
(17:27:17  08.05.2016 г.)

Добрый день! Возможно данный скрипт установить на движок dle?
Ответить

dimmka
1
# 3213
(15:55:42  14.05.2016 г.)

Здравствуйте! У меня проблема. Сделал все как вы написали. База данных подключена, комментарии отправляются, но... после того как я пишу комментарий и нажимаю кнопку "Отправить" страница имеющая адрес www.site.ru#last автоматически обновляется белым листом. Когда обновляю по этой же ссылке страницу, то все нормально отображается вместе с отправленным комментарием.
Подозрение на "PHP код, предназначенный для обработки отправленных сообщений". Возможно я его не правильно вставил в страницу (вставлял выше тега <head>), либо это связано с id (идентификатором текущей темы), потому как я не понял откуда его брать и куда вставлять (я решил что так: $theme_id=$res["521"]; где 521 - число от балды).
Ответить

Administrator
3
# 3215
(17:24:31  14.05.2016 г.)

Если у Вас нет идентификаторов тем, либо Вы не знаете как их получить, по задайте это значение вручную: $theme_id=1; При этом предшествующие две строчки для получения id текущей темы следует удалить.
Ответить

dimmka
-1
# 3217
(18:50:58  14.05.2016 г.)

Не получается избавиться от белой страницы. Почему так происходит, подскажите? Получается, что что-то не то происходит при выполнении кода после того как наживаешь кнопку "Отправить". Идет переход на страницу www.site.ru#last и она белая. Перезагружаешь - все нормально.
Ответить

Administrator
1
# 3218
(19:01:08  14.05.2016 г.)

В БД комментарии добавляются? Если да, то скорее всего у Вас по каким-то причинам не работает редирект: header("Location: $mess_url#last"); exit;
Ответить

Саша
0
# 3257
(00:20:34  07.06.2016 г.)

Два дня работал скрипт, а сегодня перестал работать, а точнее не могу нажать на кнопку ответить, не работает?
Ответить

Administrator
2
# 3260
(20:36:43  07.06.2016 г.)

Скорее всего проблема с JS кодом или подключением jQuery библиотеки.
Ответить

PHPSID
9
# 3258
(05:30:51  07.06.2016 г.)

Здравствуйте! Подскажите, пожалуйста, при выставлении рейтинга страница открывается пустая. Если обновить, то все ок и рейтинг выставлен. Открывается страница с комментариями и рейтингом, все ок, но пустая.
Ответить

Administrator
0
# 3261
(20:46:58  07.06.2016 г.)

Странно, почему у Вас вообще открывается страница, ведь используется jQuery.post запрос. Возможно, у Вас ошибка в файле rating_comm.php.
Ответить

PHPSID
0
# 3262
(22:09:59  07.06.2016 г.)

Да ошибки вроде нет никакой. Проверил несколько раз. Все в одном файле обрабатывается на этой же странице где и комментарии, т.е. код на этой же странице. Вместо "rating_comm.php" указываю текущую страницу и пробовал без указания т.е. "" и с файлом пробовал. Ничего не выходит. При нажатии на голос, видно, что начинает обновлять (исчезает стрелка) и туже открывает пустую страницу.
Ответить

Administrator
3
# 3263
(22:25:26  07.06.2016 г.)

Лучше делать отдельными файлами. Файл rating_comm.php нужен для изменения рейтинга в БД и вывода рейтинга текущего комментария в соответствии с jQuery.post запросом. И стрелка не должна исчезать. Скопируйте код заново на пустую страничку, внесите необходимые Вам изменения, а уже потом встраивайте на сайт.
Ответить

Сергей
0
# 3417
(14:36:01  12.09.2016 г.)

Здравствуйте Админ.
Скрипт прекрасно работает, но есть одна проблемка. В первом комменте поле ТЕКСТ сильно растягивается, остальные коменты в норме. Пробовал что-то сделать через CSS не получается дивами тоже не получается. Может вы подскажите, что можно сделать.
Заранее спасибо.
Ответить

Administrator
0
# 3418
(21:40:46  12.09.2016 г.)

Тут нужно исходный код странички и CSS смотреть, из-за чего так вышло, а не по скрину гадать.
P.S. Ссылку на скриншот удалил.
Ответить

Павел
0
# 3562
(10:55:11  14.11.2016 г.)

Здравствуйте Админ. Скрипт хорошо установился и работает. Отлично. Спасибо Вам.
Подскажите пожалуйста (я только учусь). 1. Надо чтоб на странице было только 10 комментов. Добавляется 11-й - первый убирается.
Какая строчка в коде за это отвечает? Второй страницы не надо. Только лимит видимых комментариев.
2. У вас при ответе слово администратор красным цветом. Это при заполнении "ответить" можно настроить? Какая строчка за это отвечает?
Спасибо.
Ответить

Administrator
3
# 3564
(12:51:23  14.11.2016 г.)

1. Добавьте LIMIT и сортировку в $res=mysqli_query($db,"SELECT * FROM comment WHERE theme_id='".$theme_id."' and moderation=1 ORDER BY id"); но тогда возможно некорректное отображение ответов на комментарии.
2. В коде все есть: //Можно выделять цветом указанные логины
if ($tag[$up][$i][2]=='Admin') $tag[$up][$i][2]='<font color="#C00">Admin</font>';
Ответить

Александр
0
# 3577
(17:41:37  21.11.2016 г.)

Здравствуйте. С id темой не могу разобраться, в БД нажимаю на theme_id и там появляется пустое поле. Какие данные посоветуете вводить? Спасибо.
Ответить

Administrator
0
# 3578
(20:55:35  21.11.2016 г.)

Все зависит от конкретного сайта. Например, если Ваш движок сайта выводит тексты тем из БД, то наверняка он это делает по id из соответствующей таблицы. Ваша задача найти данную переменную (id темы).
Как вариант, ссылки на странички на Вашем сайте могут выглядеть так:
http://usefulscript.ru/forum/showthread.php?tid=355
Тогда Вам надо использовать в качестве id темы значение GET переменной tid (в нашем случае это 355).
Ответить

Александр
0
# 3579
(21:25:02  21.11.2016 г.)

Сайт делался вручную, без движков. Страница моя обычно показывается как пример http://usefulscript.ru/forum/showthread.php и всё, без id=355. Как тогда будет в моем случае?
Ответить

Administrator
2
# 3580
(21:49:34  21.11.2016 г.)

Т.е. Вы не используете MySQL и для каждой темы создается отдельная страничка? Тогда только вручную присвоить внутри каждой странички $theme_id=1 и т.д., главное, чтобы цифры не повторялись.
Ответить

Александр
0
# 3581
(00:13:31  22.11.2016 г.)

Можно так прописать?
<!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 код обрабатывает, просмотреть не могу, но как я понял форму регистрации надо самому проделывать, тут только стили прописаны?
Ответить

Administrator
0
# 3584
(23:15:16  22.11.2016 г.)

Да, только не забывайте $theme_id менять для разных страничек.
Что значит форму регистрации надо проделывать? Просто оформить на свой вкус и все.
Ответить

Александр
2
# 3624
(17:11:20  13.12.2016 г.)

А может сочетаться код mysqli вместе с PDO?
Ответить

Denis
2
# 3713
(14:10:06  31.01.2017 г.)

Автору: не очень правильный подход - использовать echo для вывода html разметки. Используйте все возможности синтаксиса php. Не забывайте о такой структуре:
<?php if (true): ?>
<html>
<?php else: ?>
<html>
<?php endif; ?>
Ответить

Антон
4
# 3739
(14:29:56  20.02.2017 г.)

Как убрать капчу с поля добавления комментариев и сделать добавление комментариев без перезагрузки страницы?
Каким должно быть название базы данных MySQL чтобы после этого в них можно было создать таблицы comment и ocenka_comment?
Ответить

Administrator
1
# 3741
(22:17:03  20.02.2017 г.)

Просто удалите из формы отправки комментариев данное поле, а также из кода обработки отправленных данных стоит удалить проверку на значение данного поля.
Чтобы отправлять комментарии без перезагрузки странички необходимо использовать, например, jQuery запросы $.post() и .load().
Название базы данных может быть любым, главное правильно его указать в mysqli_connect() при подключении.
Ответить

Андрей
0
# 3955
(11:36:17  18.06.2017 г.)

Большое Вам спасибо за интересные решения! Удачи! Всех благ!
Ответить

Евгений
-1
# 3968
(18:41:52  26.06.2017 г.)

Надоели спамеры! Можно добавить функцию "Чёрного списка" с блокировкой этих пользователей. Заранее спасибо?
Ответить

Евгений
-2
# 4055
(20:48:35  23.08.2017 г.)

Реализовал следующим образом: ввел в базу данных столбец с ip-адресом пользователя, куда заносится ip-адрес отправителя письма, и заблокировал этот ip в файле .htacsess.
Но вот следующий вопрос: как сделать, чтобы пользователю, оставившему комментарий, приходили на e-mail ответы?
Ответить

Владимир
1
# 4039
(21:46:15  30.07.2017 г.)

Как получить id идентификатора текущей темы. Подробнее можно? Для меня это непонятно. С уважением Владимир.
Ответить

Administrator
2
# 4040
(20:41:25  31.07.2017 г.)

Взять из БД. Если Вы загружаете странички (темы) из БД (структура у всех разная), то у них наверняка уже есть id, вот он нам и нужен. Если id у страничек (тем) отсутствует, то его необходимо добавить. Смысл этого id идентификатора текущей темы заключается в том, что для каждой темы это значение должно быть уникальным, чтобы скрипт знал, какие комментарии к какой теме относятся.
Ответить

Виталий
0
# 4276
(15:52:34  08.04.2018 г.)

Подскажите, пожалуйста. Не совсем понимаю, скрипт будет выдавать для каждой страницы разные стенки отображения комментариев? Т.е. если я напишу комментарий на странице 1, он останется только на странице 1, и не будет повторяться на странице2, странице 3 и т.д. И еще вопрос, комментарии индексируются?
Ответить

Administrator
1
# 4277
(17:57:35  08.04.2018 г.)

Да, для каждой страницы - свои комментарии. Можно сделать одинаковые комментарии для всех страниц (для этого укажите одинаковые id страниц). Все комментарии присутствуют в исходном коде странички и индексируются.
Ответить

Виталий
0
# 4280
(17:04:28  12.04.2018 г.)

А сложно ли добавить подписку об ответах на комментарий?
Ответить

Александр
0
# 4310
(00:24:39  16.06.2018 г.)

Здравствуйте. Спасибо, очень полезный скрипт.
А как сделать, чтобы фон подкомментариев отличался от основных комментариев?
Ответить

Александр
-1
# 4311
(22:08:49  17.06.2018 г.)

И ещё вопрос. Куда нужно поставить переменную $com["CountryGeoIP"], чтобы вывести в шапку комментария страну комментатора?
Ответить

Дмитрий
2
# 4401
(23:00:50  09.01.2019 г.)

Здравствуйте! Подскажите пожалуйста (в общих чертах):
Можно ли всё это дело привязать к CMS Joomla? Без указания id для каждого материала, например, применительно к определенным категориям статей.
Тот же вопрос - доступ к комментированию только авторизованным пользователям.
Благодарю за Ваш труд, всех благ.
Ответить

cupoma58
-1
# 4470
(14:54:42  24.05.2019 г.)

Срисовал всё, как сказано. Страничка в UTF-8. Форма на страничке появилась, комментарии добавляются, но на базу не попадают. Комментарии, добавленные на базе в таблицу comment - на страничке не появляются.
Что делать?
Ответить

Жук
3
# 4551
(15:33:03  18.11.2019 г.)

А можно сделать смайлы?
Ответить

Кирилл
0
# 4711
(20:43:59  11.08.2020 г.)

Здравствуйте. Подскажите, пожалуйста, как убрать перезагрузку страницы? Чтобы было примерно как у Вас. Я скрипт алерт убрал, добавил стили к сообщениям, оно выводится как нужно, но идет перезагрузка.
$mess_url=mysqli_real_escape_string($links,basename($_SERVER['REQUEST_URI'])); видимо с реквест что-то нужно сделать?
Ответить

Administrator
1
# 4714
(21:32:32  11.08.2020 г.)

Для этого придется использовать библиотеку jQuery или AJAX и перерабатывать скрипт. REQUEST_URI тут не при делах. У нас кстати скрипт с перезагрузкой страницы.
Ответить

Кирилл
0
# 4715
(15:51:18  13.08.2020 г.)

Я почему-то думал без. Видимо настолько быстро, что не успевал заметить. Спасибо за ответ. Забыл спросить, а не подскажете как сделать сохранение текста, если введен неверный проверочный код, чтобы заново не пришлось писать.
Ответить

Administrator
1
# 4717
(19:57:50  15.08.2020 г.)

В коде обработки отправленных комментариев в случае неверного проверочного кода присвойте переменным сессии введенные пользователям данные. При выводе формы добавления комментариев, вставьте текст из переменных сессии. Если код верный, то переменные сессии следует почистить.
Ответить

Владимир Кайгородов
0
# 4721
(12:01:07  19.08.2020 г.)

Не смог разобраться с этим: Не забудьте при подключении к Вашей MySQL базе в функции mysqli_connect() указать Ваши логин, пароль и имя БД.
Ответить

Administrator
0
# 4725
(21:27:38  25.08.2020 г.)

Логин, пароль и имя БД Вам должен дать хостер, у которого размещается Ваш сайт. Если сайт на локалке, то используйте логин и пароль от phpmyadmin.
Ответить

Владимир Кайгородов
1
# 4742
(17:16:44  08.10.2020 г.)

Спасибо. Где найти mysqli_connect в cpanel?
Ответить

Кирилл
0
# 4780
(15:08:50  04.01.2021 г.)

Здравствуйте, помогите пожалуйста, хотел спросить на форуме, но не приходит ссылка подтверждения регистрации.
Не подскажете как сделать, чтобы сумма комментариев считалась в отдельной таблице (мне так будет проще выводить инфу в статьях и в админке, чтобы не делать постоянно лишний запрос, ответ на запрос и вывод комментариев в отдельном месте находил на форуме)? Например, как в статье "Счетчик посещений на PHP".
Ответить

Administrator
-1
# 4781
(12:18:06  05.01.2021 г.)

Здравствуйте. Т.е. Вам нужно общее количество комментариев ко всем темам? Тогда:
$res=mysqli_query($db,"SELECT count(id) FROM comment WHERE moderation=1");
$num=mysqli_fetch_array($res);
echo $num[0];
Ответить

Кирилл
-1
# 4782
(12:38:45  05.01.2021 г.)

Здравствуйте, к сожалению код не отправился.
Я имел ввиду, что хотелось бы выводить количество комментариев к каждой теме в таблицу со статьями, например, как со счетчиком, мы добавляли в таблицу "all_theme" столбец "visits" и там суммировались все просмотры по каждой статье. Здесь можно сделать так же?
Ответить

Administrator
1
# 4783
(13:05:38  05.01.2021 г.)

Можно, но мы пойдем другим путем, чтобы не вносить изменения в структуру уже имеющихся таблиц:
$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. На форуме Вашу учетку активировал.
Ответить

Кирилл
-1
# 4784
(13:15:17  05.01.2021 г.)

Большое спасибо за помощь, сейчас попробую. За активации учетки тоже спасибо, если Вы не против, то задам еще один вопрос на форуме по поводу счетчика.
Ответить

олег
0
# 4803
(10:10:11  20.03.2021 г.)

Warning: Undefined array key "com" in C:\server\data\Modera.html on line 20
Добрый день. Подскажите как исправить.
Ответить

Administrator
0
# 4804
(11:36:55  21.03.2021 г.)

Здравствуйте. Выложите строку, в которой возникла ошибка, целиком.
Ответить

олег
0
# 4806
(12:55:56  22.03.2021 г.)

if ($_POST["com"]!='') {
$res=mysqli_query($db,"UPDATE comment SET message='".htmlspecialchars($_POST["com"])."' WHERE id='".$_POST["com_id"]."'");
header("Location: Modera.html");
}
Здравствуйте. Ошибка в этом блоке. С уважением Олег.
Ответить

Administrator
1
# 4807
(18:48:38  22.03.2021 г.)

Случайно не PHP8 используете?
Попробуйте заменить if ($_POST["com"]!='') { на if (isset($_POST["com"])) {
Ответить

олег
1
# 4809
(06:25:24  23.03.2021 г.)

Здравствуйте. Использую PHP Version 8.0.2. Не очень хорошая версия?
Заменил. Замечание исчезло. Спасибо. Все работает кроме рейтинга. Подскажите в какую сторону двигаться. Спасибо. Олег.
Ответить

Administrator
1
# 4811
(21:47:17  23.03.2021 г.)

Здравствуйте. Тут дело не в конкретной версии, а в изменениях, которые появляются при выходе новых версий. Т.к. скрипт 2015 года, то соответственно на новых версиях что-то может не работать.
По поводу оценки, сложно сказать, не зная в чем у Вас ошибка. Попробуйте в файле rating_comm.php в самом начале явно указать $_POST["comm_id"]=1 (вместо 1 лучше указать id существующего комментария) и $_POST["ocenka"]=1. Вызовите данный файл в браузере, тогда появиться ошибка, вот ее и надо устранять.
Ответить

Владимир
0
# 4897
(13:01:45  06.03.2022 г.)

Жаль, что разработчик забыл про этот скрипт...
Ответить

Плута
-1
# 4919
(18:53:25  15.05.2022 г.)

При отправке комментов на кириллице пишет "Не все поля заполнены", на английских буквах успешно проходит. Куда копать?
Ответить

Administrator
1
# 4921
(20:09:30  17.05.2022 г.)

Возможно, функция htmlspecialchars() не поддерживает кодировку Вашего сайта. Попробуйте ее удалить или изменить кодировку сайта.
Ответить

Клаус
0
# 4951
(00:05:55  27.12.2022 г.)

Занятно. Будем разбираться.
Ответить

Путник
0
# 4953
(01:22:28  05.01.2023 г.)

Костяк нормальный, но можно и нужно допиливать.
Ответить

Оксана
-1
# 4958
(16:19:24  12.01.2023 г.)

Здравствуйте, а можно попросить фото картинок со стрелками для комментариев.
Ответить

Евгений
0
# 5027
(12:11:02  21.11.2023 г.)

Интересно, а боты-спамеры могут обходить проверку контрольной суммы? Одно время много спама было, на сайте вирус был. Удалил, но спам периодически приходит, причём прописывает комментарии в БД под id-номером страницы. Только модерацию они не проходят.
Ответить

Евгений
0
# 5028
(13:02:15  21.11.2023 г.)

И как сделать отправку ответов на комментарии на почту комментатора?
Ответить

Антонина
0
# 5050
(15:10:16  04.03.2024 г.)

Редкий случай, когда тема остается злободневной несколько лет! Спасибо!
Ответить

Закрыть
Ваше имя:
367 + 6 =
Добавить комментарий:
Ваше имя:
367 + 6 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 6

Какие темы необходимо добавлять на сайт?