Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];

Вниз

Помогите исправить багу в скрипте поисковика   Найти похожие ветки 

 
xayam ©   (2008-08-30 11:10) [0]

http://xayam.900megs.com/
проблема такая. Короче если я ввожу в поле Пользователь значение "xayam" то все нормально - http://xayam.900megs.com/index.php?s=&pnumber=30&forum=&user=xayam . Заметьте что выводится две ветки из форума Базы. Так вот если добавить ограничение где искать "Базы", то отобразиться одна ветка - http://xayam.900megs.com/index.php?s=&pnumber=30&forum=%D0%91%D0%B0%D0%B7%D1%8B&user=xayam
В чем может быть проблема?

примерно такой код

     if (isset($_GET["pnumber"]) and $_GET["pnumber"] != "") $pnumber = $_GET["pnumber"]; else $pnumber = 30;
     if (isset($_GET["s"])) $s = $_GET["s"]; else $s = "";
     if (isset($_GET["user"])) $user = $_GET["user"]; else $user = "";
     if (isset($_GET["forum"])) $forum = $_GET["forum"]; else $forum = "";
     if (isset($_GET["page"])) $page = $_GET["page"]; else $page = 1;
     if (isset($_GET["order"])) $order = $_GET["order"]; else $order = "";

  $start = ($page - 1) * $pnumber + 1;
     if ($user == "") $myuser = 1; else $myuser = "LGN ="".$user.""";
  if ($forum == "") $myforum = 1; else $myforum = "DSC = "".$forum.""";
  if ($s == "") $against = 1; else $against = "match(TITLE) against("$s" IN BOOLEAN MODE)";

     $where = "where ($myuser) and ($myforum) and ($against)";
           $query = "select * from trd $where LIMIT $start, $pnumber";
  $query2= "select COUNT(ID_TRD) from trd $where";
  $tot   = mysql_query($query2);
 
          echo $query;  
          echo "<br />";
          echo $query2;
   
    if (!$tot) exit(mysql_error());
  $total = mysql_result($tot, 0);
  $number = (int)($total/$pnumber);
    if ((float)($total/$pnumber) - $number != 0) $number++;
    if ($total > 1)
    {  
           echo "<div>Найдено:  ".($total - 1);
  if ($forum != "") echo " на форуме ".""$forum"";
  echo "</div><div>Страницы:  ";
  //
  for ($i = 1; $i <= $number; $i++)
  {
             if ( fmod($i, 10) == 0.0 ) echo "<br />";
    if ($i != $number)
    {
      if ($page == $i) echo "[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."] ";
   else echo "<a href="index.php?page=".$i."&s=".urlencode($s)."&pnumber=".$pnumber."&forum=".url encode($forum)."&user=".urlencode($user)."">[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
    } else
    {
      if ($page == $i) echo "[".(($i - 1)*$pnumber + 1)."-".($total - 1)."] ";
   else echo "<a href="index.php?page=".$i."&s=".urlencode($s)."&pnumber=".$pnumber."&forum=".url encode($forum)."&user=".urlencode($user)."">[".(($i - 1)*$pnumber + 1)."-".($total - 1)."]</a> ";
    }
  }
?>
</div>
<hr />

<?php

 // echo $count."<br/>";

     $result = mysql_query($query);
  //echo $query;
    $i = $start;
    echo "<table width="100%" border="0"><tr><th align="center" width="5%">Номер</th><th align="center" width="*">Вопрос</th><th align="center" width="5%">Ответов</th><th align="center" width="15%">Ник</th><th align="center" width="5%">Форум</th><th align="center" width="20%">Дата</th></tr>";
    if (!$result) exit(mysql_error());
    if (mysql_num_rows($result) > 0)
    while ($row = mysql_fetch_assoc($result))
    {
    echo "<tr><td width="5%" align="center">".$i.".</td>".
                      "<td width="*"><a target="_blank" href="html/html".$row["FOLDER"]."/".substr($row["FILENAME"], 0, strlen($row["FILENAME"]) - 3)."html">".$row["TITLE"]."</a></td>".
                      "<td width="5%" align="center"><font size="-2">".$row["CNT"]."</font></td>".
                      "<td width="15%" align="center">".$row["LGN"]."</td>".
                      "<td width="5%" align="center">".$row["DSC"]."</td>".
                      "<td width="20%" align="center"><font class="date">".$row["DT"]."</font></td>".
                   "</tr>";  
      $i++;
    }
    echo "</table>";
   
