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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PHP search 
:(
    Опции темы
alice18
Дата 2.3.2007, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



я недавно начала изучать пхп и сейчас пытаюсь сделать поиск по сайту. у меня пока такой скриптик получился
Код

$suchen = $_POST['suchen'];
  
  $con = mysql_connect($HOST,$ID,$PW);

  $tabelle = mysql_list_tables($DBProdukte,$con); 
  
    if (!$tabelle) {
    echo "DB error";
    echo 'MySQL error: ' . mysql_error();
    exit;
  } 
 
    
  if(strlen($suchen)<3) echo "<tr><td class=error>Error: '", $suchen,"' = 2 signs</td></tr><br>";
  else {

  while ($row_t = mysql_fetch_row($tabelle)) {
   // echo $row_t[0];
      $spalte = mysql_db_query($DBProdukte, "SELECT * from {$row_t[0]} where (name like '%$suchen%' OR beschreibung like '%$suchen%') ", $con);       
      while ($row_s = mysql_fetch_row($spalte)) {
          $result = $row_s[3];
          $result = trim(substr($result, 0, 300));    
          $result = substr($result, 0, strrpos($result, ' ')); 
          $result = strip_tags($result);
        echo $result;
      }
   mysql_free_result($spalte);
   }
      if ($result == "") {echo result is null}
   }
   mysql_free_result($tabelle);


все вроде ищет (коряво пока, но всеже;)))
так вот проблема в то, что если в строку поиска ввести 2 слова, то ничего не находится...как можно решить эту проблему?

Это сообщение отредактировал(а) PARROT - 2.3.2007, 11:58
PM MAIL   Вверх
PARROT
Дата 2.3.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



alice18, скрипт сами писали или взят из книги? Если из книги, то из какой? Автор.

Код

("SELECT * FROM tex WHERE title LIKE '%".$t."%'")


Это сообщение отредактировал(а) PARROT - 2.3.2007, 12:02


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
mishaSL
Дата 2.3.2007, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 7
Всего: 54



1. Убираем лишние пробелы:
Код

$suchen = trim($_POST['suchen']);


2. Разбиваем фразу на слова, и формируем часть  SQL запроса: (пишем это в строке 16)
Код

$words = explode(' ', $suchen)
$sqlWhere = '';
foreach($words as $w) {
    $sqlWhere .= " (CONCAT(`name`, `beschreibung`) LIKE '%".addcslashes(mysql_real_escape_string($w), '_%')."%) AND"; // AND - должны быть найдены все слова
}
$sqlWhere = substr($sqlWhere, 0, -3);


3. Меняем SQL запрос:
Код

$spalte = mysql_db_query($DBProdukte, "SELECT * from {$row_t[0]} WHERE ".$sqlWhere, $con);


Добавлено @ 12:16 
Да совсем забыл:

4. Также желатьно вырезать из массива $words, элементы меньше 3 символов


Это сообщение отредактировал(а) mishaSL - 2.3.2007, 12:20


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
alice18
Дата 2.3.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



сделала все как написано, о теперь даже при поиске одного слова ничего не находит....

а скрипт писала сама, поэтому так корявенькоsmile))
PM MAIL   Вверх
mishaSL
Дата 2.3.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 7
Всего: 54



alice18, приведите пожалуйста исправленный Вами код.

Добавлено @ 12:48 
Прошу прощения забыл кавычку.
замените:
Код

$sqlWhere .= " (CONCAT(`name`, `beschreibung`) LIKE '%".addcslashes(mysql_real_escape_string($w), '_%')."%') AND"; 



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
alice18
Дата 2.3.2007, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

  $suchen = trim($_POST['suchen']);
  
  $con = mysql_connect($HOST,$ID,$PW);

  $tabelle = mysql_list_tables($DBProdukte,$con); 
  
    if (!$tabelle) {
    echo "Error";
    echo 'MySQL error: ' . mysql_error();
    exit;
  } 

    
  if(strlen($suchen)<3) echo "<tr><td class=error>Error'", $suchen,"' = 2 signs</td></tr><br>";
  else {
  
  $words = explode(' ', $suchen);
  $sqlWhere = '';
  foreach($words as $w) {
    $sqlWhere .= " (CONCAT(`name`, `beschreibung`) LIKE '%".mysql_real_escape_string($w)."%) AND";
  } 
  $sqlWhere = substr($sqlWhere, 0, -3);

  
  while ($row_t = mysql_fetch_row($tabelle)) {
   // echo "<tr><td bgcolor=#DBE2EA>", $row_t[0], "</td></tr>";
      $spalte = mysql_db_query($DBProdukte, "SELECT * from {$row_t[0]} WHERE ".$sqlWhere, $con);      
      while ($row_s = mysql_fetch_row($spalte)) {
          $result = $row_s[3];
          $result = trim(substr($result, 0, 300));    
          $result = substr($result, 0, strrpos($result, ' ')); 
          $result = strip_tags($result);
        echo  $result;
      }
   mysql_free_result($spalte);
   }
      if ($result == "") {echo "result is null";}
   }
     mysql_free_result($tabelle);
?>


Это сообщение отредактировал(а) PARROT - 2.3.2007, 12:52
PM MAIL   Вверх
mishaSL
Дата 2.3.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 7
Всего: 54



alice18, в 20 строке замените это:
Код

$sqlWhere .= " (CONCAT(`name`, `beschreibung`) LIKE '%".mysql_real_escape_string($w)."%) AND";


на это:
Код

$sqlWhere .= " (CONCAT(`name`, `beschreibung`) LIKE '%".addcslashes(mysql_real_escape_string($w), '_%')."%') AND"; 



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
alice18
Дата 2.3.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо огромное за помощь!!!
PM MAIL   Вверх
alice18
Дата 2.3.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



я только что проверяла как работает поиск в разных браузерах и обнаружила, что в Mozilla/5.0 поиск всегда выдает "result is null"...
PM MAIL   Вверх
Рыжий
Дата 2.3.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

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



alice18, Не может быть, PHP код и MySQL не зависят от вывода в браузер.

Покажи какой код выдает ошибку? 

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


Бывалый
*


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

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



Может в твоем случае лучше воспользоваться MYSQL FULLTEXT Search, чем разбивать фразу на слова. Глянь в мануал ну или пиши сюда, если чего не понятно
--------------------
виртуальныe MYSQL и  PHP эксперты
PM MAIL WWW   Вверх
alice18
Дата 5.3.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Проблема с Mozilla/5.0 решена. Дело бфло вовсе не в поиске, просто была небольшая ошибка в html коде. Explorer эту ошибку даже не замечал, а Mozilla чувствительнее оказалась, сразу ругаться началаsmile Но теперь вроде поиск работает.

Посмотрела про MYSQL FULLTEXT Search в мануале, но если честно я не поняла с чего начать...нужно создать новую таблицу?
PM MAIL   Вверх
Всемогущий
Дата 5.3.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(alice18 @  5.3.2007,  23:04 Найти цитируемый пост)
с чего начать

с создания полнотекстового индекса по полю поиска



--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
alice18
Дата 6.3.2007, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



в мануале такой пример есть

Код

 CREATE TABLE articles (
        id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
        title VARCHAR(200),
        body TEXT,
        FULLTEXT (title,body)
        )TYPE=MyISAM;


я выполнила этот запрос в PHP MyAdmin.  таблица articles создалась. что делать дальше? как внести данные туда?
PM MAIL   Вверх
Всемогущий
Дата 6.3.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

insert into `articles` ( title, body) values ('заглавие', 'тело')

повторить n раз smile

Добавлено @ 16:53 
далее
Код

select    id, title, body 
    from 
    `articles` 
    WHERE MATCH (`title`, `body`)AGAINST ('что+ищем?')


Это сообщение отредактировал(а) Всемогущий - 6.3.2007, 16:50


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
alice18
Дата 6.3.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Всемогущий @ 6.3.2007,  16:50)
Код

insert into `articles` ( title, body) values ('заглавие', 'тело')

повторить n раз smile

а если body эTо целый текст???
и как быть если в базе появляются новые записи???  где-же динамичность???
PM MAIL   Вверх
Всемогущий
Дата 6.3.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

mysql_query ('insert into `articles` ( title, body) values (\''.$title.'\',\''.$body.'\')');

 smile

Добавлено @ 17:39 
Код

mysql_query ("insert into `articles` ( title, body) values (('$title','$body')");


Это сообщение отредактировал(а) Всемогущий - 6.3.2007, 17:40


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
alice18
Дата 6.3.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



можно еще вопрос: я должна проделать 
Код

mysql_query ("insert into `articles` ( title, body) values (('$title','$body')");



один раз в phpMyAdmin? или каждый раз в при поиске?
PM MAIL   Вверх
Всемогущий
Дата 6.3.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(alice18 @  6.3.2007,  19:55 Найти цитируемый пост)
можно еще вопрос: я должна проделать код SQL1:mysql_query ("insert into `articles` ( title, body) values (('$title','$body')");highlightSyntax('sql_MjcwMG','sql');highlightSyntax('sql_MjcwMG','sql');один раз в phpMyAdmin? или каждый раз в при поиске?

это добовление данных через php

а это поиск
Код

select    id, title, body 
    from 
    `articles` 
    WHERE MATCH (`title`, `body`)AGAINST ('что+ищем?')




--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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