This example illustrates how to create a auto completion text box using AJAX, PHP and MySQL. Data is being retrieved from MySQL database and displayed using AJAX. As of now only mouse movements are being handled but keyboard events are not handled.
The example carries explanation of some parts of the code, while one can download the source,study and reuse as per your convenience. You can download the source from here.
1. index.html
<script language=”JavaScript” type=”text/javascript” src=”suggest.js”></script>
<input type=”text” id=”PoNumber” alt=”Search Criteria” onkeyup=”searchSuggest();” autocomplete=”off”/>
<div id=”layer1″></div>
The page loads the `suggest.js` file wherein the `searchSuggest` function is described. The keyboard event handler in this occasion is the `onkeyup` which checks for each letter that is being entered in the textbox. A div element is also created so that the data that has been passed by JavaScript can be handled.
2. suggest.js
var searchReq = getXmlHttpRequestObject();
This above line creates a httpRequest object for passing values.
function searchSuggest() {
if (searchReq.readyState == 4 || searchReq.readyState == 0) {
var str = escape(document.getElementById(‘PoNumber’).value);
searchReq.open(“GET”, ‘searchSuggest.php?search=’ + str, true);
searchReq.onreadystatechange = handleSearchSuggest;
searchReq.send(null);
}
}
`str` gets the value from the textbox. Each word entered in the text box is being passed to this variable which forms a part of the function. Later the values are passed on to the `searchSuggest.php` file which does all the processing.
var curLeft=0;
if (str1.offsetParent){
while (str1.offsetParent){
curLeft += str1.offsetLeft;
str1 = str1.offsetParent;
}
}
`curLeft` defines the current left position which is being initialize to 0 as the begining. `offsetparent` returns a reference to the object which is the closest (nearest in the containment hierarchy) positioned containing element. `offsetParent` returns null when the element has style.display set to “none”. Since the element can be inside many hierarchies we loop along with each of them to get hold of the value.
ss.setAttribute(‘style’,’position:absolute;top:’+curTop+’;left:’+curLeft+’;width:150;z-index:1;padding:5px;border: 1px solid #000000; overflow:auto; height:105; background-color:#F5F5FF;’);
Here `ss` represents document id of the layer. In the above line the `style` property of the div tag is being set. The `position` should always be `absolute` else the layer will not be formed. The lower elements will be pushed down to accommodate the values that are being retrieved from the database. The `top`, `left` etc. are also being put to show to drop down (div layer). `overflow` is also set so for the scrolling effect in the div tag when it crosses the defined `height`.
The other stuff in the file should be self explanatory as it declares the variables and the functions.
3. database.php
function db_connect($server = ‘localhost’, $username = ‘root’, $password = ‘enigma’, $database = ‘suggest’, $link = ‘db_link’)
Please change the `server`, `username`, `password` and `database` name corresponding to yours.
4. searchSuggest.php
A self-explanatory file. This retrieves the data from the database and passes the output to the searchSuggest function in suggest.js.
jake
Nice script, its working well, thanks
Chinju
Hi,
Thanks for this code.I tried your code and found that it’s working in firefox..In IE its not working as properly..How can i change that??Please help me..
Thanks..
Chinju
Donn Walang katulad
Thank you!!!
Ophiophagus
I have used Firefox while developing the application. I am not in a position to test it in IE. My apologies.
karthik
Thank you
spr
i have two fields serialno , cityname. I\’ll be searching by cityname and when i\’ll click on any of the suggestion serialno of that particular cityname must be inserted in
second textbox.
How to do this?
And if possible can anyone explain by an example
thanks in advance
Thimael
Hi.
I used this code in an oscommerce site, but when redirected to the advanced search, the script stop working.
For example in http://passecomposse.com/oscommerce/advanced_search_result.php?keywords=as the script is not working, but if you do a manual advanced search, like in http://www.passecomposse.com/oscommerce/advanced_search_result.php?x=65&y=15&keywords=as&categories_id=&inc_subcat=1&manufacturers_id=&pfrom=&pto=&dfrom=&dto= the script works fine!
How can it be?
Best regards,
hari vaag
hello,
does your code work in frames as i have 2 frames. one has the option of autocomplete and accordingly i have to show results in the next frame
rgds
hari vaag
Ophiophagus
I have not tested this in iframes, but it should work.
Nick Lachey
Awesome post. Hereโs a tool that lets your build your online database without programming. There is no need to hand code PHP. Cut your development time by 90%
http://www.caspio.com/
Mr C
Nice, but just doesn\’t quite work in IE, shame as it\’s the best (easiest to use) that I\’ve found so far.
Mr jackass
Best I love it
nick Newman
thank you
Jitsu
Just thank you ๐
x
Nice ๐
raj
the search panel does remain still if after i types something and instantly delete the the word i typed.. can u solve that/???
Tunde
Just used it today in an application I am working on…very nice of you to share.
pintoo
thanks for this its really simplwe and ease to implement
Rajesh
Wonderful, I did not expect that the given code is accurately work… Thank u once again…
captcha breaker
My developer is trying to convince me to move to .net from PHP.
I have always disliked the idea because of the expenses.
But he’s tryiong none the less. I’ve been using Movable-type on
various websites for about a year and am worried about switching to another platform.
I have heard great things about blogengine.
net. Is there a way I can import all my wordpress content into
it? Any kind of help would be greatly appreciated!
bals
Really Superb… Thanks a lot……
deepanjan dey
thanks
gym
Great blog.Really thank you! Cool.