?>

<hr />
<div>Страницы:  
<?php
 
  for ($i = 1; $i <= $number; $i++)
  {
             if ( fmod($i, 10) == 0.0 ) echo "<br />";
    if ($i != $number)
    {
      if ($page == $i) echo "[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."] ";
   else echo "<a href="index.php?page=".$i."&s=".urlencode($s)."&pnumber=".$pnumber."&forum=".url encode($forum)."&user=".urlencode($user)."">[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
    } else
    {
      if ($page == $i) echo "[".(($i - 1)*$pnumber + 1)."-".($total - 1)."] ";
   else echo "<a href="index.php?page=".$i."&s=".urlencode($s)."&pnumber=".$pnumber."&forum=".url encode($forum)."&user=".urlencode($user)."">[".(($i - 1)*$pnumber + 1)."-".($total - 1)."]</a> ";
    }
  }
  echo "</div>";
  } else
 if (isset($_GET["s"])) echo "<div align="center"><font color="red">Ничего не найдено!</font></div>";
?>


 
McSimm ©   (2008-08-30 11:21) [1]

Почему по DSC поиск ?
Может менялся.


 
McSimm ©   (2008-08-30 11:26) [2]

BTW,

В MySQL можно использовать
SELECT SQL_CALC_FOUND_ROWS `field1`... FROM ... WHERE ... LIMIT ...

Тогда чтобы получить количество записей не ограниченной LIMIT, можно сделать
SELECT FOUND_ROWS()


 
McSimm ©   (2008-08-30 11:30) [3]

по скрипту трудно сказать что не так.

Получите SQL для второго случая и уже с этим SQL, без PHP, разбирайтесь - сколько выдает записей и почему


 
sniknik ©   (2008-08-30 11:32) [4]

со скриптом не помогу, не спец... но вопрос имеется - а уверен что в первом поиске все показано? может дело не в доп параметре, а в том, что оно просто последнюю запись не показывает (итерация в цикле гдето завершается раньше, т.к. неправильно конец диапазона определен, на один меньше. это вообще частая ошибка независимо от языка...)
получается на 2х записях видно, а на больше ну не 67, а 66 кто внимание на одну обратит.


 
sniknik ©   (2008-08-30 11:35) [5]

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


 
xayam ©   (2008-08-30 11:42) [6]


> сколько выдает записей

во втором запросе выдает одну запись, отдельно через sql manager проверил

> почему

вот это мне непонятно, похоже на глюк mysql


 
sniknik ©   (2008-08-30 11:55) [7]

запрос по начинающим тоже на 1 меньше выдает, а вот с основной, обе... не может быть такой избирательности в одном и том же условии запроса.
вариантов 2 либо данные по которым отбор отличаются (в одном случае например вбито "Базы" в другом "Базы ") либо ты неверно формируешь.
вывел бы где для теста общее количество полученного, гадать бы не прищлось.


 
sniknik ©   (2008-08-30 12:00) [8]

> а вот с основной обе
"чудо" с основной можно обьяснить тем что в первом запросе их тоже 3, и последняя была и тут именно последней 67й... и тоже "откинутой".


 
sniknik ©   (2008-08-30 12:09) [9]

логично получается...
58 записей из прочего (с хаям)
4 из начинающих
3 из основных
2 из базы
ищем все получаем - 58 + 4 + 3 + 2 = 67 (-1 из основной) = 66
ишем прочее получаем - 57 из 58ми
начинающих получаем - 3 из 4х
основных получаем - 2 из 3х (не видна таже что из первого запроса)
базы получаем - 1 из 2х.

все сходится, ты теряешь запись...  всегда. где ты это делаешь хз. но не в запросе точно.


 
xayam ©   (2008-08-30 12:15) [10]


> sniknik ©   (30.08.08 11:55) [7]
> вывел бы где для теста общее количество полученного, гадать
> бы не прищлось.

а там выводит сверху слева - найдено столько то


 
xayam ©   (2008-08-30 12:31) [11]


> все сходится, ты теряешь запись...  всегда. где ты это делаешь
> хз. но не в запросе точно

