Jak zrobić AJAX suggest, podpowiedzi w AJAX PHP MySQL 
	
		
			 Skrypt wyświetla podpowiedzi do słowa wpisywanego przez użytkownika do wyszukiwarki, dane pobiera z bazy danych.
Skrypt podziele na 3 części 
Formularz wyszukiwania HTML;
Plik obsługujący AJAX;
Plik PHP odpowiadający na zapytanie AJAX
Do obsługi ajax wykorzystamy najlepszą według mnie biblioteke prototype : [ Pobierz ]
Plik prototype.js zapisujemy do katalogu js
 
 Poniżej przedstawiam kod HTML formularza i kod CSS do niego
			 
		
		Dalsza czê¶æ: 
			
				
				
				1
				
			
				
					
					
					
					
				2
				
			
				
					
					
					
					
				3
				
			
		
		
 
		
		
Listing 
        	// KOD HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>AJAX suggest</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<link href="styl.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/prototype.js"></script> 
<script type="text/javascript" src="js/suggest.js"></script> 
</head>
<body>
<form id="searchform" method="get" action="">
        <fieldset>
        <legend>Search</legend>
        <input id="searchinput" type="text" name="searchinput" value="" onkeyup="searchSuggest();" />
        <input id="searchsubmit" type="submit" value="Search" />
        </fieldset>
        <div id="search_suggest">
        </div>
</form>
</body>
</html>
//KOD CSS styl.css
.suggest_link {
                background-color: #f9f8f0;
                padding: 2px 6px 2px 6px;
}
.suggest_link_over {
                background-color: #ffffff;
                padding: 2px 6px 2px 6px;
                cursor:pointer;
}
#search_suggest {
                width:208px;
                position: absolute; 
                background-color: #FFFFFF; 
                text-align: left;
                border: #edebd5 solid 1px;
                visibility:hidden;
                                
}
        
 		
		
			 
		
        
		
		 	
			 
			 
		 
 
Dodano przez: 
igor  Ranga: 
Administrator serwisu  Punktów:
 0
	
	
	    niestety ale nie działa :(
złożyłem to wszytko razem i nic, programuję na co dzień w php i pewnie coś przeoczyłem jeśli chodzi o js
	
	
 
	
		autor: mkr | 58 | 2009-01-23 20:41:47
	
 
	
	    Musisz zainstalować firebug w Firefox bez tego zginiesz w ajax. Tam widzisz co zostało wysłane jakie błędy wyszły i co jest nie tak.
	
	
 
	
		autor: Igor | 59 | 2009-01-23 23:51:08
	
 
	
	    dzięki, pomogło, problem był z nawiasami w pliku suggest.js, Firebug chyba zostanie moim nowym przyjacielem :)
ale pojawił się inny problem: do momentu kiedy wpisuje słowo znajdujące się w bazie w okienku wyświetla się napis empty (zamiast listy pasujących slów - bo chyba tak to działa?), 
kiedy jednak wpiszę słowo, którego w bazie nie ma w okienku pojawia się taki komunikat:
undefinedonmouseout="javascript:suggestOut(this);" onclick="javascript:setSearch(this.innerHTML);" class="suggest_link">
a wydaje się, że wlaśnie wtedy powinien pojawic sie napis empty?
	
	
 
	
		autor: mkr | 60 | 2009-01-24 00:31:07
	
 
	
	    Podaj linka gdzie to masz ja zobaczę w którym miejscu jest błąd.
	
	
 
	
		autor: Igor | 61 | 2009-01-24 15:18:50
	
 
	
	    Już wszystko ok, w funkcji showResponse w pętli for brakuje nawiasu otwierającego blok instrukcji, stąd wziął się problem
	
	
 
	
		autor: mkr | 64 | 2009-01-26 02:01:36
	
 
	
	    Faktycznie dzięki za info, już poprawiłem nie wiem jak się to mogło stać.
	
	
 
	
		autor: Igor | 66 | 2009-01-26 13:29:16
	
 
	
	    Gdzi sie wpisuje frazy i linki kture maja wyskakiwac po wpisaniu frazy  w wyszukiwarke
????????
	
	
 
	
		autor: Jucu | 91 | 2009-02-13 23:02:23
	
 
	
	    "które", a to co ma się pokazywać dajesz w bazę linki to generujesz sam albo masz w bazie, zaawansowany suggest dodatkowo prowadzi ranking słów odpowiednio je dopasowując w tej kwestii liczy się pomysłowość i wasza intencja ja tylko podałem kod z którego można zbudować dowolne podpowiedzi.
	
	
 
	
		autor: Igor | 92 | 2009-02-13 23:26:33
	
 
	
	    Witam,
