<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Devirtuoso &#187; PHP</title>
	<atom:link href="http://www.devirtuoso.com/category/back-end/php-back-end-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.devirtuoso.com</link>
	<description>Web Development Wickedness</description>
	<lastBuildDate>Sat, 20 Mar 2010 16:35:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Beginners Guide to jQuery Sorting Part 2</title>
		<link>http://www.devirtuoso.com/2009/09/beginners-guide-to-jquery-sorting-part-2/</link>
		<comments>http://www.devirtuoso.com/2009/09/beginners-guide-to-jquery-sorting-part-2/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 21:56:03 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=1040</guid>
		<description><![CDATA[In the last tutorial we covered how to reorder a list by dragging and dropping.&#160; In this tutorial we will show how to save the order of the list via Ajax.

Where We Left Off
We should be at a point where we now know how to reorder a list.&#160; If you haven’t read the previous tutorial [...]]]></description>
			<content:encoded><![CDATA[<p>In the <a title="Beginners Guide to jQuery Sorting" href="http://www.devirtuoso.com/2009/09/beginners-guide-to-jquery-sorting/" target="_blank">last tutorial</a> we covered how to reorder a list by dragging and dropping.&#160; In this tutorial we will show how to <strong>save the order</strong> of the list via <strong>Ajax</strong>.</p>
<p><span id="more-1040"></span></p>
<h2>Where We Left Off</h2>
<p>We should be at a point where we now know how to reorder a list.&#160; If you haven’t read the previous tutorial or aren’t certain on how to reorder lists in jQuery, I encourage you to check out <a href="http://www.devirtuoso.com/2009/09/beginners-guide-to-jquery-sorting/" target="_blank">Beginners Guide to jQuery Sorting part 1</a>.</p>
<p>Here is the code from the previous post:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a> <span class="kw3">lang</span><span class="sy0">=</span><span class="st0">&quot;en&quot;</span>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>jQuery UI Sortable - Drop placeholder<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <br />
<br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color:white;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style-type: none; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 0; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: 0; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width:300px<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable li { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 0 5px 5px 5px; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: 5px 20px; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-size: 1.2em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: 1.5em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #678;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cursor:pointer;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable li.highlight { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: 1.5em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; line-height: 1.2em;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #036;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-image: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; border:none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://jqueryui.com/latest/ui/ui.sortable.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; $(function() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; $(&quot;#sortable&quot;).sortable({<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; placeholder: 'highlight'<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; &nbsp; &nbsp; $(&quot;#sortable&quot;).disableSelection();<br />
&nbsp; &nbsp; });<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;sortable&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 1<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 2<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 3<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 4<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 5<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 6<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span>Item 7<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/li.html"><span class="kw2">li</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/ul.html"><span class="kw2">ul</span></a>&gt;</span><br />
<br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>What We’re Building</h2>
<p>This time around we’re just going to take the current order of the list and save it to the database for future use.</p>
<div class="resources"><a class="Download" href="http://www.devirtuoso.com/Examples/Drag-Drop/example2.zip" target="_blank">Download</a> <a class="Example" href="http://www.devirtuoso.com/Examples/Drag-Drop/index.php" target="_blank">Example</a></div>
<p><a title="Drag and Drop Example" href="http://www.devirtuoso.com/Examples/Drag-Drop/index.php" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image.png" width="394" height="349" /></a> </p>
<p>&#160;</p>
<h2>Reworking the List</h2>
<p>Previously we had a simple HTML un-ordered list.&#160; This time we’re going to make it a little more complicated, with good reason of course.&#160; In order to view the updates we make to the database, we first have to have a list&#160; pulling from the database.&#160; For this we will be using PHP and MySQL.</p>
<p>First we’re going to create a file called db.php.&#160; In this file we’re going to do two things.&#160; First connect to the database, and second select all the items from the database and create a list from them.&#160; I’m not going to go into too much detail with the connection info.&#160; If you want a little refresher, we went into more depth in our <a href="http://www.devirtuoso.com/2009/08/beginners-guide-to-using-ajax-with-jquery-part-2/" target="_blank">Beginners Guide to Using Ajax with jQuery</a> post.</p>
<p>Here is the PHP code for connecting to the database:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
<span class="co1">//Connection Info</span><br />
<span class="re0">$username</span><span class="sy0">=</span><span class="st0">&quot;root&quot;</span><span class="sy0">;</span><br />
<span class="re0">$password</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<span class="re0">$host</span><span class="sy0">=</span><span class="st0">&quot;localhost&quot;</span><span class="sy0">;</span><br />
<span class="re0">$database</span> <span class="sy0">=</span> <span class="st0">&quot;DragDrop&quot;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">//Connect to database</span><br />
<span class="re0">$mysqli</span> <span class="sy0">=</span> &nbsp;<span class="kw2">new</span> mysqli<span class="br0">&#40;</span><span class="re0">$host</span><span class="sy0">,</span> <span class="re0">$username</span><span class="sy0">,</span> <span class="re0">$password</span><span class="sy0">,</span> <span class="re0">$database</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">// check connection </span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span>mysqli_connect_errno<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/printf"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;Connect failed: <span class="es6">%s</span><span class="es1">\n</span>&quot;</span><span class="sy0">,</span> mysqli_connect_error<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>I guess at this point it might be helpful to see what the database looks like.&#160; We have 3 columns:</p>
<ul>
<li>&#160;<strong>itemID</strong> (unique identifier), </li>
<li><strong>content</strong> (the text inside our list) </li>
<li><strong>Order</strong> (keep track of the order) </li>
</ul>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="database table" border="0" alt="database table" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image1.png" width="287" height="210" /></p>
<p>&#160;</p>
<p>&#160;</p>
<p>Now we’ll create a function that selects all the items from the database and outputs an un-ordered list.</p>
<p>Here is the <strong>PHP</strong>:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">//Display a list of all entries</span><br />
<span class="kw2">function</span> displayAll <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$mysqli</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Get all Entries</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$result</span> <span class="sy0">=</span> <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM `Items` ORDER BY `Order` ASC&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//start list</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">=</span> <span class="st0">&quot;&lt;ul id='sortable'&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$row</span> <span class="sy0">=</span> <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">fetch_array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//add a new list item each iteration</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;li id='item_&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'itemID'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;'&gt;&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'content'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;&lt;/li&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//close list</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;ul&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//display list</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$returnValue</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* free result set */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>First we query the database with the mysqli object we created when we connected to the database.&#160; If it returns results without errors then we can go ahead with making our list.&#160; </p>
<p>Making the list isn’t too hard, we’re simply creating a variable that holds our list.&#160; We then cycle through all of the items returned from the database and add it to the end of our variable.&#160; After we have all the info in our variable, we display it for the world to see.&#160; One special note, you’ll see that we are giving each &lt;li&gt; an id.&#160; We’re going to use this when we get to the Ajax portion of the tutorial.&#160; For now just know that the id is required.</p>
<p>&#160;</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="display all function" border="0" alt="display all function" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image2.png" width="420" height="304" /> </p>
<p>&#160;</p>
<h2>The New HTML</h2>
<p>Now that we have our db.php file ready to go, we can now make use of it in our main file.</p>
<p>First off we’re going to import the file to use it.&#160; At the very top we’ll just put:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span> <span class="kw1">require</span><span class="br0">&#40;</span><span class="st0">&quot;db.php&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Now we can use the function displayAll() that we just created.&#160; We’ll be replacing the un-ordered list with this function.&#160; When the page is processed, the function will pull the data from the database and output a brand spankin’ new list.&#160; Pretty sweet huh.</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;?php</span><br />
<br />
<span class="sc2"><span class="sy0">//</span>Displays the list.</span><br />
<br />
<span class="sc2">displayAll<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">?&gt;</span><br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>The jQuery</h2>
<p>The jQuery changed a bit.&#160; We’re adding a new update parameter to the sortable function.&#160; This will be called whenever the order has been changed.</p>
<p>In the update function we’ll be doing 3 things.</p>
<ul>
<li>Prepping the info to be sent via Ajax </li>
<li>Send the info via Ajax </li>
<li>Display the new updated list </li>
</ul>
<p>Here is the <strong>jQuery</strong>:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace">$<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#sortable&quot;</span><span class="br0">&#41;</span>.<span class="me1">sortable</span><span class="br0">&#40;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; placeholder<span class="sy0">:</span> <span class="st0">'highlight'</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//NEW----Called when order is changed</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; update<span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Prep the list order for transfer</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> listOrder <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">sortable</span><span class="br0">&#40;</span><span class="st0">&quot;serialize&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//send info to our php file.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.<span class="me1">post</span><span class="br0">&#40;</span><span class="st0">&quot;update.php&quot;</span><span class="sy0">,</span> listOrder<span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>response<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//update the list with the new list.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;sortable&quot;</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span>response<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#sortable&quot;</span><span class="br0">&#41;</span>.<span class="me1">disableSelection</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="serialize order" border="0" alt="serialize order" src="http://www.devirtuoso.com/wp-content/uploads/2009/09/image3.png" width="420" height="305" /> </p>
<p>&#160;</p>
<h4>Prepping the Info</h4>
<p>First thing we tackle is prepping the info by serializing it.&#160; This just means that we’re taking the order of the list and preparing them in a way that they can be attached to a url.(e.g. www.domain.com<strong>?serialized=data</strong> )&#160; For this serialize function to work we have to create ids for our list items in a particular way.&#160; If I want an array called “item”&#160; then I would give my li tags an id of item_1, item_2, item_3, etc. The serialize function will take the text before the underscore as the array name, and the number after as it’s value.&#160; So a list with ids of item_1, item_2 would be serialized to item[]=1&amp;item[]=2 .&#160;&#160; When we created the function displayAll() we took this into consideration, and put the items ID value from the database after the underscore so we can reference it later.</p>
<p>&#160;</p>
<h4>Send Info</h4>
<p>Next comes the Ajax.&#160; We’re going to use the post function.&#160; We simply have to give it a url, any data we want to send to the url and the function we want to call when we receive something back from the url.</p>
<p>&#160;</p>
<h4>Display New List</h4>
<p>The function that handles the response simply just switches out the list’s HTML with the new HTML.</p>
<p>&#160;</p>
<h2>Updating the Database</h2>
<p>The first thing we’re going to do is create a file called update.php.&#160; This is the file that will be called by the Ajax.&#160; In this file a couple of things are going to happen.</p>
<ul>
<li>Get the array sent in by the Ajax </li>
<li>Cycle through each item in the array </li>
<li>Update the database with the new value </li>
<li>Display a new list </li>
</ul>
<p>Here is the <strong>PHP</strong>:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
<span class="co1">//Get the Array from Ajax</span><br />
<span class="co1">//Make sure it is an array.</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_array"><span class="kw3">is_array</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'item'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$items</span> <span class="sy0">=</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'item'</span><span class="br0">&#93;</span><span class="sy0">;</span> <br />
<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$items</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$items</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
<span class="co1">//Connect to database.</span><br />
<span class="kw1">require</span> <span class="st_h">'db.php'</span><span class="sy0">;</span> &nbsp;<br />
<br />
&nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Cycle through Array.</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">$i</span><span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> <span class="re0">$i</span> <span class="sy0">&lt;</span> <a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$items</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="re0">$i</span><span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Make sure the value of the item is numeric.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_numeric"><span class="kw3">is_numeric</span></a><span class="br0">&#40;</span><span class="re0">$items</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$id</span> <span class="sy0">=</span> <span class="re0">$items</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;Invalid ID&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Set the database order to match the order of the array.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> <span class="sy0">=</span> <span class="st0">&quot;UPDATE `Items` SET `Order` = &quot;</span> <span class="sy0">.</span> <span class="re0">$i</span> <span class="sy0">.</span> <span class="st0">&quot; WHERE `itemID` = &quot;</span> <span class="sy0">.</span> <span class="re0">$items</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span> or <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st_h">'Error, insert query failed'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/* Display a new list */</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$result</span> <span class="sy0">=</span> <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM `Items` ORDER BY `Order` ASC&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$row</span> <span class="sy0">=</span> <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">fetch_array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;li id='item_&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'itemID'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;'&gt;&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'content'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;&lt;/li&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$returnValue</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* free result set */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><br />
<br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h4>Get the Array from Ajax</h4>
<p>Since we used the post method in our jQuery, PHP’s $_POST variable will be populated by what we pasted in.&#160; In our case it was the item array. It’s always good practice to make sure you’ll be receiving what you’re expecting.&#160; In this case we’re expecting an array, so we check and make sure it is an array.</p>
<h4>&#160;</h4>
<h4>Cycle through the Array</h4>
<p>After we’re sure we have an array on our hands, we cycle through each element in the array.&#160; For each element we’re going to check and make sure the value is a number.&#160; If we didn’t malicious users could pass in some harmful stuff.</p>
<h4>&#160;</h4>
<h4>Update the Database</h4>
<p>After we have verified that array’s value is a number, we then pass it into our SQL statement.&#160; The array is ordered in the same manner as the list was.&#160; So the first item in the array is also the first item in the list.&#160; The SQL will&#160; then set the Order of the item to where it is in the array.</p>
<h4>&#160;</h4>
<h4>Display a New List</h4>
<p>The code for this is pretty well the same as displayAll().&#160; The only difference is that we’re leaving the &lt;ul&gt;&lt;/ul&gt; off, as these will already be in place, and we’re just replacing the innards.</p>
<p>&#160;</p>
<h2>That’s IT</h2>
<p>That’s pretty well it.&#160; Now we have our initial code that display’s our list.&#160; Then our jQuery that passes on the order of the list via AJAX.&#160; Then our update PHP file that checks to make sure the values are good, and passes them to the database.&#160; After all that it passes the new list back to the jQuery to display.&#160; Voila!</p>
<p>db.php : </p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<span class="co1">//Connection Info</span><br />
<span class="re0">$username</span><span class="sy0">=</span><span class="st0">&quot;root&quot;</span><span class="sy0">;</span><br />
<span class="re0">$password</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<span class="re0">$host</span><span class="sy0">=</span><span class="st0">&quot;localhost&quot;</span><span class="sy0">;</span><br />
<span class="re0">$database</span> <span class="sy0">=</span> <span class="st0">&quot;DragDrop&quot;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="co1">//Connect to database</span><br />
<span class="re0">$mysqli</span> <span class="sy0">=</span> &nbsp;<span class="kw2">new</span> mysqli<span class="br0">&#40;</span><span class="re0">$host</span><span class="sy0">,</span> <span class="re0">$username</span><span class="sy0">,</span> <span class="re0">$password</span><span class="sy0">,</span> <span class="re0">$database</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">// check connection </span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span>mysqli_connect_errno<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/printf"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;Connect failed: <span class="es6">%s</span><span class="es1">\n</span>&quot;</span><span class="sy0">,</span> mysqli_connect_error<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">//Display a list of all entries</span><br />
<span class="kw2">function</span> displayAll <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$mysqli</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Get all Entries</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$result</span> <span class="sy0">=</span> <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM `Items` ORDER BY `Order` ASC&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//start list</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">=</span> <span class="st0">&quot;&lt;ul id='sortable'&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$row</span> <span class="sy0">=</span> <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">fetch_array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//add a new list item each iteration</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;li id='item_&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'itemID'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;'&gt;&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'content'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;&lt;/li&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//close list</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;ul&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//display list</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$returnValue</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* free result set */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Here is the <strong>HTML / jQuery / PHP</strong>:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;?php require<span class="br0">&#40;</span><span class="st0">&quot;db.php&quot;</span><span class="br0">&#41;</span>; ?&gt;</span><br />
<br />
<span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a> <span class="kw3">lang</span><span class="sy0">=</span><span class="st0">&quot;en&quot;</span>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>jQuery UI Sortable - Drop placeholder<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
<br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color:white;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list-style-type: none; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 0; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: 0; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width:300px<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable li { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; margin: 0 5px 5px 5px; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; padding: 5px 20px; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; font-size: 1.2em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: 1.5em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #678;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cursor:pointer;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; #sortable li.highlight { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: 1.5em; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; line-height: 1.2em;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-color: #036;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; background-image: none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; border:none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://jqueryui.com/latest/ui/ui.core.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://jqueryui.com/latest/ui/ui.sortable.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; $(function() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; $(&quot;#sortable&quot;).sortable({<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; placeholder: 'highlight',<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //NEW----Called when order is changed<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; update: function() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Prep the list order for transfer<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var listOrder = $(this).sortable(&quot;serialize&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //send info to our php file.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.post(&quot;update.php&quot;, listOrder, function(response){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //update the list with the new list.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(&quot;sortable&quot;).html(response);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; &nbsp; &nbsp; $(&quot;#sortable&quot;).disableSelection();<br />
&nbsp; &nbsp; });<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;?php</span><br />
<br />
<span class="sc2"><span class="sy0">//</span>Displays the list.</span><br />
<br />
<span class="sc2">displayAll<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span><br />
<br />
<span class="sc2">?&gt;</span><br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>update.php</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
<span class="co1">//Get the Array from Ajax</span><br />
<span class="co1">//Make sure it is an array.</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_array"><span class="kw3">is_array</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'item'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$items</span> <span class="sy0">=</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'item'</span><span class="br0">&#93;</span><span class="sy0">;</span> <br />
<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$items</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$items</span> <span class="sy0">!=</span> <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
<span class="co1">//Connect to database.</span><br />
<span class="kw1">require</span> <span class="st_h">'db.php'</span><span class="sy0">;</span> &nbsp;<br />
<br />
&nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Cycle through Array.</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">$i</span><span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> <span class="re0">$i</span> <span class="sy0">&lt;</span> <a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$items</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="re0">$i</span><span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Make sure the value of the item is numeric.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_numeric"><span class="kw3">is_numeric</span></a><span class="br0">&#40;</span><span class="re0">$items</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$id</span> <span class="sy0">=</span> <span class="re0">$items</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;Invalid ID&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Set the database order to match the order of the array.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> <span class="sy0">=</span> <span class="st0">&quot;UPDATE `Items` SET `Order` = &quot;</span> <span class="sy0">.</span> <span class="re0">$i</span> <span class="sy0">.</span> <span class="st0">&quot; WHERE `itemID` = &quot;</span> <span class="sy0">.</span> <span class="re0">$items</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span> or <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st_h">'Error, insert query failed'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/* Display a new list */</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$result</span> <span class="sy0">=</span> <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM `Items` ORDER BY `Order` ASC&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$row</span> <span class="sy0">=</span> <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">fetch_array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;li id='item_&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'itemID'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;'&gt;&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'content'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;&lt;/li&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$returnValue</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* free result set */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><br />
<br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<div class="resources"><a class="Download" href="http://www.devirtuoso.com/Examples/Drag-Drop/example2.zip" target="_blank">Download</a> <a class="Example" href="http://www.devirtuoso.com/Examples/Drag-Drop/index.php" target="_blank">Example</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/09/beginners-guide-to-jquery-sorting-part-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Is Your PHP Code Secure?</title>
		<link>http://www.devirtuoso.com/2009/08/is-your-php-code-secure/</link>
		<comments>http://www.devirtuoso.com/2009/08/is-your-php-code-secure/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 19:02:58 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Back End]]></category>
		<category><![CDATA[Development Best Practices]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=898</guid>
		<description><![CDATA[There are quite a few malicious users out there.&#160; If you haven’t considered your backend security, your website could be in a world of trouble from attacks.&#160; This is a beginners guide to what the bare minimums are when it comes to security.

Trust No One
 
The biggest issue in terms of security is trusting your [...]]]></description>
			<content:encoded><![CDATA[<p>There are quite a few malicious users out there.&#160; If you haven’t considered your backend security, your website could be in a world of trouble from attacks.&#160; This is a beginners guide to what the bare minimums are when it comes to security.</p>
<p><span id="more-898"></span></p>
<h2>Trust No One</h2>
<p><img style="border-bottom: 0px; border-left: 0px; margin: 15px 25px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="trust no one" border="0" alt="trust no one" align="left" src="http://www.devirtuoso.com/wp-content/uploads/2009/08/image21.png" width="205" height="267" /> </p>
<p>The biggest issue in terms of security is trusting your users.&#160; If you have a form and you automatically assume that the user is going to put their name in the name field, you’re less likely to write code that will validate what users are typing in.&#160; From a security perspective you have to think of your users as the shifty looking guy on the corner.&#160; Don’t trust them. Consider all input data tainted like the moldy piece of cheese in the back of your fridge.&#160; In PHP, a general rule of thumb is that all data in PHP’s superglobals ($_POST, $_GET..etc) should be considered tainted.&#160; Even the $_SERVER array is not fully safe because it contains some data provided by the client.&#160; The only exception to this rule is the $_SESSION array, which is kept on the server and never over the internet.&#160;</p>
<p>&#160;</p>
<h2>Are You Filtering?</h2>
<p><img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 40px; display: inline; border-top: 0px; border-right: 0px" title="filtering" border="0" alt="filtering" align="right" src="http://www.devirtuoso.com/wp-content/uploads/2009/08/image22.png" width="160" height="160" /></p>
<p>Filtering is simply the process of making sure that only good input data is processed.&#160; There are two common ways of handing this, Black listing and White listing.</p>
<p>&#160;</p>
<p>&#160;</p>
<h4>Black Listing</h4>
<p>Black listing is the less restrictive form of the two.&#160; It assumes that the programmer knows everything that isn’t allowed to pass through.&#160; An example of this might be to check for profanity.&#160; The programmer would create a list of swear words, and for every input the code would cross reference this list to see if it matches the list.&#160; If it does, then the program handles it accordingly.</p>
<p>Example:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
<span class="co1">//List of bad words.</span><br />
<span class="re0">$blacklist</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;bad&quot;</span><span class="sy0">,</span><span class="st0">&quot;word&quot;</span><span class="sy0">,</span><span class="st0">&quot;bleck&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Good input, no words are in blacklist.</span><br />
<span class="re0">$goodInput</span> <span class="sy0">=</span> <span class="st0">&quot;This is good input&quot;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Has words in blacklist.</span><br />
<span class="re0">$badInput</span> <span class="sy0">=</span> <span class="st0">&quot;This input is bad ... bleck&quot;</span><span class="sy0">;</span><br />
<br />
<span class="kw2">function</span> inputClean <span class="br0">&#40;</span><span class="re0">$input</span><span class="sy0">,</span> <span class="re0">$blacklist</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$blacklist</span> <span class="kw1">as</span> <span class="re0">$word</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$pattern</span> <span class="sy0">=</span> <span class="st_h">'/'</span><span class="sy0">.</span><span class="re0">$word</span><span class="sy0">.</span><span class="st_h">'/'</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match"><span class="kw3">preg_match</span></a><span class="br0">&#40;</span><span class="re0">$pattern</span><span class="sy0">,</span> <span class="re0">$input</span><span class="sy0">,</span> <span class="re0">$matches</span><span class="sy0">,</span> PREG_OFFSET_CAPTURE<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$matches</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;You kiss your mother with that mouth?&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;All Clean&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">true</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">//Outputs &quot;All Clean&quot;</span><br />
inputClean<span class="br0">&#40;</span><span class="re0">$goodInput</span><span class="sy0">,</span> <span class="re0">$blacklist</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Outputs &quot;You kiss your mother with that mouth?&quot;</span><br />
inputClean<span class="br0">&#40;</span><span class="re0">$badInput</span><span class="sy0">,</span> <span class="re0">$blacklist</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h4>White Listing</h4>
<p>White listing is probably the more common method for security.&#160; It automatically assumes that all data is bad.&#160; Instead of identifying which information isn’t acceptable, you select which information IS acceptable. Kind of like going through a bag of jelly beans and only eating the red ones….mmmm.&#160; Since you control the data that comes in, attackers malicious code won’t be accepted if it doesn’t match the criteria. For this reason white listing is a much stronger protection against attacks then black listing.</p>
<p>Example:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
<span class="re0">$clean</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Only adds username to clean array if it uses only letters.</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/ctype_alpha"><span class="kw3">ctype_alpha</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'username'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$clean</span><span class="br0">&#91;</span><span class="st_h">'username'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'username'</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">//only adds password if it uses letters and numbers.</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/ctype_alnum"><span class="kw3">ctype_alnum</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'password'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$clean</span><span class="br0">&#91;</span><span class="st_h">'password'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'password'</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">//output</span><br />
<a href="http://www.php.net/print_r"><span class="kw3">print_r</span></a><span class="br0">&#40;</span><span class="re0">$clean</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>Do You Escape Your Output?</h2>
<p><img style="border-bottom: 0px; border-left: 0px; margin: 0px 25px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="escaping output" border="0" alt="escaping output" align="left" src="http://www.devirtuoso.com/wp-content/uploads/2009/08/image23.png" width="266" height="184" /> </p>
<p>Output is any information leaving your application.&#160; This can mean text going to a web browser, or to your database. Escaping the output ensures that there are no harmful commands within the output.&#160; So for example, in a blog you might have a comments section where users can input any info the might like.&#160; What if that info is JavaScript?&#160; When you output the comments and they’re not escaped, the JavaScript will display too.&#160; This can mean stealing of your users cookies, passwords, etc. Escaping is super important for protecting the recipient of your output, whether it is your database or your users.&#160; Fortunately PHP makes escaping very simple.&#160; If you’re escaping content for the web browser you can use the method htmlentities().&#160; This basically turns any special characters into a non harmful version. So the browser will display &lt;script&gt; instead of acting upon it.</p>
<p>Here is an example:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
<span class="re0">$badOutput</span> <span class="sy0">=</span> <span class="st0">&quot;&lt;script type='text/javascript'&gt;alert('Malicious')&lt;/script&gt;'&quot;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Display javascript alert box.</span><br />
<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$badOutput</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Displays &quot;&lt;script type='text/javascript'&gt;alert('Malicious')&lt;/script&gt;'&quot;</span><br />
<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$badOutput</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>For databases you’ll have to use a different method. For mysql you can use mysql_escape_string(), and if you have it installed mysql_real_escape_string(). The later offers a more extensive job then the first method.&#160; Also if you’re using PHP 5 you can use prepared statements.&#160; Prepared statements are SQL statements that have place holders. (SELECT * FROM table WHERE `username` = :placeholder)&#160; The place holder is then populated afterwards.&#160; How can this help you?&#160; To use these place holders you have to use the PHP Data Object (PDO).&#160; Fortunately PDO does all the hard work of escaping your output for you…isn’t that nice of them.</p>
<p>Here is an example of PDO in action:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
<span class="re0">$clean</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Filter input</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/ctype_alpha"><span class="kw3">ctype_alpha</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'username'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$clean</span><span class="br0">&#91;</span><span class="st_h">'username'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'username'</span><span class="br0">&#93;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">//Set the placeholder in the sql</span><br />
<span class="re0">$sql</span> <span class="sy0">=</span> <span class="st_h">'SELECT * FROM users WHERE username = :username'</span><span class="sy0">;</span><br />
<br />
<span class="co1">//assume we setup the database handler already setup.</span><br />
<span class="co1">//prepare the statement</span><br />
<span class="re0">$statement</span> <span class="sy0">=</span> <span class="re0">$databaseHandler</span><span class="sy0">-&gt;</span><span class="me1">prepare</span><span class="br0">&#40;</span><span class="re0">$sql</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Give the place holder a value.</span><br />
<span class="co1">//PDO object escapes this value</span><br />
<span class="re0">$statement</span><span class="sy0">-&gt;</span><span class="me1">bindParam</span><span class="br0">&#40;</span><span class="st_h">':username'</span><span class="sy0">,</span> <span class="re0">$clean</span><span class="br0">&#91;</span><span class="st_h">'username'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//execute and fetch results.</span><br />
<span class="re0">$statement</span><span class="sy0">-&gt;</span><span class="me1">execute</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$results</span> <span class="sy0">=</span> <span class="re0">$statement</span><span class="sy0">-&gt;</span><span class="me1">fetchAll</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h2>Conclusion</h2>
<p>If you took anything away from the post I hope it is to filter inputs and escape outputs.&#160; There is quite a few other things that can be done to help with security. What we discussed here should be at least the bear minimum that you use on a regular basis.</p>
<p>&#160;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/08/is-your-php-code-secure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beginners Guide to Using AJAX with jQuery Part 2</title>
		<link>http://www.devirtuoso.com/2009/08/beginners-guide-to-using-ajax-with-jquery-part-2/</link>
		<comments>http://www.devirtuoso.com/2009/08/beginners-guide-to-using-ajax-with-jquery-part-2/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 23:27:51 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Back End]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=817</guid>
		<description><![CDATA[In a previous tutorial we showed how to use AJAX with jQuery.. We created a simple input box that outputs info from the server after each character you type in.&#160; In this tutorial we will take one step further and create an auto complete feature, much like Google or Yahoo’s&#160; search box.

What we will be [...]]]></description>
			<content:encoded><![CDATA[<p>In a <a title="Beginners Guide to Using AJAX with jQuery part 1" href="http://www.devirtuoso.com/2009/07/beginners-guide-to-using-ajax-with-jquery/">previous tutorial</a> we showed how to use <strong>AJAX</strong> with <strong>jQuery.</strong>. We created a simple input box that outputs info from the server after each character you type in.&#160; In this tutorial we will take one step further and create an auto complete feature, much like Google or Yahoo’s&#160; search box.</p>
<p><span id="more-817"></span></p>
<h3>What we will be building</h3>
<p>We’ll be creating an input box that when you type it checks out the database for any words that might match what you typed in.&#160; The database I’ll be using is a dictionary I found on the net.&#160; It seems to be missing quite a few words, but it’ll work for what we will be doing.</p>
<div class="resources"><a class="Download" href="http://www.devirtuoso.com/Examples/jQuery-Ajax-2/example.zip" target="_blank">Download</a> <a class="Example" href="http://www.devirtuoso.com/Examples/jQuery-Ajax-2/" target="_blank">Example</a> </div>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/08/image3.png" width="285" height="153" /> </p>
<p>&#160;</p>
<h3>Getting Started</h3>
<p>Since we’ll be starting where we left off in the tutorial <a title="Beginners Guide to using AJAX with jQuery" href="http://www.devirtuoso.com/2009/07/beginners-guide-to-using-ajax-with-jquery/">Beginners Guide to using AJAX with jQuery</a> it might be a good idea to pick up the <a title="Original tutorial files" href="http://www.devirtuoso.com/Examples/jQuery-Ajax/example.zip">original files</a> if you want build it out yourself.&#160; There are two files.&#160; One being the HTML file with the jQuery and the other being the PHP file that process the AJAX request.&#160; </p>
<p>Here is a look at where we left off:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0"> &nbsp; &nbsp;&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span> <span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Ajax With Jquery<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; $(document).ready(function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#txtValue').keyup(function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sendValue($(this).val()); &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; &nbsp; &nbsp; function sendValue(str){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.post(&quot;ajax.php&quot;,{ sendValue: str },<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; function(data){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#display').html(data.returnValue);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }, &quot;json&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp;<br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/label.html"><span class="kw2">label</span></a> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;txtValue&quot;</span>&gt;</span>Enter a value : <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/label.html"><span class="kw2">label</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/input.html"><span class="kw2">input</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;txtValue&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;txtValue&quot;</span>&gt;</span><br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;display&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
&nbsp; &nbsp;<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p><strong>PHP</strong>:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'sendValue'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$value</span> <span class="sy0">=</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'sendValue'</span><span class="br0">&#93;</span><span class="sy0">;</span> &nbsp;<br />
<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$value</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> json_encode<span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;returnValue&quot;</span><span class="sy0">=&gt;</span><span class="st0">&quot;This is returned from PHP : &quot;</span><span class="sy0">.</span><span class="re0">$value</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h3>The Database</h3>
<p>The database we’ll be creating consists of one table called “Words”. In that table there is only one column called “Word”.&#160; Here is the <a title="Dictionary csv file" href="http://www.devirtuoso.com/Examples/jQuery-Ajax-2/dictionary.csv">CSV file</a> that I used to populate the database we’ll be using.&#160; </p>
<p>The first thing we’re going to do is connect to the database.</p>
<p><strong>PHP</strong>:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'sendToValue'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$value</span> <span class="sy0">=</span> <a href="http://www.php.net/mysql_escape_string"><span class="kw3">mysql_escape_string</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'sendToValue'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$value</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$value</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$value</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//The Connection Info</span><br />
&nbsp; &nbsp; <span class="re0">$username</span><span class="sy0">=</span><span class="st0">&quot;root&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$password</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$host</span><span class="sy0">=</span><span class="st0">&quot;localhost&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$database</span> <span class="sy0">=</span> <span class="st0">&quot;dictionary&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Connecting to the database</span><br />
&nbsp; &nbsp; <span class="re0">$mysqli</span> <span class="sy0">=</span> &nbsp;<span class="kw2">new</span> mysqli<span class="br0">&#40;</span><span class="re0">$host</span><span class="sy0">,</span> <span class="re0">$username</span><span class="sy0">,</span> <span class="re0">$password</span><span class="sy0">,</span> <span class="re0">$database</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">// Make sure we connected okay </span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>mysqli_connect_errno<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/printf"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;Connect failed: <span class="es6">%s</span><span class="es1">\n</span>&quot;</span><span class="sy0">,</span> mysqli_connect_error<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// If there is no value send empty value back to jQuery.</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> json_encode<span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;empty&quot;</span><span class="sy0">=&gt;</span>true<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h3>Getting Results from the Database</h3>
<p>After connecting to the database, our goal now is to pull words from the database that match what was passed to the PHP via AJAX.&#160;&#160; The SQL we’ll be using to query the database isn’t too difficult.</p>
<div class="codecolorer-container sql " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br /></div></td><td><div class="sql codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw1">SELECT</span> <span class="sy0">*</span> <span class="kw1">FROM</span> <span class="st0">`Words`</span> <span class="kw1">WHERE</span> <span class="st0">`Word`</span> <span class="kw1">LIKE</span> <span class="st0">'$value%'</span> <span class="kw1">LIMIT</span> <span class="nu0">5</span></div></td></tr></tbody></table></div>
<p>The SQL statement simply means select 5 rows from the “Words” table where the column “Word”&#160; starts with whichever value we pass in. $value is a PHP variable, and % is a wild card meaning any value. </p>
<p>Here is the <strong>PHP</strong> to Query the Database:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="re0">$returnValue</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span> <span class="co1">// define variable that will be sent back to jQuery&nbsp; </span><br />
&nbsp; &nbsp; <br />
<span class="co1">// Query the database</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$result</span> <span class="sy0">=</span> <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM `Words` WHERE `Word` LIKE '<span class="es4">$value</span>%' LIMIT 5 &quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//If there are some results then...</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">num_rows</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// create unordered list with results</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;ul&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//step through each result.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$row</span> <span class="sy0">=</span> <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">fetch_array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// $row['Word'] references the &quot;Word&quot; column of the result.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// htmlentities is good security practice. Make sure there is no harmful</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// JavaScript being outputed.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;li&gt;&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'Word'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;&lt;/li&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;/ul&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Send information back to jQuery.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> json_encode<span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;returnFromValue&quot;</span><span class="sy0">=&gt;</span><span class="re0">$returnValue</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// If there are no results send empty value back to jQuery.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> json_encode<span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;empty&quot;</span><span class="sy0">=&gt;</span>true<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="coMULTI">/* free result set */</span><br />
&nbsp; &nbsp; <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>After we get the results back, we’ll want to output any results we get back as an unordered list. If there aren’t any results we’ll output an empty value so we know we didn’t get any results back.</p>
<p>&#160;</p>
<h3>Let the Beautification Begin</h3>
<p>As of right now we should have a list of words that show up after each character we type in.&#160; Now we just have to beautify it a bit.&#160; We’ll have to make it so that the list doesn’t appear until the user starts typing, and disappear after the input box loses focus.&#160; We’ll also make it so that when you click on one of the words in the list it will populate the input box with that value.&#160; Additionally we should handle when a user presses the down or up button, but we’re not going to for the sake of keeping things simple for this tutorial.</p>
<p>Here is the <strong>jQuery</strong>:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#txtValue'</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="co1">// when a key is pressed send value to php</span><br />
&nbsp; &nbsp; .<span class="me1">keyup</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; sendValue<span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="co1">// hide auto complete list when input loses focus</span><br />
&nbsp; &nbsp; .<span class="kw3">blur</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#display'</span><span class="br0">&#41;</span>.<span class="me1">slideUp</span><span class="br0">&#40;</span><span class="nu0">500</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Send and recieve values from PHP</span><br />
<span class="kw2">function</span> sendValue<span class="br0">&#40;</span>str<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; $.<span class="me1">post</span><span class="br0">&#40;</span><span class="st0">&quot;ajax.php&quot;</span><span class="sy0">,</span> <span class="br0">&#123;</span> sendToValue<span class="sy0">:</span> str <span class="br0">&#125;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span>data<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>data.<span class="me1">empty</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$<span class="br0">&#40;</span><span class="st0">'#display'</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span>data.<span class="me1">returnFromValue</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$<span class="br0">&#40;</span><span class="st0">'#display'</span><span class="br0">&#41;</span>.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">//Sets up auto complete list mouse events.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; init<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#display'</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#display'</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Cleans up list's mouse events</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cleanUp<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">,</span> <span class="st0">&quot;json&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">//Setup list's click and hover mouse events.</span><br />
<span class="kw2">function</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; cleanUp<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#display li'</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; .<span class="me1">click</span><span class="br0">&#40;</span>clicked<span class="br0">&#41;</span><br />
&nbsp; &nbsp; .<span class="me1">hover</span><span class="br0">&#40;</span>toggleOver<span class="sy0">,</span>toggleOver<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">//unsets list's mouse events.</span><br />
<span class="kw2">function</span> cleanUp <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#display li'</span><span class="br0">&#41;</span>.<span class="me1">unbind</span><span class="br0">&#40;</span><span class="st0">&quot;click&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#display li'</span><span class="br0">&#41;</span>.<span class="me1">unbind</span><span class="br0">&#40;</span><span class="st0">'mouseenter'</span><span class="br0">&#41;</span>.<span class="me1">unbind</span><span class="br0">&#40;</span><span class="st0">'mouseleave'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">// list's click event handler. &nbsp;Puts selected text into input text box.</span><br />
<span class="kw2">function</span> clicked<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#txtValue'</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">text</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">// highlight list item when user rolls over it.</span><br />
<span class="kw2">function</span> toggleOver<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">toggleClass</span><span class="br0">&#40;</span><span class="st0">&quot;over&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p><strong>CSS</strong>:</p>
<div class="codecolorer-container css " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br /></div></td><td><div class="css codecolorer" style="font-family:Monaco,Lucida Console,monospace">body<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background-color</span><span class="sy0">:</span><span class="re0">#111</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">color</span><span class="sy0">:</span><span class="re0">#999</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">font-family</span><span class="sy0">:</span> Arial<span class="sy0">,</span> <span class="st0">&quot;MS Trebuchet&quot;</span><span class="sy0">,</span> <span class="kw2">sans-serif</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<span class="coMULTI">/* Put list under input box.*/</span><br />
<span class="re0">#display</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background-color</span><span class="sy0">:</span><span class="re0">#333333</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">color</span><span class="sy0">:</span><span class="kw2">white</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span><span class="re3">100px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span><span class="re3">10px</span> <span class="nu0">0</span> <span class="re3">10px</span> <span class="re3">5px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span><span class="kw2">relative</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span><span class="re3">145px</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span><span class="kw2">none</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<span class="re0">#display</span> ul<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">list-style</span><span class="sy0">:</span><span class="kw2">none</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span><span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span><span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/*Give list item hand pointer*/</span><br />
<span class="re0">#display</span> li<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">cursor</span><span class="sy0">:</span> <span class="kw2">pointer</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="coMULTI">/* Roll over state of list item*/</span><br />
.over<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background-color</span><span class="sy0">:</span><span class="re0">#6484CE</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h3>Bringing it All Together</h3>
<p>That’s all the code we’ll need for now.&#160; The auto complete feature can definitely be improved, but hopefully this tutorial showed a useful use of AJAX with jQuery.</p>
<p>Here is all the code together:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span> <span class="sy0">/</span>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Ajax With Jquery<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;screen&quot;</span>&gt;</span><br />
&nbsp; &nbsp; body{<br />
&nbsp; &nbsp; &nbsp; &nbsp; background-color:#111;<br />
&nbsp; &nbsp; &nbsp; &nbsp; color:#999;<br />
&nbsp; &nbsp; &nbsp; &nbsp; font-family: Arial, &quot;MS Trebuchet&quot;, sans-serif;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; #display{<br />
&nbsp; &nbsp; &nbsp; &nbsp; background-color:#333333;<br />
&nbsp; &nbsp; &nbsp; &nbsp; color:white;<br />
&nbsp; &nbsp; &nbsp; &nbsp; left:100px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; padding:10px 0 10px 5px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; position:relative;<br />
&nbsp; &nbsp; &nbsp; &nbsp; width:145px;<br />
&nbsp; &nbsp; &nbsp; &nbsp; display:none;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; #display ul{<br />
&nbsp; &nbsp; &nbsp; &nbsp; list-style:none;<br />
&nbsp; &nbsp; &nbsp; &nbsp; margin:0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; padding:0;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; #display li{<br />
&nbsp; &nbsp; &nbsp; &nbsp; cursor: pointer;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; .over{<br />
&nbsp; &nbsp; &nbsp; &nbsp; background-color:#6484CE;<br />
&nbsp; &nbsp; }<br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/style.html"><span class="kw2">style</span></a>&gt;</span><br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; $(document).ready(function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; $('#txtValue')<br />
&nbsp; &nbsp; &nbsp; &nbsp; .keyup(function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sendValue($(this).val());<br />
&nbsp; &nbsp; &nbsp; &nbsp; })<br />
&nbsp; &nbsp; &nbsp; &nbsp; .blur(function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#display').slideUp(500);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
<br />
&nbsp; &nbsp; });<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; function sendValue(str){<br />
&nbsp; &nbsp; &nbsp; &nbsp; $.post(&quot;ajax.php&quot;, { sendToValue: str },<br />
&nbsp; &nbsp; &nbsp; &nbsp; function(data){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!data.empty){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$('#display').html(data.returnFromValue);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$('#display').show();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; init();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }else{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#display').html(&quot;&quot;)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#display').hide();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cleanUp();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }, &quot;json&quot;);<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; function init(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; cleanUp();<br />
&nbsp; &nbsp; &nbsp; &nbsp; $('#display li')<br />
&nbsp; &nbsp; &nbsp; &nbsp; .click(clicked)<br />
&nbsp; &nbsp; &nbsp; &nbsp; .hover(toggleOver,toggleOver);<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; function cleanUp (){<br />
&nbsp; &nbsp; &nbsp; &nbsp; $('#display li').unbind(&quot;click&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; $('#display li').unbind('mouseenter').unbind('mouseleave');<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; function clicked(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; $('#txtValue').val($(this).text());<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; function toggleOver(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; $(this).toggleClass(&quot;over&quot;);<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; <br />
<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/p.html"><span class="kw2">p</span></a>&gt;</span>On keyup this text box sends a request to PHP and a value is returned.<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/p.html"><span class="kw2">p</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/label.html"><span class="kw2">label</span></a> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;txtValue&quot;</span>&gt;</span>Enter a value : <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/label.html"><span class="kw2">label</span></a>&gt;&lt;<a href="http://december.com/html/4/element/input.html"><span class="kw2">input</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;txtValue&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;txtValue&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;display&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p><strong>PHP</strong>:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span> <br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'sendToValue'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$value</span> <span class="sy0">=</span> <a href="http://www.php.net/mysql_escape_string"><span class="kw3">mysql_escape_string</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'sendToValue'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$value</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">$returnValue</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$value</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$value</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="re0">$username</span><span class="sy0">=</span><span class="st0">&quot;root&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$password</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$host</span><span class="sy0">=</span><span class="st0">&quot;localhost&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$database</span> <span class="sy0">=</span> <span class="st0">&quot;dictionary&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="re0">$mysqli</span> <span class="sy0">=</span> &nbsp;<span class="kw2">new</span> mysqli<span class="br0">&#40;</span><span class="re0">$host</span><span class="sy0">,</span> <span class="re0">$username</span><span class="sy0">,</span> <span class="re0">$password</span><span class="sy0">,</span> <span class="re0">$database</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="coMULTI">/* check connection */</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>mysqli_connect_errno<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/printf"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;Connect failed: <span class="es6">%s</span><span class="es1">\n</span>&quot;</span><span class="sy0">,</span> mysqli_connect_error<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$result</span> <span class="sy0">=</span> <span class="re0">$mysqli</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM `Words` WHERE `Word` LIKE '<span class="es4">$value</span>%' LIMIT 5 &quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">num_rows</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;ul&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="re0">$row</span> <span class="sy0">=</span> <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">fetch_array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;li&gt;&quot;</span><span class="sy0">.</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$row</span><span class="br0">&#91;</span><span class="st_h">'Word'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;&lt;/li&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$returnValue</span> <span class="sy0">.=</span> <span class="st0">&quot;&lt;/ul&gt;&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> json_encode<span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;returnFromValue&quot;</span><span class="sy0">=&gt;</span><span class="re0">$returnValue</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> json_encode<span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;empty&quot;</span><span class="sy0">=&gt;</span>true<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* free result set */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$result</span><span class="sy0">-&gt;</span><span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> json_encode<span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;empty&quot;</span><span class="sy0">=&gt;</span>true<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<div class="resources"><a class="Download" href="http://www.devirtuoso.com/Examples/jQuery-Ajax-2/example.zip" target="_blank">Download</a> <a class="Example" href="http://www.devirtuoso.com/Examples/jQuery-Ajax-2/" target="_blank">Example</a> </div>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/08/beginners-guide-to-using-ajax-with-jquery-part-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Beginners Guide to Using AJAX with jQuery</title>
		<link>http://www.devirtuoso.com/2009/07/beginners-guide-to-using-ajax-with-jquery/</link>
		<comments>http://www.devirtuoso.com/2009/07/beginners-guide-to-using-ajax-with-jquery/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 03:09:35 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Back End]]></category>
		<category><![CDATA[Front End Development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=759</guid>
		<description><![CDATA[AJAX offers users a seamless way to work with your interface, no waiting for whole pages to load.&#160; jQuery has a set of tools to make it super simple to implement. We will walk you through how to use jQuery to connect to PHP so you can step up your user interface.

&#160;
What is AJAX
AJAX is [...]]]></description>
			<content:encoded><![CDATA[<p><strong>AJAX</strong> offers users a seamless way to work with your interface, no waiting for whole pages to load.&#160; <strong>jQuery</strong> has a set of tools to make it super simple to implement. We will walk you through how to use <strong>jQuery</strong> to connect to <strong>PHP</strong> so you can step up your user interface.</p>
<p><span id="more-759"></span></p>
<p>&#160;</p>
<h3>What is AJAX</h3>
<p>AJAX is a short hand for asynchronous JavaScript and XML.&#160; Which plainly means that instead of waiting for the whole page to load, you can load only what you need to.&#160; So if you only need to update one small text part of your site, you don&#8217;t have to worry about loading everything else on that page.&#160; A vast majority of sites use this technology now.&#160; Probably one of the most popular uses is an auto complete feature for the search box at Google and Yahoo.</p>
<h3>&#160;</h3>
<h3>What We Will Be Building</h3>
<p>There are several things that we could build, but we&#8217;re just going to keep it simple for this example.&#160; We&#8217;re going to create a simple text field that when you type in anything it gets sent to the server via jQuery.&#160; In return the server will append some text and send it back to jQuery.</p>
<div class="resources"><a class="Download" title="jquery ajax example" href="http://www.devirtuoso.com/Examples/jQuery-Ajax/example.zip" target="_blank">Download</a><a class="Example" title="jquery ajax example" href="http://www.devirtuoso.com/Examples/jQuery-Ajax/" target="_blank">Example</a> </div>
</p>
<h3>&#160;</h3>
<h3>Getting Start</h3>
<p>The HTML is pretty simple.&#160; We just need an input text and a div with an id so jQuery can input the text when it gets it back from the server. We’ll also need to import the <a title="jquery website" href="http://www.jquery.com" target="_blank">jQuery library</a>.</p>
<p>Here is the HTML:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span> <span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Ajax With Jquery<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/label.html"><span class="kw2">label</span></a> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;txtValue&quot;</span>&gt;</span>Enter a value : <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/label.html"><span class="kw2">label</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/input.html"><span class="kw2">input</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;txtValue&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;txtValue&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;display&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h3>The jQuery</h3>
<p>Now we have the framework down we can get started on the jQuery.&#160; The first thing we are going to do is create a key up event for our input text box once the page loads.&#160; Once a user types a character in the text box it will call a function that handles the AJAX.</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">//When Page Loads....</span><br />
$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">// When the user finishes typing </span><br />
&nbsp; &nbsp; <span class="co1">// a character in the text box...</span><br />
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#txtValue'</span><span class="br0">&#41;</span>.<span class="me1">keyup</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Call the function to handle the AJAX.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Pass the value of the text box to the function.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; sendValue<span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<p>Now here is the magic. We’re going to create the function that handles the AJAX.&#160; The function will have one argument; this will be the text from the text box.&#160; There are several ways to use AJAX with jQuery.&#160; We are going to use the post method, but I encourage you to have a look on <a title="jquery&#39;s website" href="http://www.jquery.com" target="_blank">jQuery’s website</a> to check out the other methods.&#160; We’ll be using 4 arguments with the post method, but only the first one is required.</p>
<p>Post Method Arguments:</p>
<ol>
<li>Your file on the server, in our case, a PHP file. </li>
<li>The values you want to pass to the server.&#160; These will be sent using the POST request. </li>
<li>The function that is called when the server responds. In our case this is where we use jQuery to populate the div with the info we got back from the server. </li>
<li>This is how the data will be organized.&#160; In our case we’ll be using JSON. </li>
</ol>
<p>Here is the jQuery AJAX Code:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">// Function to handle ajax.</span><br />
<span class="kw2">function</span> sendValue<span class="br0">&#40;</span>str<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">// post(file, data, callback, type); (only &quot;file&quot; is required)</span><br />
&nbsp; &nbsp; $.<span class="me1">post</span><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="st0">&quot;ajax.php&quot;</span><span class="sy0">,</span> <span class="co1">//Ajax file</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#123;</span> sendValue<span class="sy0">:</span> str <span class="br0">&#125;</span><span class="sy0">,</span> &nbsp;<span class="co1">// create an object will all values</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//function that is called when server returns a value.</span><br />
&nbsp; &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span>data<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'#display'</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span>data.<span class="me1">returnValue</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">,</span> <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//How you want the data formated when it is returned from the server.</span><br />
&nbsp; &nbsp; <span class="st0">&quot;json&quot;</span><br />
&nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h3>The PHP</h3>
<p>There isn’t much to the PHP file.&#160; We simply get the POST variables, make sure our output is JSON encoded, then output what we want to return to our jQuery. </p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span> <br />
<br />
<span class="co1">//Get Post Variables. The name is the same as </span><br />
<span class="co1">//what was in the object that was sent in the jQuery</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'sendValue'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$value</span> <span class="sy0">=</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'sendValue'</span><span class="br0">&#93;</span><span class="sy0">;</span> &nbsp; <br />
<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$value</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">//Because we want to use json, we have to place things in an array and encode it for json.</span><br />
<span class="co1">//This will give us a nice javascript object on the front side.</span><br />
<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> json_encode<span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;returnValue&quot;</span><span class="sy0">=&gt;</span><span class="st0">&quot;This is returned from PHP : &quot;</span><span class="sy0">.</span><span class="re0">$value</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>&nbsp; <br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h3>Bringing it All Together</h3>
<p>That wasn’t all the difficult was it.&#160; This is the beginning of making a auto complete search box.&#160; The biggest thing you would have to do to finish it is adjust the PHP so it searches your data, and outputs the appropriate results.&#160; Perhaps in another tutorial we&#8217;ll handle that.&#160; For now here is the code all together:</p>
<p><strong>HTML / jQuery</strong> : </p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span><br />
<span class="sc0">&nbsp; &nbsp; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span> <span class="sy0">/</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Ajax With Jquery<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; $(document).ready(function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#txtValue').keyup(function(){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sendValue($(this).val()); &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; &nbsp; &nbsp; function sendValue(str){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.post(&quot;ajax.php&quot;,{ sendValue: str },<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; function(data){<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#display').html(data.returnValue);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }, &quot;json&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
<br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/label.html"><span class="kw2">label</span></a> <span class="kw3">for</span><span class="sy0">=</span><span class="st0">&quot;txtValue&quot;</span>&gt;</span>Enter a value : <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/label.html"><span class="kw2">label</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/input.html"><span class="kw2">input</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;txtValue&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;txtValue&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;display&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p><strong>PHP</strong> :</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span> <br />
<br />
<span class="co1">//Get Post Variables. The name is the same as </span><br />
<span class="co1">//what was in the object that was sent in the jQuery</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'sendValue'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$value</span> <span class="sy0">=</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'sendValue'</span><span class="br0">&#93;</span><span class="sy0">;</span> &nbsp; <br />
<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$value</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">//Because we want to use json, we have to place things in an array and encode it for json.</span><br />
<span class="co1">//This will give us a nice javascript object on the front side.</span><br />
<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> json_encode<span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;returnValue&quot;</span><span class="sy0">=&gt;</span><span class="st0">&quot;This is returned from PHP : &quot;</span><span class="sy0">.</span><span class="re0">$value</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>&nbsp; <br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<div class="resources"><a class="Download" title="jquery ajax example" href="http://www.devirtuoso.com/Examples/jQuery-Ajax/example.zip" target="_blank">Download</a><a class="Example" title="jquery ajax example" href="http://www.devirtuoso.com/Examples/jQuery-Ajax/" target="_blank">Example</a> </div>
<p>&#160;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/07/beginners-guide-to-using-ajax-with-jquery/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Easy Thumbnails with PHP</title>
		<link>http://www.devirtuoso.com/2009/07/easy-thumbnails-with-php/</link>
		<comments>http://www.devirtuoso.com/2009/07/easy-thumbnails-with-php/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 00:33:03 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Back End]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=702</guid>
		<description><![CDATA[Don’t hassle with image processing software if you don’t have to.&#160; This post will show you how to automate your thumbnail making with PHP.

What You’ll Need
Before you can get started you’ll need to make sure your server has the GD library installed.&#160; If you’re not sure if it is, just create a PHP file, and [...]]]></description>
			<content:encoded><![CDATA[<p>Don’t hassle with image processing software if you don’t have to.&#160; This post will show you how to automate your <strong>thumbnail</strong> making with <strong>PHP</strong>.</p>
<p><span id="more-702"></span></p>
<h3>What You’ll Need</h3>
<p>Before you can get started you’ll need to make sure your server has the <strong>GD library</strong> installed.&#160; If you’re not sure if it is, just create a PHP file, and place <strong>&lt;?php phpinfo(); ?&gt;</strong> in it and save it to your server.&#160; When you navigate to the file it will list all the important stuff about your PHP.&#160; Look for a GD section, with the GD support enabled, and we require a version higher than 2.0.</p>
<p>&#160;</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/07/image_thumb2.png" width="520" height="274" /> </p>
<p>&#160;</p>
<h3>Getting Started</h3>
<p>First lets look at how we want to use this script.&#160; We want to be able to just place a url to our PHP file in the src attribute of an HTML img tag as if our PHP script was the image.</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;<a href="http://december.com/html/4/element/img.html"><span class="kw2">img</span></a> <span class="kw3">src</span><span class="sy0">=</span>”thumbnail.php?image<span class="sy0">=</span>thumbnail.jpg&amp;width<span class="sy0">=</span><span class="nu0">100</span>” <span class="sy0">/</span>&gt;</span></div></td></tr></tbody></table></div>
<p>Now that we see what we want to make, lets get started.&#160; First we are going to make a function that handles taking the source image and turning it into a thumbnail.</p>
<p>To break this down a little, first we figure out the width and height of the source image.&#160; We need to know this so when we resize the source image we can keep the proportions in tact. </p>
<p>We then figured out what the thumbnail height would be based on the width given and the proportions of the original image. </p>
<p>We then create a blank that will eventually be our thumbnail. </p>
<p>Copy and resize the source image data into the blank image. </p>
<p>Then display your brand spanking new thumbnail.</p>
<p>&#160;</p>
<p><strong>Here is the PHP:</strong></p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">function</span> makeThumb<span class="br0">&#40;</span><span class="re0">$src</span><span class="sy0">,</span><span class="re0">$newWidth</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; <span class="co1">// read the source image given </span><br />
&nbsp; &nbsp; <span class="re0">$srcImage</span> <span class="sy0">=</span> imagecreatefromjpeg<span class="br0">&#40;</span><span class="re0">$src</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="re0">$width</span> <span class="sy0">=</span> imagesx<span class="br0">&#40;</span><span class="re0">$srcImage</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="re0">$height</span> <span class="sy0">=</span> imagesy<span class="br0">&#40;</span><span class="re0">$srcImage</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">// find the height of the thumb based on the width given </span><br />
&nbsp; &nbsp; <span class="re0">$newHeight</span> <span class="sy0">=</span> <a href="http://www.php.net/floor"><span class="kw3">floor</span></a><span class="br0">&#40;</span><span class="re0">$height</span><span class="sy0">*</span><span class="br0">&#40;</span><span class="re0">$newWidth</span><span class="sy0">/</span><span class="re0">$width</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">// create a new blank image </span><br />
&nbsp; &nbsp; <span class="re0">$newImage</span> <span class="sy0">=</span> imagecreatetruecolor<span class="br0">&#40;</span><span class="re0">$newWidth</span><span class="sy0">,</span><span class="re0">$newHeight</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp;<span class="co1">// copy source image to a thumb at the new size </span><br />
&nbsp; &nbsp; &nbsp;imagecopyresized<span class="br0">&#40;</span><span class="re0">$newImage</span><span class="sy0">,</span><span class="re0">$srcImage</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="re0">$newWidth</span><span class="sy0">,</span><span class="re0">$newHeight</span><span class="sy0">,</span><span class="re0">$width</span><span class="sy0">,</span><span class="re0">$height</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp;<span class="co1">// create the thumbnail </span><br />
&nbsp; &nbsp; &nbsp;imagejpeg<span class="br0">&#40;</span><span class="re0">$newImage</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>&#160;</p>
<h3>Getting URL Variables</h3>
<p>All the heavy lifting is done, now we just need to read the variables in the URL and place them in the function we just made. We also want to add a header to let your browser know that this PHP file will be outputting a jpeg.</p>
<p>Here is the PHP:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="re0">$imageSrc</span> <span class="sy0">=</span> <span class="br0">&#40;</span>string<span class="br0">&#41;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st_h">'image'</span><span class="br0">&#93;</span><span class="sy0">;</span> &nbsp; &nbsp;<br />
<span class="re0">$width</span> <span class="sy0">=</span> <span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st_h">'width'</span><span class="br0">&#93;</span><span class="sy0">;</span> <br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_numeric"><span class="kw3">is_numeric</span></a><span class="br0">&#40;</span><span class="re0">$width</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$imageSrc</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <br />
&nbsp; &nbsp; <a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="st_h">'Content-type: image/jpeg'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; makeThumb<span class="br0">&#40;</span><span class="re0">$imageSrc</span><span class="sy0">,</span> <span class="re0">$width</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>You could probably do a more in depth check to see if the source image given is actually an image, but for now we’ll just check to make sure there is a value there.</p>
<p>&#160;</p>
<h3>Bring it All Together</h3>
<p>That’s all there is to it. Here is all of the PHP together.</p>
<p>&#160;</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
<span class="re0">$imageSrc</span> <span class="sy0">=</span> <span class="br0">&#40;</span>string<span class="br0">&#41;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st_h">'image'</span><span class="br0">&#93;</span><span class="sy0">;</span> &nbsp; &nbsp;<br />
<span class="re0">$width</span> <span class="sy0">=</span> <span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st_h">'width'</span><span class="br0">&#93;</span><span class="sy0">;</span> <br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_numeric"><span class="kw3">is_numeric</span></a><span class="br0">&#40;</span><span class="re0">$width</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$imageSrc</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <br />
&nbsp; &nbsp; <a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="st_h">'Content-type: image/jpeg'</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; makeThumb<span class="br0">&#40;</span><span class="re0">$imageSrc</span><span class="sy0">,</span> <span class="re0">$width</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw2">function</span> makeThumb<span class="br0">&#40;</span><span class="re0">$src</span><span class="sy0">,</span><span class="re0">$newWidth</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <br />
<br />
&nbsp; &nbsp; <span class="re0">$srcImage</span> <span class="sy0">=</span> imagecreatefromjpeg<span class="br0">&#40;</span><span class="re0">$src</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="re0">$width</span> <span class="sy0">=</span> imagesx<span class="br0">&#40;</span><span class="re0">$srcImage</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <span class="re0">$height</span> <span class="sy0">=</span> imagesy<span class="br0">&#40;</span><span class="re0">$srcImage</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="re0">$newHeight</span> <span class="sy0">=</span> <a href="http://www.php.net/floor"><span class="kw3">floor</span></a><span class="br0">&#40;</span><span class="re0">$height</span><span class="sy0">*</span><span class="br0">&#40;</span><span class="re0">$newWidth</span><span class="sy0">/</span><span class="re0">$width</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="re0">$newImage</span> <span class="sy0">=</span> imagecreatetruecolor<span class="br0">&#40;</span><span class="re0">$newWidth</span><span class="sy0">,</span><span class="re0">$newHeight</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp;imagecopyresized<span class="br0">&#40;</span><span class="re0">$newImage</span><span class="sy0">,</span><span class="re0">$srcImage</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="re0">$newWidth</span><span class="sy0">,</span><span class="re0">$newHeight</span><span class="sy0">,</span><span class="re0">$width</span><span class="sy0">,</span><span class="re0">$height</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp;imagejpeg<span class="br0">&#40;</span><span class="re0">$newImage</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
<span class="br0">&#125;</span> <br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>In this <a href="http://www.devirtuoso.com/Examples/PHP-Thumbnail/thumbnail.php?image=thumbnail.jpg&#038;width=100" target="_blank"><strong>Demo</strong></a>, place any image in the URL and it will be converted to a thumbnail.</p>
<h3><a href="http://www.devirtuoso.com/Examples/PHP-Thumbnail/thumbnail.zip" target="_blank">Download Files</a></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/07/easy-thumbnails-with-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A Collection of Beginner Simplepie Tutorials</title>
		<link>http://www.devirtuoso.com/2009/07/a-collection-of-beginner-simplepie-tutorials/</link>
		<comments>http://www.devirtuoso.com/2009/07/a-collection-of-beginner-simplepie-tutorials/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 18:30:12 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Back End]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Simplepie]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=659</guid>
		<description><![CDATA[Here is a list of Simplepie tutorials to help out beginners find their way.
 
&#160;
Video Tutorials
This is a beginners tutorial from Simplepie&#8217;s website that shows you how to get started with Simplepie    Introduction to Simplepie
 
&#160;
&#160;
A tutorial that shows how to extend Simplepie to handle unique name spaces within a RSS feed. [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a list of <strong>Simplepie tutorials</strong> to help out beginners find their way.</p>
<p> <span id="more-659"></span>
<p>&#160;</p>
<h3>Video Tutorials</h3>
<p>This is a beginners tutorial from Simplepie&#8217;s website that shows you how to get started with Simplepie    <br /><a title="Introduction to Simplepie" href="http://simplepie.org/tutorials/introduction_to_simplepie.mov" target="_blank">Introduction to Simplepie</a></p>
<p><a title="Introduction to Simplepie" href="http://simplepie.org/tutorials/introduction_to_simplepie.mov" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/07/image10.png" width="500" height="400" /></a> </p>
<p>&#160;</p>
<p>&#160;</p>
<p>A tutorial that shows how to extend Simplepie to handle unique name spaces within a RSS feed.    <br /><a title="Extending Simplepie to Parse Unique RSS Feeds" href="http://net.tutsplus.com/videos/screencasts/extending-simplepie-to-parse-unique-rss-feeds/" target="_blank">Extending Simplepie to Parse Unique RSS Feeds</a></p>
<p><a title="Extending Simplepie to Parse Unique RSS Feeds" href="http://net.tutsplus.com/videos/screencasts/extending-simplepie-to-parse-unique-rss-feeds/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/07/image11.png" width="500" height="400" /></a> </p>
<p>&#160;</p>
<p>&#160;</p>
<p>An Introduction to Simplepie and how to add RSS content to your website.    <br /><a title="Adding RSS Content with Simplepie" href="http://css-tricks.com/video-screencasts/55-adding-rss-content-with-simplepie/" target="_blank">Adding RSS Content with Simplepie</a></p>
<p><a title="Adding RSS Content with Simplepie" href="http://css-tricks.com/video-screencasts/55-adding-rss-content-with-simplepie/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/07/image12.png" width="500" height="400" /></a>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Niki shows how she added a RSS to her home page.    <br /><a title="Super Simplepie" href="http://www.nikibrown.com/designoblog/2009/02/10/quick-tip-16-super-simple-pie/" target="_blank">Quick Tip #16 : Super Simplepie</a></p>
<p><a title="Super Simplepie" href="http://www.nikibrown.com/designoblog/2009/02/10/quick-tip-16-super-simple-pie/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/07/image13.png" width="500" height="400" /></a> </p>
<p>&#160;</p>
<p>&#160;</p>
<p>This video shows how to use Simplepie with <a title="CodeIgniter" href="http://codeigniter.com/" target="_blank">CodeIgniter</a>.     <br /><a title="Simplepie and CodeIgniter" href="http://www.viddler.com/explore/elliothaughin/videos/10/" target="_blank">CodeIgniter Screencast 4</a></p>
<p><a title="CodeIgniter and Simplepie" href="http://www.viddler.com/explore/elliothaughin/videos/10/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/07/image14.png" width="500" height="400" /></a> </p>
<p>&#160;</p>
<p>&#160;</p>
<p>Creating a news scroller with Simplepie and jQuery    <br /><a title="How to Build a Super Duper News Scroller" href="http://net.tutsplus.com/videos/screencasts/how-to-build-a-super-duper-news-scroller/" target="_blank">How to Build a Super Duper News Scroller</a></p>
<p><a title="Simplepie News Scroller" href="http://net.tutsplus.com/videos/screencasts/how-to-build-a-super-duper-news-scroller/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/07/image15.png" width="500" height="400" /></a> </p>
<p>&#160;</p>
<p>&#160;</p>
<h3>Tutorials</h3>
<p>This is Simplepie&#8217;s wiki.&#160; A plethora of Simplepie information.    <br /><a title="Simplepie Wiki" href="http://simplepie.org/wiki/" target="_blank">Simplepie Wiki</a></p>
<p><a title="Simplepie Wiki" href="http://simplepie.org/wiki/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/07/image16.png" width="500" height="400" /></a> </p>
<p>&#160;</p>
<p>&#160;</p>
<p>How to create a <a title="flickr" href="http://www.flickr.com/" target="_blank">Flickr</a> Gallery using Simplepie.     <br /><a title="Create a Slick Flickr Gallery with Simplepie" href="http://net.tutsplus.com/tutorials/php/create-a-slick-flickr-gallery-with-simplepie/" target="_blank">Create a Slick Flickr Gallery with Simplepie</a></p>
<p><a title="Simplepie Flickr Gallery Tutorial" href="http://net.tutsplus.com/tutorials/php/create-a-slick-flickr-gallery-with-simplepie/" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/07/image17.png" width="500" height="400" /></a> </p>
<p>&#160;</p>
<p>&#160;</p>
<p>This tutorial shows how to merge RSS feeds with Simplepie.    <br /><a title="Merging RSS Feeds With Simplepie" href="http://www.tutorialized.com/view/tutorial/Merging-RSS-Feeds-With-SimplePie/27991" target="_blank">Merging RSS Feeds With Simplepie</a></p>
<p><a title="Merging RSS Feeds with Simplepie" href="http://www.devirtuoso.com/wp-content/uploads/2009/07/image18.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.devirtuoso.com/wp-content/uploads/2009/07/image_thumb1.png" width="500" height="400" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/07/a-collection-of-beginner-simplepie-tutorials/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://simplepie.org/tutorials/introduction_to_simplepie.mov" length="56238662" type="video/quicktime" />
		</item>
		<item>
		<title>How To Compress CSS/JavaScript Files With PHP</title>
		<link>http://www.devirtuoso.com/2009/07/how-to-compress-cssjavascript-files-with-php/</link>
		<comments>http://www.devirtuoso.com/2009/07/how-to-compress-cssjavascript-files-with-php/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 07:02:48 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Back End]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=628</guid>
		<description><![CDATA[A quick way to speed up your site is to simply limit how much the user has to download. This tutorial will show you how to automatically gzip (compress) your files with PHP.

Speed Benefits
CSS and JavaScript files for some sites can become quite large. Using caching and compression, your website download times can be drastically [...]]]></description>
			<content:encoded><![CDATA[<p>A quick way to speed up your site is to simply limit how much the user has to download. This tutorial will show you how to automatically gzip (compress) your files with PHP.</p>
<p><span id="more-628"></span></p>
<h3>Speed Benefits</h3>
<p>CSS and JavaScript files for some sites can become quite large. Using caching and compression, your website download times can be drastically improved.  Text files are known for compressing very well.  Sometimes reducing sizes by up to 80%.  This is specifically important for JavaScript files as they lock down loading of other assets until they are done.  Of course there are ways around this, but we won&#8217;t get into that here.</p>
<h3>Starting Off</h3>
<p>First we need a website. For this example we are going to go super simple. It probably isn&#8217;t worth compressing such a simple example, but this is just for demonstration purposes. </p>
<p>Here is the HTML:</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>test<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span>&gt;</span>Sample Text<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span> <br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>We also need some CSS:</p>
<div class="codecolorer-container css " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="css codecolorer" style="font-family:Monaco,Lucida Console,monospace">body<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">background-color</span><span class="sy0">:</span><span class="re0">#ededed</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<span class="re0">#text</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">color</span><span class="sy0">:</span><span class="re0">#06C</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></td></tr></tbody></table></div>
<p>And some sample JavaScript:</p>
<div class="codecolorer-container javascript " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br /></div></td><td><div class="javascript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw3">alert</span><span class="br0">&#40;</span><span class="st0">&quot;test&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<h3>How it Works</h3>
<p>There are a couple of ways of compressing files with PHP. One is using an .htaccess file, and the other is placing some PHP at the top of your CSS and JavaScript files. I chose the latter simply because it&#8217;s easier.</p>
<p>The idea is to change your .css and .js into .php files. That way your asset files are passed through PHP and are gzip&#8217;d. </p>
<h3>The Files</h3>
<p>For this example I&#8217;ll create 4 PHP files, two being the CSS and JavaScript files, and the other two being includes that do the magic.</p>
<p>testCSS.php : CSS file<br />
testJS.php  : JavaScript file<br />
gzipCSS.php : CSS Header include file<br />
gzipJS.php : JavaScript Header include file</p>
<p>I seperated the header information into seperate files so it&#8217;s simple to reuse the code, feel free to add the contents of these files directly in to your CSS and JavaScript files.</p>
<p>Lets have a look at the asset files:</p>
<p><strong>testCSS.php</strong></p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;?php </span><br />
<span class="sc2">&nbsp; &nbsp; require_once<span class="br0">&#40;</span><span class="st0">&quot;gzipCSS.php&quot;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">?&gt;</span><br />
<br />
body{<br />
&nbsp; &nbsp; background-color:#ededed;<br />
}<br />
#text{<br />
&nbsp; &nbsp; color:#06C;<br />
}</div></td></tr></tbody></table></div>
<p><strong>testJS.php</strong></p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc2">&lt;?php </span><br />
<span class="sc2">&nbsp; &nbsp; require_once<span class="br0">&#40;</span><span class="st0">&quot;gzipJS.php&quot;</span><span class="br0">&#41;</span>;</span><br />
<span class="sc2">?&gt;</span><br />
<br />
alert(&quot;Test&quot;);</div></td></tr></tbody></table></div>
<p>Simple enough, just take your original CSS and JavaScript file and include the PHP that relates to that type of file.</p>
<h3>gZippage</h3>
<p>Now here is where the magic happens.  Inside the include files we&#8217;ll be placing the PHP to gzip the file and a header to tell the browser what type of file it is suppose to be. I&#8217;ve also added some caching, this isn&#8217;t required for gzip to work, it&#8217;s just a good idea to help speed up download times.</p>
<p><strong>gzipCSS.php</strong></p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span> <br />
<span class="co1">//PHP gzip method</span><br />
<a href="http://www.php.net/ob_start"><span class="kw3">ob_start</span></a> <span class="br0">&#40;</span><span class="st0">&quot;ob_gzhandler&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Header to tell browser what kind of file it is.</span><br />
<a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="st0">&quot;Content-type: text/css; charset: UTF-8&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Caching</span><br />
<a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="st0">&quot;Cache-Control: must-revalidate&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$expires</span> <span class="sy0">=</span> <span class="st0">&quot;Expires: &quot;</span> <span class="sy0">.</span> <a href="http://www.php.net/gmdate"><span class="kw3">gmdate</span></a><span class="br0">&#40;</span><span class="st0">&quot;D, d M Y H:i:s&quot;</span><span class="sy0">,</span> <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="nu0">3600</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot; GMT&quot;</span><span class="sy0">;</span><br />
<a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="re0">$expires</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>The gzipJS.php file is pretty much the same, the only difference is the header content-type.</p>
<p><strong>gzipJS.php</strong></p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span> <br />
<a href="http://www.php.net/ob_start"><span class="kw3">ob_start</span></a> <span class="br0">&#40;</span><span class="st0">&quot;ob_gzhandler&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="st0">&quot;Content-type: text/javascript; charset: UTF-8&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1">//Caching</span><br />
<a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="st0">&quot;Cache-Control: must-revalidate&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$expires</span> <span class="sy0">=</span> <span class="st0">&quot;Expires: &quot;</span> <span class="sy0">.</span> <a href="http://www.php.net/gmdate"><span class="kw3">gmdate</span></a><span class="br0">&#40;</span><span class="st0">&quot;D, d M Y H:i:s&quot;</span><span class="sy0">,</span> <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="nu0">3600</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot; GMT&quot;</span><span class="sy0">;</span><br />
<a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="re0">$expires</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<h3>Putting it Together</h3>
<p>The only thing that is left is to include your CSS and JavaScript files into your main file.</p>
<div class="codecolorer-container html4strict " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="html4strict codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=utf-8&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>test<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc-1">&lt;!-- Include CSS and JavaScript PHP files. --&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/link.html"><span class="kw2">link</span></a> <span class="kw3">rel</span><span class="sy0">=</span><span class="st0">&quot;stylesheet&quot;</span> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;testCSS.php&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/css&quot;</span> <span class="kw3">media</span><span class="sy0">=</span><span class="st0">&quot;screen&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;testJS.php&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&quot;utf-8&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span>&gt;</span>Sample Text<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<h3>El Finito</h3>
<p>That is it here is an example of the working file.</p>
<h3><a href="http://www.devirtuoso.com/Examples/Compressing-PHP/" target="_blank">Example</a></h3>
<h3><a href="http://www.devirtuoso.com/Examples/Compressing-PHP/PHPCompression.zip" target="_blank">Download all the files</a></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/07/how-to-compress-cssjavascript-files-with-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Singleton Design Pattern:When One Instance is Enough</title>
		<link>http://www.devirtuoso.com/2009/05/singleton-design-patternwhen-one-instance-is-enough/</link>
		<comments>http://www.devirtuoso.com/2009/05/singleton-design-patternwhen-one-instance-is-enough/#comments</comments>
		<pubDate>Tue, 26 May 2009 09:28:35 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Back End]]></category>
		<category><![CDATA[Development Best Practices]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=311</guid>
		<description><![CDATA[A design pattern that allows you to make sure there is only one instance of a class.  This is uber-important for fast and efficient code. You no longer have to worry if you created an instance somewhere that wasn&#8217;t cleaned up afterward (i.e database connections). Big time stress relief.  If you have never [...]]]></description>
			<content:encoded><![CDATA[<p>A design pattern that allows you to make sure there is only one instance of a class.  This is uber-important for fast and efficient code. You no longer have to worry if you created an instance somewhere that wasn&#8217;t cleaned up afterward (i.e database connections). Big time stress relief.  If you have never used a design pattern or don&#8217;t know what one is you can check out this <a href="http://www.devirtuoso.com/2009/05/design-patterns-solving-web-development-problems/">previous article</a> that can walk you through it.</p>
<p><span id="more-311"></span><br />
So what is a Singleton.  It&#8217;s simply a class that you can&#8217;t create an instance from the constructor. <em>eg. new Class()</em> Instead there is a wicked cool method that you create that will handle that for you. Inside this method it checks to see if an instance was already created, if it was than it returns that instance, if not it creates a new one for you coding pleasure.  The only other thing is you have to make the constructor locked in from the outside world.  We don&#8217;t want people accidentally creating an instance&#8230;use protection.  That&#8217;s it, so here&#8217;s is an example:</p>
<p><a href="http://www.php.net" target="_blank">PHP</a>:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">class</span> Singleton<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// Store the single instance of class</span><br />
&nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.php.net/static"><span class="kw3">static</span></a> <span class="re0">$instance</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//private constructor so no one can access it.</span><br />
&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//code goes here</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//checks to see if there is an instance if there is</span><br />
&nbsp; &nbsp; <span class="co1">//return it, if not make a new instance.</span><br />
&nbsp; &nbsp; <span class="kw2">public</span> <a href="http://www.php.net/static"><span class="kw3">static</span></a> <span class="kw2">function</span> getInstance<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw2">self</span><span class="sy0">::</span><span class="re0">$instance</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span><span class="sy0">::</span><span class="re0">$instance</span> <span class="sy0">=</span> <span class="kw2">new</span> Singleton<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">self</span><span class="sy0">::</span><span class="re0">$instance</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> display<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;Lonely...I'm Mr.Lonely&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<br />
<span class="re0">$singleton</span> <span class="sy0">=</span> Singleton<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$singleton</span><span class="sy0">-&gt;</span><span class="me1">display</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>So where might you use this?  If there is ever a time when you need only one of something.  A good example might be a database connection.</p>
<p><a href="http://www.php.net" target="_blank">PHP</a>:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">class</span> Database<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// Store the single instance of Database</span><br />
&nbsp; &nbsp; <span class="kw2">private</span> <a href="http://www.php.net/static"><span class="kw3">static</span></a> <span class="re0">$instance</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="re0">$connectionInfo</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//setup database.</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">public</span> <a href="http://www.php.net/static"><span class="kw3">static</span></a> <span class="kw2">function</span> getInstance<span class="br0">&#40;</span><span class="re0">$connectionInfo</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw2">self</span><span class="sy0">::</span><span class="re0">$instance</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span><span class="sy0">::</span><span class="re0">$instance</span> <span class="sy0">=</span> <span class="kw2">new</span> Database<span class="br0">&#40;</span><span class="re0">$connectionInfo</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">self</span><span class="sy0">::</span><span class="re0">$instance</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> query<span class="br0">&#40;</span><span class="re0">$str</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Query database</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="re0">$database</span> <span class="sy0">=</span> Database<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="re0">$connectionInfo</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$database</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="re0">$sql</span><span class="br0">&#41;</span><span class="sy0">;</span></div></td></tr></tbody></table></div>
<p>Of course you can always create a method for removing the instance once you&#8217;re done with it.  Otherwise that is it, use to your heart&#8217;s content.  You&#8217;ll often see the Singleton mixed in with other design patterns.  It&#8217;s a very handy tool to have.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/05/singleton-design-patternwhen-one-instance-is-enough/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Patterns: Solving Web Development Problems</title>
		<link>http://www.devirtuoso.com/2009/05/design-patterns-solving-web-development-problems/</link>
		<comments>http://www.devirtuoso.com/2009/05/design-patterns-solving-web-development-problems/#comments</comments>
		<pubDate>Thu, 21 May 2009 18:30:25 +0000</pubDate>
		<dc:creator>Shawn</dc:creator>
				<category><![CDATA[Back End]]></category>
		<category><![CDATA[Development Best Practices]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[design principles]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.devirtuoso.com/?p=183</guid>
		<description><![CDATA[Are you not sure how to structure your code? Have you come across a problem that makes life difficult.  Odds are many developers have been in your situation before. Design patterns are the antacid of the development world&#8230;finally relief.


Someone has already solved your problems
You&#8217;ve heard of reusing another developer&#8217;s code.  So why not [...]]]></description>
			<content:encoded><![CDATA[<p>Are you not sure how to structure your code? Have you come across a problem that makes life difficult.  Odds are many developers have been in your situation before. Design patterns are the antacid of the development world&#8230;finally relief.</p>
<p><span id="more-183"></span><br />
<img class="alignnone size-full wp-image-186" title="problems" src="http://www.devirtuoso.com/wp-content/uploads/2009/05/problems.jpg" alt="problems" width="600" height="272" /></p>
<h3>Someone has already solved your problems</h3>
<p>You&#8217;ve heard of reusing another developer&#8217;s code.  So why not reuse another developer&#8217;s experience.  That&#8217;s exactly what <strong>design patterns</strong> try and accomplish.  It sort of a guide that stears developers in a direction that has been tested and works.  These design patterns make use of what the code Gods deemed as good design principles.  It makes your life easier not having to worry as much about your overal code structure.</p>
<p>The great thing about design patterns is, it makes talking about code a whole lot easier.  If you ever tried to explain your code to someone you know it can take some time.  With design patterns you can just say I used a such and such pattern, and if the developer knows that pattern you&#8217;re all on the same page. Get to know them, and it opens a lot of doors.</p>
<p><img class="alignnone size-full wp-image-185" title="strategy" src="http://www.devirtuoso.com/wp-content/uploads/2009/05/strategy.jpg" alt="strategy" width="600" height="272" /></p>
<h3>The Strategy Pattern</h3>
<p>This is a less complicated pattern that is used in quite a few other design patterns.  It uses the design principle: Identify the aspects of your application that vary and seperate them from the ones that stays the same.  This is called <strong>encapsulation</strong>. Here is an  <a href="http://www.devirtuoso.com/2009/05/anticipating-change-make-quality-code-that-is-easier-to-update/">article</a> that might help you find the parts that may change in your code.</p>
<p>Say you have some code like this:</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">interface</span> IVehicle <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> revEngine<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">class</span> Car implements IVehicle<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> revEngine<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;VROOM&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">class</span> Van implements IVehicle <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> revEngine<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;Putt putt&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw2">class</span> Bike implements IVehicle <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> revEngine<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Bikes don't have engines</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="re0">$car</span> <span class="sy0">=</span> <span class="kw2">new</span> Car<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$van</span> <span class="sy0">=</span> <span class="kw2">new</span> Van<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$bike</span> <span class="sy0">=</span> <span class="kw2">new</span> Bike<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="re0">$car</span><span class="sy0">-&gt;</span><span class="me1">revEngine</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$van</span><span class="sy0">-&gt;</span><span class="me1">revEngine</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$bike</span><span class="sy0">-&gt;</span><span class="me1">revEngine</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>The problem with this example is it isn&#8217;t encapsulating what is changing. As you can see in some instances revEngine just doesn&#8217;t work.  The revEngine varys so we should seperate it out. This will allow us to look after those instances where revEngine doesn&#8217;t make sense.</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:580px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br /></div></td><td><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">&lt;?php</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Setup Vehicle</span><br />
&nbsp; &nbsp; <span class="kw2">class</span> Vehicle <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="re0">$engine</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span>IEngine <span class="re0">$engine</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">engine</span> <span class="sy0">=</span> <span class="re0">$engine</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//We'll use rev instead of revEngine. &nbsp;It's more generic.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> rev<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">engine</span><span class="sy0">-&gt;</span><span class="me1">rev</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> setEngine <span class="br0">&#40;</span><span class="re0">$engine</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">engine</span> <span class="sy0">=</span> <span class="re0">$engine</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Setup different Engine Behaviors</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">interface</span> IEngine <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> rev<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">class</span> BigRev implements IEngine<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> rev<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a><span class="st0">&quot;VROOM&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">class</span> LittleRev implements IEngine<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> rev<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;putt putt&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">class</span> Pedal implements IEngine<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> rev<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;silent but speedy&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Setup Your Vehicles</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">class</span> Car <span class="kw2">extends</span> Vehicle <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Add any code that applies to a car.</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">class</span> Van <span class="kw2">extends</span> Vehicle <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Add any code that applies to a van.</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <span class="kw2">class</span> Bike <span class="kw2">extends</span> Vehicle <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Add any code that applies to a bike.</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Output </span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="re0">$car</span> <span class="sy0">=</span> <span class="kw2">new</span> Car<span class="br0">&#40;</span><span class="kw2">new</span> BigRev<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$car</span><span class="sy0">-&gt;</span><span class="me1">rev</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//VROOM</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="re0">$van</span> <span class="sy0">=</span> <span class="kw2">new</span> Van<span class="br0">&#40;</span><span class="kw2">new</span> LittleRev<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$van</span><span class="sy0">-&gt;</span><span class="me1">rev</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//putt putt</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="re0">$bike</span> <span class="sy0">=</span> <span class="kw2">new</span> Bike<span class="br0">&#40;</span><span class="kw2">new</span> Pedal<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$bike</span><span class="sy0">-&gt;</span><span class="me1">rev</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//silent but Speedy</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">//Say you added a rocket to your bike...no prob just change the engine type.</span><br />
&nbsp; &nbsp; <span class="re0">$bike</span><span class="sy0">-&gt;</span><span class="me1">setEngine</span><span class="br0">&#40;</span><span class="kw2">new</span> BigRev<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="re0">$bike</span><span class="sy0">-&gt;</span><span class="me1">rev</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="sy1">?&gt;</span></div></td></tr></tbody></table></div>
<p>Overall it looks like a lot more code, but this allows for you to change things about with little trouble.  You&#8217;re creating little families of code that you can interchange with one another. All in all, very useful.</p>
<p>Related Links<br />
<a href="http://en.wikipedia.org/wiki/Strategy_pattern">Wikipedia on Strategy Patterns</a><br />
<a href="http://sourcemaking.com/design_patterns">Design Patterns</a><br />
<a href="http://www.dofactory.com/Patterns/Patterns.aspx">Design patterns with C# and .NET Examples</a><br />
<a href="http://hoskinator.blogspot.com/2006/09/why-design-patterns-are-useful.html">Why Design Patterns are useful</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.devirtuoso.com/2009/05/design-patterns-solving-web-development-problems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
