<?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>Matt Bernier &#187; Matt Bernier &#8211;  A Denver entrepreneur, Denver WordPress developer, WordPress Plugin creator, and PHP developer</title>
	<atom:link href="http://www.mkbernier.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mkbernier.com</link>
	<description>A Denver entrepreneur, trying to get a project to stick, and talking about people</description>
	<lastBuildDate>Mon, 23 Jan 2012 16:00:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Using the Twitter API with Zend Part 1: Setting up your environment</title>
		<link>http://www.mkbernier.com/2009/09/10/using-the-twitter-api-with-zend-part-1-setting-up-your-environment/</link>
		<comments>http://www.mkbernier.com/2009/09/10/using-the-twitter-api-with-zend-part-1-setting-up-your-environment/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 06:37:12 +0000</pubDate>
		<dc:creator>Matt Bernier</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[about]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[autoload]]></category>
		<category><![CDATA[class names]]></category>
		<category><![CDATA[cruel and unusual punishment]]></category>
		<category><![CDATA[decisions]]></category>
		<category><![CDATA[folder path]]></category>
		<category><![CDATA[followers]]></category>
		<category><![CDATA[framework classes]]></category>
		<category><![CDATA[get_include_path]]></category>
		<category><![CDATA[include path]]></category>
		<category><![CDATA[load php classes dynamically]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[naming convention]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php twitter class]]></category>
		<category><![CDATA[right tools]]></category>
		<category><![CDATA[set_include_path]]></category>
		<category><![CDATA[skin the cat]]></category>
		<category><![CDATA[statuses]]></category>
		<category><![CDATA[string conversion]]></category>
		<category><![CDATA[twitter api]]></category>
		<category><![CDATA[variable name]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[zend service twitter]]></category>
		<category><![CDATA[__autoload]]></category>

		<guid isPermaLink="false">http://www.mkbernier.com/?p=430</guid>
		<description><![CDATA[Twitter API with Zend Part 1.  Post Moved to ReinforceMedia.com... <a href="http://www.mkbernier.com/2009/09/10/using-the-twitter-api-with-zend-part-1-setting-up-your-environment/">&#187; Read More</a>]]></description>
			<content:encoded><![CDATA[<!-- sphereit start --><p><a title="How to use the Twitter API on Zend, Part 1" href="http://reinforcemedia.com/2009/09/19/using-the-twitter-api-with-zend-part-1-setting-up-your-environment/" target="_blank">Twitter API with Zend Part 1.  Post Moved to ReinforceMedia.com</a></p>
<!-- sphereit end -->]]></content:encoded>
			<wfw:commentRss>http://www.mkbernier.com/2009/09/10/using-the-twitter-api-with-zend-part-1-setting-up-your-environment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This is not form validation &#8212; and how to fix it</title>
		<link>http://www.mkbernier.com/2009/08/31/this-is-not-form-validation-and-how-to-fix-it/</link>
		<comments>http://www.mkbernier.com/2009/08/31/this-is-not-form-validation-and-how-to-fix-it/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 04:24:51 +0000</pubDate>
		<dc:creator>Matt Bernier</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Seriously?]]></category>
		<category><![CDATA[array data]]></category>
		<category><![CDATA[array index]]></category>
		<category><![CDATA[case black]]></category>
		<category><![CDATA[choose one]]></category>
		<category><![CDATA[color case]]></category>
		<category><![CDATA[concatenated]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[fate]]></category>
		<category><![CDATA[favorite color]]></category>
		<category><![CDATA[first option]]></category>
		<category><![CDATA[fodder]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[form processing]]></category>
		<category><![CDATA[form validation]]></category>
		<category><![CDATA[hell]]></category>
		<category><![CDATA[html form]]></category>
		<category><![CDATA[null value]]></category>
		<category><![CDATA[omg]]></category>
		<category><![CDATA[option element]]></category>
		<category><![CDATA[orange case]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php errors]]></category>
		<category><![CDATA[sql injection]]></category>
		<category><![CDATA[string concatenation]]></category>
		<category><![CDATA[string data]]></category>
		<category><![CDATA[validation]]></category>
		<category><![CDATA[value option]]></category>

		<guid isPermaLink="false">http://www.mkbernier.com/?p=400</guid>
		<description><![CDATA[I was working on a site and noticed something that concerned me.  This is fodder for TheDailyWTF and makes me worry for the fate of any person who receives the results of forms with [non-]&#8220;validation&#8221; like this. The form element: &#60;select name=&#34;favorite-color&#34;&#62; &#160;&#60;option&#62;Favorite Color &#8211; Choose One&#60;/option&#62; &#160;&#60;option value=&#34;blue&#34;&#62;Blue&#60;/option&#62; &#160;&#60;option value=&#34;red&#34;&#62;Red&#60;/option&#62; &#160;&#60;option value=&#34;orange&#34;&#62;Orange&#60;/option&#62; &#160;&#60;option value=&#34;green&#34;&#62;Green&#60;/option&#62; &#160;&#60;option value=&#34;black&#34;&#62;Black&#60;/option&#62; &#60;/select&#62; Here is what was in the processing script: switch &#40;$_POST&#91;&#34;favorite-color&#34;&#93;&#41; &#123; &#160;case &#34;blue&#34;: &#160;case &#34;red&#34;: &#160;case &#34;orange&#34;: &#160;case &#34;green&#34;: &#160;case &#34;black&#34;: &#160; $data&#91;&#34;favorite-color&#34;&#93; = $_POST&#91;&#34;favorite-color&#34;&#93;; &#160; break; &#125; &#8230; //data is appended to a string &#8211; matt&#39;s comment not a &#34;real&#34; comment in the script $string .= $data&#91;&#39;favorite-color&#39;&#93;; So&#8230; What is wrong with this? OMG what isn&#8217;t wrong with it? The select... <a href="http://www.mkbernier.com/2009/08/31/this-is-not-form-validation-and-how-to-fix-it/">&#187; Read More</a>]]></description>
			<content:encoded><![CDATA[<!-- sphereit start --><p>I was working on a site and noticed something that concerned me.  This is fodder for TheDailyWTF and makes me worry for the fate of any person who receives the results of forms with [non-]&#8220;validation&#8221; like this.</p>
<p>The form element:</p>
<div class="geshi no html">
<ol>
<li class="li1">
<div class="de1">&lt;select name=&quot;favorite-color&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;option&gt;Favorite Color &#8211; Choose One&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;option value=&quot;blue&quot;&gt;Blue&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;option value=&quot;red&quot;&gt;Red&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;option value=&quot;orange&quot;&gt;Orange&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;option value=&quot;green&quot;&gt;Green&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;option value=&quot;black&quot;&gt;Black&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/select&gt;</div>
</li>
</ol>
</div>
<p>Here is what was in the processing script:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">switch</span> <span class="br0">&#40;</span><span class="re1">$_POST</span><span class="br0">&#91;</span><span class="st0">&quot;favorite-color&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">case</span> <span class="st0">&quot;blue&quot;</span><span class="sy0">:</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">case</span> <span class="st0">&quot;red&quot;</span><span class="sy0">:</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">case</span> <span class="st0">&quot;orange&quot;</span><span class="sy0">:</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">case</span> <span class="st0">&quot;green&quot;</span><span class="sy0">:</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">case</span> <span class="st0">&quot;black&quot;</span><span class="sy0">:</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&quot;favorite-color&quot;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$_POST</span><span class="br0">&#91;</span><span class="st0">&quot;favorite-color&quot;</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">break</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//data is appended to a string &#8211; matt&#39;s comment not a &quot;real&quot; comment in the script</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$string</span> <span class="sy0">.=</span> <span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&#39;favorite-color&#39;</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>So&#8230; What is wrong with this?  OMG what isn&#8217;t wrong with it?</p>
<ol>
<li>The select element has an &#8220;option&#8221; with no value</li>
<li>
The $data array is never initialized (I didn&#8217;t show this, but are you suprised?)
</li>
<li>The no value option is not accounted for in the processing: i.e.<br />
If no value is passed, then $data['favorite-color'] is never set
</li>
<li>The variable that <strong>would</strong> be set in processing, is then used in a string. If there is no value, PHP throws an error for accessing an array index that does not exist</li>
</li>
<li>
It is assumed that ONLY the values in the select will ever be passed to the processing and completely ignores the null value.
</li>
<li>
Why in the hell would you want to <em>type every single possible option</em> that could be passed in the processing script?  Especially when you are just going to append it to a string!!
</li>
<li>
The string concatenation assumes that the variable being concatenated is already set.
</li>
</ol>
<p>So, how do we fix this?<br />
Actually, it is not all that hard.</p>
<p>First, you have a choice. You can choose to add a value to the first option element, or you can handle the fact that it has no value in the processing, or you can do both (I suggest this one).</p>
<div class="geshi no html">
<ol>
<li class="li1">
<div class="de1">&lt;!&#8211; You can output processing errors here &#8211;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;select name=&quot;favorite-color&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;option value=&quot;0&quot;&gt;Favorite Color &#8211; Choose One&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;option value=&quot;blue&quot;&gt;Blue&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;option value=&quot;red&quot;&gt;Red&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;option value=&quot;orange&quot;&gt;Orange&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;option value=&quot;green&quot;&gt;Green&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&lt;option value=&quot;black&quot;&gt;Black&lt;/option&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/select&gt;</div>
</li>
</ol>
</div>
<p>Now handle the processing:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//initialize the $data array</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$data</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//initialize the $string variable</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$string</span> <span class="sy0">=</span> <span class="st0">&#39;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; * This code will handle the processing of the field</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; * It looks to see if the value is set, and not empty. It will use the non-empty value or it </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; * will set an empty string</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re1">$_POST</span><span class="br0">&#91;</span><span class="st0">&#39;favorite-color&#39;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span><span class="kw3">empty</span><span class="br0">&#40;</span><span class="re1">$_POST</span><span class="br0">&#91;</span><span class="st0">&#39;favorite-color&#39;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&#39;favorite-color&#39;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$_POST</span><span class="br0">&#91;</span><span class="st0">&#39;favorite-color&#39;</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; * if you were going to do a mysql db insert instead of string concatenation you </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; * would do something like:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; * $data[&#39;favorite-color&#39;] = mysql_real_escape_string($_POST[&#39;favorite-color&#39;]);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co1">//This is what was forgotten before</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&#39;favorite-color&#39;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&#39;&#39;</span><span class="sy0">;</span> <span class="co1">// or $data[&#39;favorite-color&#39;] = null;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;* you could also set an error variable, which could be passed back to the form output</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;* to show the user what they missed or did wrong.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Now that you set up your &#8220;validation&#8221; &#8211; which is really just a way to initialize the variable you will be writing to the string into the $data array.</p>
<p>So, all that is left is to concatenate the value to the string.  You can do one of two things. The first is to just concatenate the string, since you know it has already been initialized properly:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// you could add checks right here to see if there are errors and redirect back to the form before creating the string</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//concatenate the value to the string</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$string</span> <span class="sy0">.=</span> <span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&#39;favorite-color&#39;</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>The second way is to use a ternary operator (READ: inline if statement) to append the string:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// you could add checks right here to see if there are errors and redirect back to the form before creating the string</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//append the string if it has a length greater than zero, otherwise append empty string</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$string</span> <span class="sy0">.=</span> <span class="br0">&#40;</span><span class="kw3">strlen</span><span class="br0">&#40;</span><span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&#39;favorite-color&#39;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span> ? <span class="re1">$data</span><span class="br0">&#91;</span><span class="st0">&#39;favorite-color&#39;</span><span class="br0">&#93;</span> <span class="sy0">:</span> <span class="st0">&#39;&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>This method of handling form elements takes a little more time, requires a little more effort up front, but it will save you WAY more trouble later on.  You will not see the PHP errors that you saw before and if you are inserting the data into a DB you will prevent your users from being able to use SQL injection attacks on you.</p>
<!-- sphereit end --><span style="margin-bottom:40px; border-bottom:none;"><a class="iconsphere" title="Sphere: Related Content" onclick="return Sphere.Widget.search('http://www.mkbernier.com/2009/08/31/this-is-not-form-validation-and-how-to-fix-it/')" href="http://www.sphere.com/search?q=sphereit:http://www.mkbernier.com/2009/08/31/this-is-not-form-validation-and-how-to-fix-it/">Sphere: Related Content</a></span><br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.mkbernier.com/2009/08/31/this-is-not-form-validation-and-how-to-fix-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Username URLs just like Twitter</title>
		<link>http://www.mkbernier.com/2009/08/14/username-urls-just-like-twitter/</link>
		<comments>http://www.mkbernier.com/2009/08/14/username-urls-just-like-twitter/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 01:15:47 +0000</pubDate>
		<dc:creator>Matt Bernier</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php files]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[za]]></category>

		<guid isPermaLink="false">http://www.mkbernier.com/?p=376</guid>
		<description><![CDATA[In your .htaccess just do this: RewriteEngine on RewriteRule ^&#40;&#91;A-za-z0-9&#93;+&#41;/?$ user.php?name=$1 This will ignore php files, and any files that are requested deeper into the site like JS or CSS. Sphere: Related Content... <a href="http://www.mkbernier.com/2009/08/14/username-urls-just-like-twitter/">&#187; Read More</a>]]></description>
			<content:encoded><![CDATA[<!-- sphereit start --><p>In your .htaccess just do this:</p>
<div class="geshi no apache">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">RewriteEngine</span> <span class="kw2">on</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">RewriteRule</span> ^<span class="br0">&#40;</span><span class="br0">&#91;</span>A-za-z0<span class="nu0">-9</span><span class="br0">&#93;</span>+<span class="br0">&#41;</span>/?$ <span class="kw1">user</span>.php?name=$<span class="nu0">1</span></div>
</li>
</ol>
</div>
<p>This will ignore php files, and any files that are requested deeper into the site like JS or CSS.</p>
<!-- sphereit end --><span style="margin-bottom:40px; border-bottom:none;"><a class="iconsphere" title="Sphere: Related Content" onclick="return Sphere.Widget.search('http://www.mkbernier.com/2009/08/14/username-urls-just-like-twitter/')" href="http://www.sphere.com/search?q=sphereit:http://www.mkbernier.com/2009/08/14/username-urls-just-like-twitter/">Sphere: Related Content</a></span><br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.mkbernier.com/2009/08/14/username-urls-just-like-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Services</title>
		<link>http://www.mkbernier.com/2009/01/18/services/</link>
		<comments>http://www.mkbernier.com/2009/01/18/services/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 16:20:56 +0000</pubDate>
		<dc:creator>Matt Bernier</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[development process]]></category>
		<category><![CDATA[free software packages]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Inc.]]></category>
		<category><![CDATA[installation of web services]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[Matt Bernier]]></category>
		<category><![CDATA[mkbernier@gmail.com]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Proposal Consulting]]></category>
		<category><![CDATA[search engine]]></category>
		<category><![CDATA[search engine listings]]></category>
		<category><![CDATA[Search Engine Optimization]]></category>
		<category><![CDATA[Search Engine Optimization Consulting]]></category>
		<category><![CDATA[search engines]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[SEO Consulting]]></category>
		<category><![CDATA[web consulting]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[web development world]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Yahoo]]></category>
		<category><![CDATA[Yahoo! Inc.]]></category>

		<guid isPermaLink="false">http://www.mkbernier.com/?p=10</guid>
		<description><![CDATA[Matt Bernier provides a list of services for your web-based needs including proposal consulting, website consulting, search engine optimization consulting, and website development. If you are interested in any of these services please contact me ASAP. Sphere: Related Content... <a href="http://www.mkbernier.com/2009/01/18/services/">&#187; Read More</a>]]></description>
			<content:encoded><![CDATA[<!-- sphereit start --><p>I currently provide a range of services in the area of web development and business consulting. If you are interested in these services, please visit my &#8220;Services&#8221; page.</p>
<p>My current services include:</p>
<ul>
<li>Web Development</li>
<li>Proposal Consulting</li>
<li>Website Consulting</li>
<li>SEO Consulting</li>
</ul>
<p>Contact me if you would like to talk to me about the services I can provide your company.</p>
<!-- sphereit end --><span style="margin-bottom:40px; border-bottom:none;"><a class="iconsphere" title="Sphere: Related Content" onclick="return Sphere.Widget.search('http://www.mkbernier.com/2009/01/18/services/')" href="http://www.sphere.com/search?q=sphereit:http://www.mkbernier.com/2009/01/18/services/">Sphere: Related Content</a></span><br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.mkbernier.com/2009/01/18/services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