Chciałem przetestować ten przykład, jednak mam problemy z jego uruchomieniem, gdyż ciągle zwracaną wartością przez suggest.php jest wartość 'empty'. Nawet przy wywołaniu suggest.php?search=a. W przykładzie autor zapomniał dodać na końcu pliku suggest.php tagu domykającego '?>'. Czy ktoś może mi pomóc ?
	
	
 
	
		autor: apache64 | 93 | 2009-02-16 15:49:23
	
 
	
	    Tak jak wyżej sprawdź po kolei gdzie jest błąd, użyj firebug dla firefox, sprawdź tak co jest wysyłane i odbierane poprzez skrypty. Zobacz może w funcji showResponse gdzieś masz błąd.
	
	
  		- Zobacz kod dodany do tego wpisu
  	 		- 
				function showResponse (text ){       
var search_suggest  = document .getElementById ("search_suggest");
        search_suggest .style .visibility  = "visible";
var ss  = document .getElementById ('search_suggest')
ss .innerHTML  = '';
var str  = text .responseText .split("n");
for(i =0; i  < str .length  - 1; i ++){
var suggest  = '<div onmouseover="javascript:suggestOver(this);" ';
suggest  += 'onmouseout="javascript:suggestOut(this);" ';
suggest  += 'onclick="javascript:setSearch(this.innerHTML);" ';
suggest  += 'class="suggest_link">' + str [i ] + '</div>';
ss .innerHTML  += suggest ;
}
 
 
 
	
		autor: Igor | 95 | 2009-02-16 17:08:47
	
 
	
	    Właśnie się z tym uporałem. Faktycznie, okazało się, że miałem błąd w showResponse(). Dzięki.
	
	
 
	
		autor: apache64 | 97 | 2009-02-16 18:25:44
	
 
	
	    A czy naprawdę nie prościej byłoby dołożyć na koniec tego fajnego tutka jakąś spakowaną wersję gotowca bo kurde już ma dość szukania błędu, a za każdym razem pokazuje mi w firebug'u "searchSuggest is not defined" a już wszystko sprawdziłem w tej funkcji i wygląda tak jak w poście wyżej,
mógłby mi ktoś ten gotowy działający skrypt podesłać na maila sirkzzz@mail.com  , naprawdę bardzo jest mi potrzebny
	
	
 
	
		autor: sirk | 125 | 2009-03-16 19:02:41
	
 
	
	    searchSuggest is not defined oznacza ze pewnie nie zaciągnołeś js do pliku sprawdź czy na pewno ta linia kodu prowadzi do pliku suggest.js i czy ścieżka jest ok
	
	
	 
	
		autor: Igor | 127 | 2009-03-16 22:11:57
	
 
	
	    dałoby się wynik ładować tak żeby działało jak np w googlach ? żeby możnabyło wybrać strzałką odpowiedni rekord i wcisnąć ENTER ... ?
	
	
 
	
		autor: slavo | 130 | 2009-03-18 15:17:49
	
 
	
	    a :) dało by się ale to już trochę pisania, musisz użyć zdarzenia JavaScript oddziałującego na wciśnięcie strzałka w górę i w dół i przypisać im odpowiednią funkcję która przeskakuje miedzy podpowiedziami. albo po prostu zamiast wyświetlania wyników na warstwie div użyj listy rozwijanej wtedy ten komponent sam będzie reagował na strzałki i enter. Tutaj daje ci przykładowe generowanie dla pola select 
	
	
  		- Zobacz kod dodany do tego wpisu
  	 		- 
				{ 
 var suggest = '<option value="' + str[i] + '" onmouseover="javascript:suggestOver(this);" ';
 suggest += 'onmouseout="javascript:suggestOut(this);" ';
 suggest += 'onclick="javascript:setSearch(this.innerHTML);" ';
 suggest += 'class="suggest_link">' + str[i] + '</option>';
 ss.innerHTML += suggest;
 }
 
 
 
	
		autor: Igor | 133 | 2009-03-18 18:58:26
	
 
	
	    Witam hmm mam pytanko pewnie to glupie pytanie ale musicie mi wybaczyc :) poskladalem te podpowiedzi i dzialaja super! Ale nie moge jakos wpiac w nie polskich znakow. I moze odrazu powiem ze w js jestem raczej slaby... z gory dziekuje za pomoc :)
	
	
 
	
		autor: Cerber | 136 | 2009-03-19 09:52:36
	
 
	
	    Pewnie wpisujesz do bazy ręcznie i dlatego sypie się kodowanie, jak dodasz przez normalny insert bedzie ok, lecz jest tez linia kodu która jak widzisz przekodowuje znaki na utf8, usuń tą linie i sprawdź czy zadziała (podałem ją niżej)
	
	
  		- Zobacz kod dodany do tego wpisu
  	 		- 
				$db = lacz_bd();
 if (mysqli_connect_errno() === 0){
 $db -> query("SET NAMES 'utf8'");
 //albo ustaw na latin2
 //$db -> query("SET NAMES 'latin2'");
 }
 
 
 
	
		autor: Igor | 137 | 2009-03-19 12:03:36
	
 
	
	    No tak taka linia kodu byla ale troche przerobilem ten plik i moj suggest.php wyglada jak nizej. Pryeprasyam ye nie dolacyzlem go odrayu wpisuje a wpisuje do bayz y pliku txt pentelka z insert into... 
	
	
  		- Zobacz kod dodany do tego wpisu
  	 		- 
				<html >
<head META http -equiv ="content-type" content ="text/html; charset=iso-8859-2"><title >szukaj lekow </title >
</head >
<body >
<?php
$iCon = mysql_pconnect('localhost', 'nzoz_kp', 'pyr0blast');
mysql_select_db('nzoz_kp', $iCon);
$zapytanie = "SELECT `nazwa_lek`, `postac_lek`, `dawka_lek`, `opakowanie_lek` FROM leki WHERE nazwa_lek LIKE '".$_GET['search']."%' LIMIT 10";
$result = mysql_query($zapytanie);
while ($row = mysql_fetch_array($result, MYSQL_BOTH )) {
    print($row['nazwa_lek'].$row['postac_lek'].$row['dawka_lek'].$row['opakowanie_lek']."  n");
}
mysql_free_result($result);
?>
</body >
</html >
 
 
 
	
		autor: Cerber | 138 | 2009-03-19 12:25:54
	
 
	
	    Plik może niszczyć kodowanie, zobacz co jest w bazie czy tam widac polskie znaki jeśli tak użyj tej lini kodu której dałem lecz proceduralnie bo łączysz się poprzez mysql a nie obiektowo mysqli i dostosuj kodowanie jeśli nie to wes przepuść to co ma wyświetlać przez funckje iconv opisaną u nas po polsku http://funkcje.net/view/3/1/2115/index.html
	
	
	 
	
		autor: Igor | 139 | 2009-03-19 14:53:47
	
 
	
	    Bardzo dobry zestaw skryptów, ALE:
kiedy wybieram wartość, to ta wartość jest przekazywana do pola tekstowego. A co jeśli jednak nie chcę jej wybrać? Okienko warstwy pozostaje cały czas wyświetlone. Jak je zamknąć? Może użyć zdarzenia "onblur"?
Macie jakieś rozwiązanie na to?
itepe(@)vip.wp.pl
	
	
 
	
		autor: itepe | 153 | 2009-04-04 20:19:37
	
 
	
	    Możesz dodać np napisz zamknij okienko i dać mu na onclick zdarzenie zamykające okno czyli style.display="none"; to najprostsze rozwiązanie
	
	
 
	
		autor: Igor | 154 | 2009-04-05 20:02:19
	
 
	
	    Artykuł pierwsza klasa - bardzo mi pomógł. Ale funkcja escape() nie radzi sobie z kodowaniem utf8 (obcina polskie znaki) i wyszukiwanie wtedy działa nieprawidłowo. Zmieniłem ją na funkcję encodeURI() i teraz jest OK.
	
	
 
	
		autor: Adam | 189 | 2009-05-16 15:12:30
	
 
	
	    dobra robota! wszytko ladnie dziala.mam tylko pytanko:jak mozna sie pozbyc spacji na koncu stringa?
	
	
 
	
		autor: gienek | 208 | 2009-05-25 14:10:31
	
 
	
	    hmm widze ze ta spacja jest celowa zeby "chmurka" zniknela po wyborze..
ps jezeli mozna prosic autora o "lopatologicznie" wytlumacznie co gdzie i jak dodac opcje "zamknij" zeby miec mozliwosc zamkniecia okienka bez wyboru
z gory dzieki
	
	
 
	
		autor: gienek | 209 | 2009-05-25 14:16:43
	
 
	
	    ze spacja sobie poradzilem:
$str .= $wiersz['title']." \n";
$str .= $wiersz['title']."\n";
	
	
 
	
		autor: gienek | 210 | 2009-05-25 14:28:23
	
 
	
	    Kod zamykający podpowiedź jeśli brak wyniku, to nowa fersja funkcji showResponse wystarczy to podmienić w pliku javaScript i gotowe
	
	
  		- Zobacz kod dodany do tego wpisu
  	 		- 
				function showResponse(text){
 if(text.responseText==''){
 var search_suggest = document.getElementById("search_suggest");
 search_suggest.style.visibility = "visible";
 var ss = document.getElementById('search_suggest');
 ss.innerHTML = '';
 }else{
 var search_suggest = document.getElementById("search_suggest");
 search_suggest.style.visibility = "visible";
 var ss = document.getElementById('search_suggest');
 ss.innerHTML = '';
 var str = text.responseText.split("n");
 for(i=0; i < str.length - 1; i++)
 { var suggest = '<div onmouseover="javascript:suggestOver(this);" ';
 suggest += 'onmouseout="javascript:suggestOut(this);" ';
 suggest += 'onclick="javascript:setSearch(this.innerHTML);" ';
 suggest += 'class="suggest_link">' + str[i] + '</div>';
 ss.innerHTML += suggest;
 }
 }
 }
 
 
 
 
	
		autor: Igor | 215 | 2009-05-25 15:09:51
	
 
	
	    poprawiona linia: var str = text.responseText.split("\n");.
nie znam sie na js mozna by powiedziec wcale, ale nie widze roznicy miedzy pierwszym warunkiem a drugim po else, poza tym bardziej chodzi o przycisk "zamnkij" ktory zamknie podpowiedzi na zadanie uzytkownika.
Dzieki za pomoc i pozdrawiam
	
	
 
	
		autor: gienek | 226 | 2009-05-26 09:26:02
	
 
	
	    Nie linia a cała funkcja, jest różnica w warunku jak masz ze jak jest pusta odp od php to sie zamyka podpowiedz a zwykły zamknij to napisz funkcje o treści : document.getElementById("search_suggest").style.visibility = "hidden"; koniec
	
	
  		- Zobacz kod dodany do tego wpisu
  	 		- 
				//tu masz jak zrobić link
 <a href="javascript:zamknij()">Zamknij</a>
 
 //tu jak zrobić funkcje
 function zamknij(){
 document.getElementById("search_suggest").style.visibility = "hidden";
 }
 
 
 
	
		autor: Igor | 228 | 2009-05-26 20:07:37
	
 
	
	    Oto przykładowy CSS dla tego skryptu
	
	
  		- Zobacz kod dodany do tego wpisu
  	 		- 
				#search fieldset {
 margin: 0;
 padding: 0;
 border: none;
 }
 #search legend {
 display: none;
 }
 .search {
 background:url("images/search.gif");
 border:none;
 background-repeat:no-repeat;
 width:94px;
 height:21px;
 cursor:pointer;
 }
 
 .suggest_link {
 background-color: #f9f8f0;
 padding: 2px 6px 2px 6px;
 border-bottom: #E9E9E9 solid 1px;
 padding:5px 5px 5px 5px;
 }
 .suggest_link_over {
 background-color: #ffffff;
 padding: 2px 6px 2px 6px;
 cursor:pointer;
 border-bottom: #E9E9E9 solid 1px;
 padding:5px 5px 5px 5px;
 }
 #search_suggest {
 width:208px;
 position: absolute;
 background-color: #FFFFFF;
 text-align: left;
 border: #edebd5 solid 1px;
 visibility:hidden;
 
 
 
 
	
		autor: Igor | 392 | 2009-07-30 16:08:02
	
 
	
	    Obcina PL ogonki, dzeiki Adam za rade - trzeba zmieniec funkcje escape na encodeURI
	
	
 
	
		autor: Berez | 4338 | 2009-11-12 23:51:12
	
 
	
	    Nie chce "szukać" mi wyników. Sprawdziłem błędy w firebugu i wyskakuje mi :
(załącznik) co z tym zrobić?
	
	
  		- Zobacz kod dodany do tego wpisu
  	 		- 
				missing } after function body
 [Wstrzymuj na tym błędzie] /* Prototype JavaScript framework, ve...---------------*/Element.addMethods();
 prototype.js (wiersz 1)
 
 
 missing ; before statement
 [Wstrzymuj na tym błędzie] function searchSuggest(){;var str = es...yId('search_suggest').innerHTML = '';}
 
 
 
	
		autor: baggy | 12597 | 2011-10-06 20:57:30
	
 
	
	    zmarnowana kasa. Zapłaciłem za coś co nie działa.
	
	
 
	
		autor: mbierna | 12608 | 2011-10-22 14:49:16
	
 
	   
		
                        
                        	
                            
                            
                                                
                        
    
    
        
	Modowe inspiracje |
        
Android Gry i Aplikacje |
        
ZaplanujTransport.pl: Przeprowadzki, transport, aukcje |
        
Logo dla firmy |
        
Change Tires - Car Weather Forecast Reminder |
        
Laminas: MVC Framework for PHP |
        
IT Books Reviews and Programming: JS, JAVA, PHP, ANDROID, CSS | 
        
Katalog roślin |
        
Programming articles: JAVA, PHP, C++, Python, JavaScript |
        
Kancelaria Adwokacka Łukasz Huszno