Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск по сайту. 
:(
    Опции темы
VoTeR
Дата 21.1.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.1.2006

Репутация: -1
Всего: нет



И так по порядку:
1.Результат echo $q;
select * from stati where text like '%КПК%' or name like '%смартфоны%' and kat='КПК' order by id desc
2.Результат echo mysql_error();
Ничего он не вывел
3.Теперь про $search_name
Код

echo'<form method="POST" action="/index.php?action=stati&act=go">
 Ключевая фраза<input type="text" name="search_name" size="28" value="'.$search_name.'">
 Категория
  <select size="1" name="search_kat">
    <option>КПК</opt ion>
    <option>Смартфоны</option>
    <option>Все статьи</option>
  </select>
  <br>
  <input type="submit" value="Искать" name="B1"><input type="reset" value="Сбросить" name="B2">
</form>';

$search_name это название поля, через которое я ищу.
Вроде все... а тут коментировать? вроде все понятно.

Это сообщение отредактировал(а) VoTeR - 21.1.2006, 14:09
PM MAIL   Вверх
Kefir
Дата 21.1.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



Код

$q = "select * from stati where text like '%$search_name%' or name like '%$search_name%' and kat='$search_kat' order by id desc";

Код

select * from stati where text like '%КПК%' or name like '%смартфоны%' and kat='КПК' order by id desc

Очень интересно каким образом переменная $search_name даёт в одном месте значение "КПК", а в другом "смартфоны". Я всегда считал это невозможным. Скинь полностью исходники. А то так у тебя такие парадоксы, что ничего не понятно.
PM MAIL WWW Skype   Вверх
VoTeR
Дата 21.1.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.1.2006

Репутация: -1
Всего: нет



Держи
Код

echo $my->center_border_center('<div align="CENTER">
<form method="POST" action="/index.php?action=stati&act=go">
 Ключевая фраза <input type="text" name="search_name" size="28" value="'.$search_name.'">
 Категория
  <select size="1" name="search_kat">
    <option>КПК</opt ion>
    <option>Смартфоны</option>
    <option>Все статьи</option>
  </select>
  <br>
  <input type="submit" value="Искать" name="B1"><input type="reset" value="Сбросить" name="B2"></form>');
if(isset($act))
  {
  if($act=='go')
    {
echo $my->center_border_top('Результаты поиска');
$result = array();
//Сам запрос.
$q = "select * from stati where text like '%$search_name%' or name like '%$search_name%' and kat='$search_kat' order by id desc";
$res = mysql_query($q);
//Просил вывести, вывожу
echo mysql_error();
$n = mysql_num_rows($res);
for($i=0; $i < $n; $i++) {
  $result[$i] = mysql_fetch_assoc($res);

}
//Просил вывести, вывожу
echo $q;
mysql_free_result($res);

$search_string = $search_name;
$search_bits = explode(" ", $search_string); // разбиваем поиск на слова и сохраняем массив слов в $search_bits
$replace_bits = array();
// Далее формируем массив для замены:
for($i = 0; $i < count($result); $i++) {
  $replace_bits[$i] = '<b><font color="#FF0000"><span style="background-color: #FFFF00">'.$search_bits[$i].'</span></font></b>';
//  echo $replace_bits[$i];
}
// И наконец заменяем значения массива поиска на значения массива замены:
for($i = 0; $i < count($result); $i++) {
  $result[$i]['text'] = str_replace($search_bits, $replace_bits, $result[$i]['text']);
  $result[$i]['name'] = str_replace($search_bits, $replace_bits, $result[$i]['name']);

$name = $result[$i]['name'];
$kat = $result[$i]['kat'];
$text = $result[$i]['text'];
$id = $result[$i]['id'];
$site = $result[$i]['site'];
$text = substr($text, 0, 300);
//У меня специальная форма вывода $my->center_border_stati_search. нода будет напишу
echo $my->center_border_stati_search($name, $kat, $text, $id, $site, $search_name);;
}
}
}

PM MAIL   Вверх
Kefir
Дата 21.1.2006, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



гм... в общем несколько замечаний:
1. используй глобальные переменные ($_GET, $_POST etc.)
2. неправильно сделан запрос к базе. $search_name сначала надо разбить на слова и затем каждое слово искать при помощи LIKE.
3. так и не понял где вообще коннект к бд... где закрытие соединения... хотя главное, чтобы оно просто было smile

Твои дальнейшие действия:
После
Код

// на самом деле тут надо генерировать запрос динамически, это я так, чтобы было понятно куда надо подставить строку
$q = "select * from stati where text like '%$search_name%' or name like '%$search_name%' and kat='$search_kat' order by id desc";

ставишь echo $q; и смотришь какой запрос у тебя генерируется.
Затем открываешь MySQL Query Browser или phpMySQL admin или любой другой фронтэнд для произведения запроса к БД и пытаешься выполнить тот запрос, который тебе показал скрипт (echo $q). Затем если всё хорошо, но результат не такой как ты хочешь, ищешь логическую ошибку в запросе и пытаешься её устранить. Если выполнение запроса возвращает ошибку опять же смотришь где напортачил и исправляешь.
Итак, на данной стадии ты должен уже знать какой запрос должен генерировать твой скрипт для того чтобы БД возвращала нужные записи. Теперь ты пишешь ПХП, генерирующий нужный запрос.
Таким образом, ты сможешь дойти до того, что твой код будет работать.
Добавлено @ 15:19
да, и ещё, если что-то не понимаешь - RTFM. И уж потом сюда.
PM MAIL WWW Skype   Вверх
VoTeR
Дата 21.1.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.1.2006

Репутация: -1
Всего: нет



конект к БД идет на гл. странице.делаю запрос после разбиения поля на слова он пишет:
select * from stati where text like '%Array%' or name like '%Array%' and kat='КПК' order by id desc
Код

$search_string = $search_name;
$search_bits = explode(" ", $search_string); 
$replace_bits = array();


$result = array();
$q = "select * from stati where text like '%$search_bits%' or name like '%$search_bits%' and kat='$search_kat' order by id desc";
echo $q;
$res = mysql_query($q);
 echo mysql_error();
$n = mysql_num_rows($res);
for($i=0; $i < $n; $i++) {
  $result[$i] = mysql_fetch_assoc($res);
}
mysql_free_result($res);


for($i = 0; $i < count($result); $i++) {
  $replace_bits[$i] = '<b><font color="#FF0000"><span style="background-color: #FFFF00">'.$search_bits[$i].'</span></font></b>';
}

PM MAIL   Вверх
Kefir
Дата 21.1.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



ну дык ясно что он будет слово Array подставлять. Даю пример того как должен выглядеть запрос при строке поиска "я хочу найти что-нибудь эдакое"
Код

SELECT * FROM stati WHERE text LIKE '%я%' OR text LIKE '%хочу%' OR text LIKE '%найти%' OR text LIKE '%что-нибудь%' OR text LIKE '%эдакое%'

Это поиск по полю text.
PM MAIL WWW Skype   Вверх
VoTeR
Дата 21.1.2006, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.1.2006

Репутация: -1
Всего: нет



Ясно. я сделал, чтобы он искал по первому слову. но я же не знаю сколько кто будет вводить слов в поле поиска!
и вообще как сделать, чтобы он определял сколько слов в поле, а потом подставлял в запрос каждое слово. типа text like '%$search_bits[$i+1]%'
PM MAIL   Вверх
Kefir
Дата 21.1.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



неужели это так сложно??
Код

$search_str = "я хочу найти что-нибудь эдакое";
$search_bits = explode(" ", $search_str);
$query_bits = array();
for($i=0; $i<count($search_bits); $i++) {
  $query_bits[$i] = "text LIKE '%".$search_bits[$i]."%'";
}
$query = "SELECT * FROM ... ... ".implode(" OR ", $query_bits);


From now on, you're on your own.

Это сообщение отредактировал(а) Kefir - 22.1.2006, 11:11
PM MAIL WWW Skype   Вверх
VoTeR
Дата 21.1.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.1.2006

Репутация: -1
Всего: нет



А дело в том, что во время запроса он не читает
Код

for($i=0; $i<count($search_bits); $i++) {    
  $query_bits = "text LIKE '%".$search_bits[$i]."%'";    
}

Я поначалу что-то подобно пытался сделать.. а он не читал то, что между {}
Добавлено @ 17:39
Вот код.
Код

$search_string = $search_name;
$search_bits = explode(" ", $search_string);
$replace_bits = array();

for($i = 0; $i < count($result); $i++) {
  $query_bits = "text LIKE '%".$search_bits[$i]."%'";
}

$result = array();
$q = "select * from stati where ".implode(" OR ", $query_bits)." and kat='$search_kat' order by id desc";
echo $q;

а вот что он выдает
Код

Warning: implode(): Bad arguments. in w:\home\localhost\WWW\inc\stati.inc on line 55
select * from stati where and kat='КПК' order by id desc

На 55 строчке находится $q = "select * from stati where ".implode(" OR ", $query_bits)." and kat='$search_kat' order by id desc";
PM MAIL   Вверх
VoTeR
Дата 21.1.2006, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.1.2006

Репутация: -1
Всего: нет



И так получается:
Так он производит поиск по последнему слову, котороя я ввел в поле.
Код

for($i = 0; $i < count($search_bits); $i++) {
  $query_bits = array("text LIKE '%".$search_bits[$i]."%'");
}
$q = "select * from stati where ".implode(" OR ", $query_bits)." and kat='$search_kat' order by id desc";
echo $q.'<br>';

А так он ТОЖЕ ищет по последнему слову, но echo он выводит якобы 2 запроса:
for($i = 0; $i < count($search_bits); $i++) {
$query_bits = array("text LIKE '%".$search_bits[$i]."%'");
$q = "select * from stati where ".implode(" OR ", $query_bits)." and kat='$search_kat' order by id desc";
echo $q.'<br>';
}
И так что получается в итоге: нода завпрос разбить на 3 части.
и сделать что-то вроде
Код

$q = "select * from stati where ".
for($i = 0; $i < count($search_bits); $i++) {
  $query_bits = array("text LIKE '%".$search_bits[$i]."%'");
  implode(" OR ", $query_bits)
}
" and kat='$search_kat' order by id desc";
echo $q.'<br>';

Этим я сделал(но 100% неправильно) implode(" OR ", $query_bits) должно показываться столько, сколько слов в поле => оно должно находиться между {}. А вот сам запрос НЕ должен копироваться... Ваши мысли, люди.
PM MAIL   Вверх
Mal Hack
Дата 22.1.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Модератор: VoTeR, ошибки учитесь отлавливать сами. Вам ПХП русским по белому пишет.
PM ICQ   Вверх
VoTeR
Дата 22.1.2006, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.1.2006

Репутация: -1
Всего: нет



Спс. сделал. теперь с выделением как быть? выделяет только первое слово, введено в поле
Код

for($i = 0; $i < count($result); $i++) {
  $replace_bits[$i] = '<b><font color="#FF0000"><span style="background-color: #FFFF00">'.$search_bits[$i].'</span></font></b>';
  $result[$i]['text'] = str_ireplace($search_bits[$i], $replace_bits[$i], $result[$i]['text']);
$name = $result[$i]['name'];
$kat = $result[$i]['kat'];
$text = $result[$i]['text'];
$id = $result[$i]['id'];
$site = $result[$i]['site'];
$text = substr($text, 0, 300);


echo $my->center_border_stati_search($name, $kat, $text, $id, $site);

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1425 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.