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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: AJAX поиск + SQL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
lex_028
Отправлено: 21 Октября, 2014 - 21:00:00
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Нашел урок скрипта для AJAX поиска по массиву.

html

CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. <script>
  4. function showHint(str) {
  5.   if (str.length==0) {
  6.     document.getElementById("txtHint").innerHTML="";
  7.     return;
  8.   }
  9.   var xmlhttp=new XMLHttpRequest();
  10.   xmlhttp.onreadystatechange=function() {
  11.     if (xmlhttp.readyState==4 && xmlhttp.status==200) {
  12.      document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
  13.     }
  14.   }
  15.   xmlhttp.open("GET","gethint.php?q="+str,true);
  16.   xmlhttp.send();
  17. }
  18. </script>
  19. </head>
  20. <body>
  21.  
  22. <p><b>Start typing a name in the input field below:</b></p>
  23. <form>
  24. First name: <input type="text" onkeyup="showHint(this.value)">
  25. </form>
  26. <p>Suggestions: <span id="txtHint"></span></p>
  27.  
  28. </body>
  29. </html>



сама функция gethint.php

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // Fill up array with names
  3. $a[]="Anna";
  4. $a[]="Brittany";
  5. $a[]="Cinderella";
  6. $a[]="Diana";
  7. $a[]="Eva";
  8. $a[]="Fiona";
  9. $a[]="Gunda";
  10. $a[]="Hege";
  11. $a[]="Inga";
  12. $a[]="Johanna";
  13. $a[]="Kitty";
  14. $a[]="Linda";
  15. $a[]="Nina";
  16. $a[]="Ophelia";
  17. $a[]="Petunia";
  18. $a[]="Amanda";
  19. $a[]="Raquel";
  20. $a[]="Cindy";
  21. $a[]="Doris";
  22. $a[]="Eve";
  23. $a[]="Evita";
  24. $a[]="Sunniva";
  25. $a[]="Tove";
  26. $a[]="Unni";
  27. $a[]="Violet";
  28. $a[]="Liza";
  29. $a[]="Elizabeth";
  30. $a[]="Ellen";
  31. $a[]="Wenche";
  32. $a[]="Vicky";
  33.  
  34. // get the q parameter from URL
  35. $q=$_REQUEST["q"]; $hint="";
  36.  
  37. // lookup all hints from array if $q is different from ""
  38. if ($q !== "") {
  39.   $q=strtolower($q); $len=strlen($q);
  40.   foreach($a as $name) {
  41.     if (stristr($q, substr($name,0,$len))) {
  42.       if ($hint==="") {
  43.         $hint=$name;
  44.       } else {
  45.         $hint .= ", $name";
  46.       }
  47.     }
  48.   }
  49. }
  50.  
  51. // Output "no suggestion" if no hint was found
  52. // or output the correct values
  53. echo $hint==="" ? "no suggestion" : $hint;
  54. ?>


не могу скрестить с массивом из sql

PHP:
скопировать код в буфер обмена
  1. $my_sel = "SELECT tovars.name FROM tovars";
  2. $result = mysql_query($my_sel);
  3. while($row = mysql_fetch_array($result))
  4. {
  5. }
  6.  


Подскажите. Заранее спасибо
 
 Top
3d_killer
Отправлено: 21 Октября, 2014 - 21:02:44
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




непонятно что значит скрестить и к чему нижний код с запросом
 
My status
 Top
lex_028
Отправлено: 21 Октября, 2014 - 21:12:00
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




3d_killer пишет:
непонятно что значит скрестить и к чему нижний код с запросом


мне нужно что бы поиск искал не по массиву в примере

PHP:
скопировать код в буфер обмена
  1.  
  2. $a[]="Anna";
  3. $a[]="Brittany";
  4. $a[]="Cinderella";
  5. $a[]="Diana";
  6. $a[]="Eva";
  7. $a[]="Fiona";
  8. $a[]="Gunda";
  9. $a[]="Hege";
  10. $a[]="Inga";
  11. $a[]="Johanna";
  12. $a[]="Kitty";
  13. $a[]="Linda";
  14. $a[]="Nina";
  15. $a[]="Ophelia";
  16. $a[]="Petunia";
  17. $a[]="Amanda";
  18. $a[]="Raquel";
  19. $a[]="Cindy";
  20. $a[]="Doris";
  21. $a[]="Eve";
  22. $a[]="Evita";
  23. $a[]="Sunniva";
  24. $a[]="Tove";
  25. $a[]="Unni";
  26. $a[]="Violet";
  27. $a[]="Liza";
  28. $a[]="Elizabeth";
  29. $a[]="Ellen";
  30. $a[]="Wenche";
  31. $a[]="Vicky";
  32.  


а из моего массива sql

PHP:
скопировать код в буфер обмена
  1.  
  2. $my_sel = "SELECT tovars.name FROM tovars";
  3. $result = mysql_query($my_sel);
  4. while($row = mysql_fetch_array($result))
  5. {
  6. }
  7.  
 
 Top
3d_killer
Отправлено: 21 Октября, 2014 - 21:18:21
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




в запросе надо использовать LIKE
 
My status
 Top
lex_028
Отправлено: 21 Октября, 2014 - 21:26:09
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




3d_killer пишет:
в запросе надо использовать LIKE


я делал с LIKE обычной поиск на php, там все просто.

Но тут как я понимаю схема, пишем поисковое слово в форме html оно отправляется в gethint.php там скрипт ищет полученный запрос по массиву.

а если LIKE тут применять, то это какая схема получается: берем поисковое слово из html отправляем в gethint.php там с LIKE '%поисковое слово%' делаем выборку из базы и возвращаем значение?
 
 Top
3d_killer
Отправлено: 22 Октября, 2014 - 07:44:38
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




LIKE и кусок поискового слова вернет столько результатов сколько удовлетворили условию
(Добавление)
в примере у вас возвращаются значения с разделителем "," так и при запросе из базы добавьте разделитель на результаты и верните скрипту
 
My status
 Top
Flash_PR
Отправлено: 22 Октября, 2014 - 13:56:28
Post Id



Посетитель


Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013  
Откуда: Санкт-Петербург


Помог: 6 раз(а)




Загони в массив а[] свой запрос, это если без LIKE

PHP:
скопировать код в буфер обмена
  1.  
  2. $my_sel = "SELECT tovars.name FROM tovars";
  3. $result = mysql_query($my_sel);
  4. while($row = mysql_fetch_array($result))
  5. {
  6.  a[]=$row['name'];
  7. }
  8.  
  9.  


Это надо поставить вместо массива из примера.

(Отредактировано автором: 22 Октября, 2014 - 13:59:55)



-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
3d_killer
Отправлено: 22 Октября, 2014 - 14:41:39
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




Flash_PR не советуйте ерунды
(Добавление)
представим в таблице 10 млн записей и произойдет цикл перебора этих записей в php, во первых не хватит оперативки во вторых это будет на столько долго что отпадает вся эта затея с поиском
(Добавление)
Как то так (не проверял, может где в синтаксисе ошибся немного)
PHP:
скопировать код в буфер обмена
  1.  
  2.     <?PHP
  3.     // get the q parameter from URL
  4.     $q=$_REQUEST["q"]; $hint="";
  5.         $my_sel = "SELECT name FROM tovars WHERE name like '%".$q."%'";
  6.         $result = mysql_query($my_sel);
  7.         $hint=implode(',',$result['name']);  
  8.     // Output "no suggestion" if no hint was found
  9.     // or output the correct values
  10.     echo $hint==="" ? "no suggestion" : $hint;
  11.     ?>
  12.  

(Отредактировано автором: 22 Октября, 2014 - 14:52:51)

 
My status
 Top
Flash_PR
Отправлено: 22 Октября, 2014 - 14:51:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013  
Откуда: Санкт-Петербург


Помог: 6 раз(а)




3d_killer пишет:
Flash_PR не советуйте ерунды
(Добавление)
представим в таблице 10 млн записей и произойдет цикл перебора этих записей в php, во первых не хватит оперативки во вторых это будет на столько долго что отпадает вся эта затея с поиском

Радость

А я и не советую. Автор спросил как "не могу скрестить с массивом из sql" Т.е. унего есть массив.

А по уму конечно SQL запросом надо делать с LIKE, тут даже к гадалке не ходи.

Для автора:
Для работы в различных браузерах объект XMLHttpRequest создается по разному.

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function getXmlHttpRequest(){
  3.   var xmlRequest = false;
  4.   if (window.XMLHttpRequest){
  5.     //Gecko-совместимые браузеры, Safari, Konqueror
  6.     xmlRequest = new XMLHttpRequest();
  7.   }
  8.   else if (window.ActiveXObject){
  9.     //Internet explorer
  10.     try{
  11.       xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
  12.     }    
  13.     catch (e){
  14.       xmlRequest = new ActiveXObject("Msxml2.XMLHTTP");
  15.     }
  16.   }
  17.   if (!xmlRequest){
  18.     alert("Невозможно создать XMLHttpRequest");
  19.   }
  20.   return xmlRequest;
  21. }
  22.  

(Отредактировано автором: 22 Октября, 2014 - 14:59:24)



-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
esterio
Отправлено: 22 Октября, 2014 - 16:17:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




ввобщем то JSON уже использовать лучше. ну и такой финт
CODE (javascript):
скопировать код в буфер обмена
  1. var t,
  2.         input = document.getElementById('idInput');
  3. showHintTimed(){
  4.         //search value of input.value
  5. }
  6.  
  7. input.onkeyup = function() {
  8.         if(t) clearTimeout(t);
  9.         t = setTimeout(showHintTimed, 1000);
  10. }
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB