Страницы: 1 2 3 4 5 вся ветка
Форум: "Прочее";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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 вся ветка
Форум: "Прочее";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.84 MB
Время: 0.076 c
15-1229554836     Sergius P             2008-12-18 02:00  2009.02.15  
Разгроничение скорости по ЛС


15-1228372329     nnov                  2008-12-04 09:32  2009.02.15  
Включеная флэшка картридера


2-1230648345      Nameziz               2008-12-30 17:45  2009.02.15  
ReleaseDC


2-1230553408      charoey_mag           2008-12-29 15:23  2009.02.15  
Русские буквы в английской винде


2-1231119749      Andrnow               2009-01-05 04:42  2009.02.15  
Вопрос по определению формы MDI приложения и про расширение файла