Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Поиск php+mysql
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Поиск php+mysql

Страниц (1): [1]
 

1. ATOM - 29 Ноября, 2011 - 21:50:57 - перейти к сообщению
Здравствуйте. Столкнулся с такой проблемой, захотел написать свой поиск, не совсем понял как это реализовать.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $dbhost = "localhost";
  3. $dbuser = "user";
  4. $dbpass = "pass";
  5. $dbname = "dbname";
  6. mysql_connect($dbhost,$dbuser,$dbpass)
  7. or die("Fail, no connect<br />" . mysql_error());
  8. mysql_select_db($dbname);
  9. ?>

это подключение к бд это ясно.
потом есть страница для поиска допустим:
CODE (html):
скопировать код в буфер обмена
  1. <form method="post">
  2.  
  3. Введите текст для поиска<br>
  4.  
  5. <input type="text" name="text" size="60" value="">
  6.  
  7. <input type="submit" name="submit" value="Искать">
  8.  
  9. <input type="reset" name="reset" value="Очистить">
  10.  
  11. </form>

и что дальше, как реализовать вывод. допустим в базе данных назовём её gtext, в ней есть таблица search, и как можно реализовать поиск, допустим ввёл какое то предложение или список слов через запятую, и выведет статьи где упоминается это словосочетание или ключевые слова.
2. DeepVarvar - 29 Ноября, 2011 - 22:05:49 - перейти к сообщению
мдя... А какие мысли есть хоть?
Давайте я задам вопрос, если ответите - будем разбирать, если нет - значит немного рановато...
Точнее это будет не вопрос, а задачка.
Необходимо слова принятые из формы разбить на массив и почистить от SQL-инъекций.
Как вы это сделаете???
3. ATOM - 29 Ноября, 2011 - 22:13:20 - перейти к сообщению
эмм. если не ошибаюсь как то так "ф-ция explode + real_escape_string"
4. DeepVarvar - 29 Ноября, 2011 - 22:15:01 - перейти к сообщению
Напишите код. Закатив глазки
5. sKaa - 29 Ноября, 2011 - 22:19:06 - перейти к сообщению
DeepVarvar Да рановато или нет зря ты так Недовольство, огорчение
В общем если кратко то как-то так :

Search.php :
PHP:
скопировать код в буфер обмена
  1.  
  2. $dbhost = "localhost";
  3. $dbuser = "user";
  4. $dbpass = "pass";
  5. $dbname = "dbname";
  6. mysql_connect($dbhost,$dbuser,$dbpass)
  7. or die("Fail, no connect<br />" . mysql_error());
  8. mysql_select_db($dbname);
  9.  
  10.  
  11. $text = '';
  12. if(isset($_POST['text'])) $text = mysql_real_escape_string($_POST['text']); // Запрос который пришел на страницу..
  13.  
  14. if(empty($text)) return; // Ничего не делаем если он пуст...
  15.  
  16. $array_words = explode(' ', $text);
  17.  
  18. $query = "SELECT * FROM blabla_db.blabla_table WHERE text LIKE '%".$array_words[0]."%'";
  19. $res = mysql_query($query);
  20. if($res)
  21. if(mysql_num_rows($res))
  22. while($array = mysql_fetch_assoc($res)){
  23. // ....
  24. }
  25.  
6. ATOM - 29 Ноября, 2011 - 22:23:01 - перейти к сообщению
спасибо буду пробовать
(Добавление)
видимо я криво жопый , и из жопы растут руки, могу отблагодарить первый кто сделает готовый скрипт с подключением с вводом текста в поиск и вывод и пример бд, отблагодарю 5WMZ, мелочь но приятно=)
7. DlTA - 29 Ноября, 2011 - 23:01:37 - перейти к сообщению
sKaa приведенный код без предварительной чистки от множественных пробелов найдет "все"
(Добавление)
та и в принцыпе не совсем корректный
8. DeepVarvar - 29 Ноября, 2011 - 23:38:54 - перейти к сообщению
Блиин, я гдето тут на форуме писал как собрать все слова в запрос..
(Добавление)
PHP:
скопировать код в буфер обмена
  1. $arr = explode(" ",$_POST['text']);
  2. $query = "SELECT * FROM tbl WHERE field LIKE '%";
  3. $words = array();
  4. foreach ($arr as $word) {
  5.   if (trim($word) != "")
  6.   }
  7. $query .= implode("%' OR field LIKE '%",$words)."%'";
  8. // дальше обычный запрос и вывод, такой, какой нужен...
9. ATOM - 29 Ноября, 2011 - 23:56:15 - перейти к сообщению
ребята извиняюсь соображалка вообще не работает, как это всё впихнуть, в отдельные файлы и что бы работало, нужен готовый скрипт
10. DeepVarvar - 29 Ноября, 2011 - 23:58:26 - перейти к сообщению
если никто не напишет, я с утра напишу..
11. DlTA - 30 Ноября, 2011 - 00:04:57 - перейти к сообщению
ATOM пишет:
ребята извиняюсь соображалка вообще не работает, как это всё впихнуть, в отдельные файлы и что бы работало, нужен готовый скрипт
ды там же уже все написано
DeepVarvar пишет:
$arr = explode(" ",$_POST['text']);
...
$query .= implode("%' OR field LIKE '%",$words)."%'";


только перед $arr = explode(" ",$_POST['text']);
надо сделать ченить типа
$_POST['text'] = preg_replace("/\s{2,}/"," ",$_POST['text']);
иначе если кто нить введет множественный пробел, вывод загнется, ну или выведет первое что попадет по списку, а не то что искали
12. ATOM - 30 Ноября, 2011 - 00:27:14 - перейти к сообщению
спасибо товарищи, буду ждать DeepVarvar =)
13. DeepVarvar - 30 Ноября, 2011 - 12:00:06 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $dbhost = "localhost";
  2. $dbuser = "user";
  3. $dbpass = "pass";
  4. $dbname = "dbname";
  5. mysql_connect($dbhost,$dbuser,$dbpass)
  6.     or die("Fail, no connect<br />" . mysql_error());
  7. mysql_select_db($dbname);
  8.  
  9. $action = false;
  10. $searchresult = array();
  11. if isset($_POST['submit']) {
  12.   $text = preg_replace("/\s+/"," ",$_POST['text']);
  13.   if (trim($text) != "" and strlen(trim($text)) > 5) $action = true;
  14.   }
  15.  
  16. if ($action) {
  17.   $arr = explode(" ",$text);
  18.   $query = "SELECT ututu,blabla FROM tbl WHERE field LIKE '%";
  19.   $words = array();
  20.   foreach ($arr as $word) {
  21.     if (trim($word) != "")
  22.       $words[] = htmlspecialchars(mysql_real_escape_string(trim($word)));
  23.     }
  24.   $query .= implode("%' OR field LIKE '%",$words)."%'";
  25.   $res = mysql_query($query);
  26.   if(mysql_num_rows($res) > 0)
  27.     while($row = mysql_fetch_assoc($res)) $searchresult[] = $row;
  28.   }
  29.  
  30. if (count($searchresult) > 0) var_dump($searchresult);
  31. else echo "Ничо не нашлося...";
14. ATOM - 30 Ноября, 2011 - 12:51:07 - перейти к сообщению
спасибо товарищи всем за помощь, но увы ничего не смог сам сделать.

 

Powered by ExBB FM 1.0 RC1