да по ходу ты прав, запрос
select COUNT(ID_TRD) from trd where (LGN ="xayam") and (DSC = "Основная") and (1) возвращает 3, а не 2 (( значит ошибка в скрипте есть


 
xayam ©   (2008-08-30 12:41) [12]

спасибо по ходу нашел ошибку (точнее ошибки), сейчас подправлю и закачаю


 
xayam ©   (2008-08-30 12:54) [13]

все народ наконец то я доделал это DMSearch пользуйтесь в свое удовольствие, сорри что на бесплатном хостинге (с рекламой), но по-другому вряд ли возможно. Долго я этот DMS пытался закачать на бесплатный хостинг, по ходу дела пришлось решить несколько ограничений такого хостинга, во-первых, нет поддержки xml xsl, во-вторых, в одной папке не может быть больше 2000 файлов, сейчас все эти ограничения преодолены, баги, которые я нашел исправлены. Удачи.
P.S. Администрации сайта. Можно ли эту ссылку http://xayam.900megs.com указать возле поисковой строки для поиска по старым веткам?


 
Anatoly Podgoretsky ©   (2008-08-30 13:13) [14]

> xayam  (30.08.2008 12:31:11)  [11]

Зачем and (1)?


 
KilkennyCat ©   (2008-08-30 13:14) [15]


> xayam ©   (30.08.08 12:54) [13]

сервер не найден.
А что не купишь дешевый нормальный хостинг? это всего сотня рубликов в месяц


 
xayam ©   (2008-08-30 13:17) [16]


> Anatoly Podgoretsky ©   (30.08.08 13:13) [14]
> Зачем and (1)?

да это чтоб лишних проверок не делать

> KilkennyCat ©   (30.08.08 13:14) [15]
> сервер не найден.
> А что не купишь дешевый нормальный хостинг? это всего сотня
> рубликов в месяц

а у меня работает

в общем не до платного хостинга, это же надо его поддерживать постоянно, каждый раз деньги платить, эта суета мне нафиг не нужна


 
KilkennyCat ©   (2008-08-30 13:17) [17]

"взлетит" - найдена всего одна ветка!?


 
KilkennyCat ©   (2008-08-30 13:18) [18]


> xayam ©   (30.08.08 13:17) [16]

ну, ежели нормально искать будет :) я те могу предоставить на своем место.


 
xayam ©   (2008-08-30 13:20) [19]


> KilkennyCat ©   (30.08.08 13:17) [17]
> "взлетит" - найдена всего одна ветка!?

ну это немного не в тему запрос, форум то дельфийский, например "свойство" выводит 177 веток


 
xayam ©   (2008-08-30 13:22) [20]


> KilkennyCat ©   (30.08.08 13:18) [18]
> > xayam ©   (30.08.08 13:17) [16]
> ну, ежели нормально искать будет

так нормально ищет по-моему, только по названиям веток и слова длинее 3 символов (это значение по умолчанию в настройках mysql)

> я те могу предоставить на своем место.

Это где, сколько места и т.д.?


 
KilkennyCat ©   (2008-08-30 13:23) [21]

Поиск определяет, что есть делфийское?
"взлетит-не взлетит" употреблялось фиг знает сколько раз.


 
Anatoly Podgoretsky ©   (2008-08-30 13:23) [22]

> xayam  (30.08.2008 13:20:19)  [19]

А ведь много раз взлетали.


 
KilkennyCat ©   (2008-08-30 13:27) [23]


> xayam ©   (30.08.08 13:22) [20]

> так нормально ищет по-моему, только по названиям веток и
> слова длинее 3 символов (это значение по умолчанию в настройках

Ты видел, какие названия веток бывают? "Хелп!!!" "Помогите решить проблему" в лучшем случае "Удаление файла " и т.д.


>
> Это где, сколько места и т.д.?

www.kilkennycat.ru базаируется на PeterHost, место скока надо будет... кстати, лучше сразу и скажи, скока - я седня оплачивать его пойду, мож, увеличить надо будет...


 
AndreyV ©   (2008-08-30 13:28) [24]

Sennheiser
Ничего не найдено!
Думал найдёт или нет прошлогоднюю ветку Германа.


 
xayam ©   (2008-08-30 13:35) [25]


> KilkennyCat ©   (30.08.08 13:27) [23]
> www.kilkennycat.ru базаируется на PeterHost, место скока
> надо будет... кстати, лучше сразу и скажи, скока

xml xsl поддерживается (настраивается в php.ini)? А места надо где-то 1.5 гига если хранить в html и 1 гиг если хранить в xml и база данных 25 метров, можно больше чтоб на расширение хватило. Хотя мне лучше сейчас в html хранить.


 
xayam ©   (2008-08-30 13:46) [26]


> AndreyV ©   (30.08.08 13:28) [24]
> Sennheiser
> Ничего не найдено!
> Думал найдёт или нет прошлогоднюю ветку Германа.

может быть несколько вариантов
1) Вы неправильно набираете запрос
2) Ветка была удалена администрацией DM
3) Ветка не прошла разбор xml файла. К сожалению такие ветки есть и они не попали в эту базу, потому что в xml файле была ошибка


 
antonn ©   (2008-08-30 14:45) [27]


> xayam ©

у тебя код из епрвого поста прям так и есть на сайте? :)
не страшно? :)


 
xayam ©   (2008-08-30 14:47) [28]


> antonn ©   (30.08.08 14:45) [27]
> > xayam ©
> у тебя код из епрвого поста прям так и есть на сайте? :)
> не страшно? :)

не такой, но похожий. А че бояться, если кто найдет ошибки, вместе исправим, хостинг все равно не мой ))


 
antonn ©   (2008-08-30 15:09) [29]

в первом иньекцией пахнет, жесточайшей :)


 
xayam ©   (2008-08-30 15:44) [30]

это щас исправим,
$s = preg_replace("/[^a-zA-Zа-яА-Я0-9+-\*() ]/", "", $_GET["s"])
Как кстати русские буквы в preg_replace помечать, просто от А до Я или как-то по-другому?


 
McSimm ©   (2008-08-30 16:02) [31]


> xayam ©   (30.08.08 15:44) [30]
>
> это щас исправим,


Используйте mysql_real_escape_string() для переменных, из которых конструируете запрос. Не надо preg_replace.


> Можно ли эту ссылку http://xayam.900megs.com указать возле
> поисковой строки для поиска по старым веткам?

Сделаю, только через несколько дней, сейчас не могу.


 
xayam ©   (2008-08-30 16:26) [32]


> antonn ©   (30.08.08 15:09) [29]
> в первом иньекцией пахнет, жесточайшей :)

скажу тебе спасибо, если подберешь запрос, который сможет выполнить sql-код delete from trd;


 
xayam ©   (2008-08-30 16:48) [33]

подскажите еще как сделать автозаполнение на javascript, хотел использовать для этого jquery.js , но не знаю как подступиться к js


 
xayam ©   (2008-08-30 16:55) [34]

Хотя уже нашел http://www.linkexchanger.su/2008/39.html


 
antonn ©   (2008-08-30 17:09) [35]

и stripslashes сделай, а то имя потом портится %)


 
xayam ©   (2008-08-30 17:17) [36]


> antonn ©   (30.08.08 17:09) [35]
> и stripslashes сделай, а то имя потом портится %)

это для удобства подбора запроса? )))


 
xayam ©   (2008-08-30 18:33) [37]

так автозаполнение вроде сделал, пишите если не работает как надо, подтормаживает только список выпадать, на локалхосте летает


 
xayam ©   (2008-08-30 19:08) [38]

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

Еще такая мысль сделать примерно такую же форму как на этом форуме для отправки сообщений, чтоб в конец файла можно было дописать. Или на фиг?


 
xayam ©   (2008-08-30 19:43) [39]


> AndreyV ©   (30.08.08 13:28) [24]
> Sennheiser
> Ничего не найдено!
> Думал найдёт или нет прошлогоднюю ветку Германа.


вот твоя ветка http://xayam.900megs.com/html/html44/3-1168119106.html


 
xayam ©   (2008-08-31 16:00) [40]

народ давайте активнее, что еще надо в функциональность добавить? Кроме поиска по сообщениям (это я уже знаю)



Страницы: 1 2 3 4 5 вся ветка

Форум: "Прочее";
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];

Наверх















Память: 1 MB
Время: 0.061 c
2-1231303960
Лазарь
2009-01-07 07:52
2009.02.15
Как заставит программу работать автоматически?!


2-1231237384
RUBEY
2009-01-06 13:23
2009.02.15
Ошибка в коде отправки почты


2-1231075826
Hank
2009-01-04 16:30
2009.02.15
Как "загрузить" все поля в ADOQuery?


2-1230939157
Single
2009-01-03 02:32
2009.02.15
Приведение типов


2-1230991906
demon
2009-01-03 17:11
2009.02.15
Падсказка над иконкой в трее





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский