Создать ответ 
Поиск на сайте по комментариям из БД
Автор Сообщение
artindustrial Не на форуме
Младший сержант
*

Сообщений: 21
У нас с: Nov 2012
Сообщение: #11
RE: Поиск на сайте по комментариям из БД
(18.11.2012 21:13:30)Admin писал(а):  Перечитал несколько раз Ваше сообщение, но так ничего и не понял. Unknown

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

Насколько я понимаю, у Вас все имена таблиц и полей отличаются, из-за этого и все проблемы.


Да нет, имена таблиц и полей те же, посмотрите пожалуйста, вот что получается : удалено!
(Последний раз сообщение было отредактировано 18.11.2012 в 22:00:35, отредактировал пользователь artindustrial.)
18.11.2012 21:48:24
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #12
RE: Поиск на сайте по комментариям из БД
Лучше скиньте код странички, т.к. трудно гадать на кофейной гуще не видя кода, вот тогда, возможно, я смогу Вам помочь.

И опишите точнее, что Вам нужно сделать.
18.11.2012 21:58:55
Найти все сообщения Цитировать это сообщение
artindustrial Не на форуме
Младший сержант
*

Сообщений: 21
У нас с: Nov 2012
Сообщение: #13
RE: Поиск на сайте по комментариям из БД
(18.11.2012 21:58:55)Admin писал(а):  Лучше скиньте код странички, т.к. трудно гадать на кофейной гуще не видя кода, вот тогда, возможно, я смогу Вам помочь.

И опишите точнее, что Вам нужно сделать.


Код:
<?php
session_start();
$link = mysql_connect("localhost", "***", "***") or die("Could not connect: " . mysql_error());
mysql_select_db("***", $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]) {
  $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;
?>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Route 66</title>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
</head>
<body>
<!-- ##### BEGIN LAYOUT ##### -->
<div id="container">
  <!-- ##### BEGIN header-##### -->
  <div id="header">
    <img src="images/foto.jpg" />
  </div>
  <!-- ##### END header-##### -->
  <div id="wrapper">
    <div id="content">
      <div id="maintext">
        <!-- ##### BEGIN CONTENT ##### -->
<p align=center><padding: right 15px><font size=4 color=b70005=Arial><a href="#"  onclick="document.getElementById('my_form').style.display='block'  ;">Ваш вопрос</a></font></padding></p>
<br>
<div id="my_form" style="display: none;">
<?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="#f1f1f1" 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="200" rows="5" name="user_text" required>'
.$_SESSION[comment_user_text].'</textarea><br>';
echo '</td></tr><tr><td width="200">';

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).'">';

echo '<input type="text" name="contr_cod" maxlength="5" size="5" 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>';
?>
</div>
<br><br>


<table width="600px" border="1" cellspacing="0" cellpadding="1">
<td><a href="posledvoprosi.php">Последние вопросы</a></td>
<td><a href="popularvoprosi.php">Популярные вопросы</a></td>
<td><a href="voprosimesyaca.php">Выбор редакции</a></td>
</table>


<?php
$result_ocenki = mysql_query("SELECT sum(ocenka=1),comment_id FROM ocenka_comment WHERE (date>CURDATE()-INTERVAL 1 MONTH) GROUP BY comment_id ORDER BY sum(ocenka=1)desc LIMIT 30", $link);
$number = mysql_num_rows($result_ocenki);
for ($n=1; $n<=$number; $n++) {
$id_comm=mysql_fetch_array($result_ocenki);
$result = mysql_query("SELECT * FROM comment WHERE id='".$id_comm[comment_id]."'", $link);
$comments=mysql_fetch_array($result);

echo '<br><table border="0" width="90%" style="border: 0px solid #4874a3;"><tr>';
echo '<td align="left">';
echo '<div id="m'.$comments[id].'"></div><b>'.$comments[login].'</b></td>';
echo '<td width="100">';
echo '<span style="font-size:9px;">('.$comments[date].')</span></td>';
echo '<td width="5" align="right">';
echo '<form method="POST" action="'.$_SESSION[mess_url].'#m'.$comments[id].'">';
echo '<input type="hidden" name="comment_id" value="'.$comments[id].'">';
echo '<input type="hidden" name="ocenka" value="1">';
echo '<input type="image" src="images/kylaka.png" title="Голосовать">';
echo '</form>';
echo '<b>'.($ocenka_com[0]-$ocenka_com[1]).'</b></td>';
echo '</form></td></tr></table>';
echo '<table border="0" width="100%" style="border: 1px solid #eeeeee;">';
echo '<tr><td colspan="5" align="justify">';
echo wordwrap(nl2br($comments[message]), 70, "\n", 1);
echo '</td></tr></table>';
}
?>
        <!-- ##### END CONTENT ##### -->
      </div>
    </div>
  </div>
  <!-- ##### BEGIN LEFT COLUMN ##### -->
  <div id="leftcolumn">
    <!-- ##### BEGIN NAVIGATION ##### -->
      <size="5">Вопрос <a href="cms.html">недели</a> <a href="cms.html">месяца</a> <a href="cms.html">года</a></size>
    <ul id="menu">
      <h1>Темы :</h1>

    </ul>


<form action="" method="post" id="content">
<div class="form-item">
<input type="text" name="search_text" value="" maxlength="128" placeholder="Найти...">
</div>

<div class="form-actions">
<input type="submit" name="op" value="Поиск" class="form-submit">
</div>
</form>

    <!-- ##### END NAVIGATION ##### -->
    <div class="infobox">
      <!-- ##### BEGIN NEWS ##### -->
      <!-- ##### END NEWS ##### -->
    </div>
  </div>
  <!-- ##### END LEFT COLUMN ##### -->
  <!-- ##### BEGIN FOOTER ##### -->
<div id="footer"> &copy; Copyright 2007 by Your Name | Design by <a rel="nofollow" target="_blank" href="***">wfiedler</a> </div>
  <!-- ##### END FOOTER ##### -->
</div>
<!-- ##### END LAYOUT ##### -->
</body>
</html>


Код понятен спасибо вам огромное. Но когда вы прошли по ссылке, открылось много комментариев, были строки пустые? Но с нолями на месте даты и комментария? Хотелось бы убрать эти пустые строки.
(Последний раз сообщение было отредактировано 18.11.2012 в 22:04:32, отредактировал пользователь artindustrial.)
18.11.2012 22:02:56
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #14
RE: Поиск на сайте по комментариям из БД
Код вроде у Вас в порядке.
Насколько я понял у Вас можно ставить только плюсы комментариям.
Еще поправьте строчку echo '<b>'.($ocenka_com[0]-$ocenka_com[1]).'</b></td>'; на такую - echo '<b>'.$id_comm[0].'</b></td>';

По поводу "пустых" строк с нулями, могу предположить, что все дело в MySQL базе, а точнее в том, что в ней содержатся оценки к несуществующим комментариям (возможно комментарии были удалены).

А еще я что-то не наблюдаю кода, который отвечает за добавление оценок в базу.
18.11.2012 22:25:59
Найти все сообщения Цитировать это сообщение
artindustrial Не на форуме
Младший сержант
*

Сообщений: 21
У нас с: Nov 2012
Сообщение: #15
RE: Поиск на сайте по комментариям из БД
(17.11.2012 20:50:05)Admin писал(а):  Попробуйте добавить условие WHERE UNIX_TIMESTAMP(date)<CURDATE()-INTERVAL 1 MONTH

Сразу не посмотрел, что дату мы храним не в формате UNIX, поэтому нам потребуется ее преобразование при помощи UNIX_TIMESTAMP().

Спасибо вам огромное, все работает, я вам должен что то за проделанную работу? Smile
21.11.2012 23:04:59
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #16
RE: Поиск на сайте по комментариям из БД
Вы никому ничего не должны.
Наш сайт является абсолютно бесплатным и предоставляет все имеющиеся на сайте скрипты тоже абсолютно бесплатно. Пользуйтесь на здоровье.
22.11.2012 19:45:58
Найти все сообщения Цитировать это сообщение
artindustrial Не на форуме
Младший сержант
*

Сообщений: 21
У нас с: Nov 2012
Сообщение: #17
RE: Поиск на сайте по комментариям из БД
(18.11.2012 22:25:59)Admin писал(а):  Код вроде у Вас в порядке.
Насколько я понял у Вас можно ставить только плюсы комментариям.
Еще поправьте строчку echo '<b>'.($ocenka_com[0]-$ocenka_com[1]).'</b></td>'; на такую - echo '<b>'.$id_comm[0].'</b></td>';

По поводу "пустых" строк с нулями, могу предположить, что все дело в MySQL базе, а точнее в том, что в ней содержатся оценки к несуществующим комментариям (возможно комментарии были удалены).

А еще я что-то не наблюдаю кода, который отвечает за добавление оценок в базу.

Ещё вопросикSmile как поставить ограничения на добавление комментариев, например 1 комп может добавить только 1 комент в неделю, в случае добавления большего количества появляется табл, вы превысили лимит, попробуйте позже?

И ещё момент, на популярные вопросы в код SELECT sum(ocenka=1),sum(ocenka=0),comment_id FROM ocenka_comment WHERE (date>CURDATE()-INTERVAL 1 MONTH необходимо как то написать что бы он выдавал только за 1 месяц, например 2012-11-00, прописывал много чего но пишет ошибку, подскажите пожалуйста.
(Последний раз сообщение было отредактировано 27.11.2012 в 19:24:04, отредактировал пользователь artindustrial.)
27.11.2012 12:42:25
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #18
RE: Поиск на сайте по комментариям из БД
По поводу выборки за текущий месяц, следует использовать примерно такую конструкцию:

$result = mysql_query("SELECT * FROM ocenka_comment WHERE date_format(date, '%Y%m') = date_format(now(), '%Y%m')", $link);

За указанный месяц и год (например, октябрь 2012) примерно так:
$result = mysql_query("SELECT * FROM ocenka_comment WHERE date_format(date, '%Y%m') = date_format('2012-10-00 00:00:00', '%Y%m')", $link);

Если нужно ограничивать пользователей в отправке комментариев, то нужно перед записью в базу комментария делать простой SELECT к базе и смотреть, были ли с данного IP оставлены комментарии. Если да, то выводим сообщение, в противном случае - добавляем в базу.

Вы записываете IP адреса тех, кто оставляет комментарии? Если да, то у Вас должно получиться что-то вроде этого:
$result = mysql_query("SELECT count(id) FROM comment WHERE ip='".$time."' and date>UNIX_TIMESTAMP()-2592000", $link);
$number = mysql_fetch_array($result);
if ($number[0]>0) echo 'Вы не можете оставлять комментарии';
else //добавляем в базу

где 2592000 - один месяц (24*24*60*30).
27.11.2012 20:51:03
Найти все сообщения Цитировать это сообщение
artindustrial Не на форуме
Младший сержант
*

Сообщений: 21
У нас с: Nov 2012
Сообщение: #19
RE: Поиск на сайте по комментариям из БД
(27.11.2012 20:51:03)Admin писал(а):  По поводу выборки за текущий месяц, следует использовать примерно такую конструкцию:

$result = mysql_query("SELECT * FROM ocenka_comment WHERE date_format(date, '%Y%m') = date_format(now(), '%Y%m')", $link);

За указанный месяц и год (например, октябрь 2012) примерно так:
$result = mysql_query("SELECT * FROM ocenka_comment WHERE date_format(date, '%Y%m') = date_format('2012-10-00 00:00:00', '%Y%m')", $link);

Если нужно ограничивать пользователей в отправке комментариев, то нужно перед записью в базу комментария делать простой SELECT к базе и смотреть, были ли с данного IP оставлены комментарии. Если да, то выводим сообщение, в противном случае - добавляем в базу.

Вы записываете IP адреса тех, кто оставляет комментарии? Если да, то у Вас должно получиться что-то вроде этого:
$result = mysql_query("SELECT count(id) FROM comment WHERE ip='".$time."' and date>UNIX_TIMESTAMP()-2592000", $link);
$number = mysql_fetch_array($result);
if ($number[0]>0) echo 'Вы не можете оставлять комментарии';
else //добавляем в базу

где 2592000 - один месяц (24*24*60*30).

По дате - нужно просто задать выдачу 1-го комента самого популярного по оценкам за один месяц, например

2012-сентябрь-00
логин дата комента оценка
комент

2012-октябрь-00
логин дата комента оценка
комент


Просто нужно задать вывод 1-го комента за один месяц из таблицы comment.
27.11.2012 22:37:13
Найти все сообщения Цитировать это сообщение
artindustrial Не на форуме
Младший сержант
*

Сообщений: 21
У нас с: Nov 2012
Сообщение: #20
RE: Поиск на сайте по комментариям из БД
Все разобрался . Спасибо.
(Последний раз сообщение было отредактировано 28.11.2012 в 16:25:37, отредактировал пользователь artindustrial.)
28.11.2012 16:12:50
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru