Форум: "Прочее";
Текущий архив: 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];
Память: 0.57 MB
Время: 0.007 c