<?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 &gt;&gt; Development</title>
	<atom:link href="http://www.mkbernier.com/category/development/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>Installing MacPorts, PHP, MySQL, Pear, and PHPUnit on Mac OSX Snow Leopard</title>
		<link>http://www.mkbernier.com/2010/09/28/installing-macports-php-mysql-pear-and-phpunit-on-mac-osx-snow-leopard/</link>
		<comments>http://www.mkbernier.com/2010/09/28/installing-macports-php-mysql-pear-and-phpunit-on-mac-osx-snow-leopard/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 15:24:13 +0000</pubDate>
		<dc:creator>Matt Bernier</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[alias]]></category>
		<category><![CDATA[apache mysql]]></category>
		<category><![CDATA[dmg]]></category>
		<category><![CDATA[htdocs]]></category>
		<category><![CDATA[macports]]></category>
		<category><![CDATA[myriad]]></category>
		<category><![CDATA[mysql php]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[reboot]]></category>

		<guid isPermaLink="false">http://www.mkbernier.com/?p=881</guid>
		<description><![CDATA[This is a little redundant of a post, considering the myriad of posts out there covering this topic. However, I am constantly looking for this information so I am putting it all in one place. All of this information comes from these three links: Install Xcode Install MacPorts Install Apache, MySQL, PHP and PEAR Install PHPUnit Installing Xcode Go to the Xcode site above, click the Download link to download the .dmg Install the .dmg Installing MacPorts Go to the MacPorts site above, click the Snow Leopard link to download the .dmg Install the .dmg Install Apache MySQL, PHP and PEAR sudo port install apache2 sudo port install php5 +apache2 +mysql5 +pear I have also noticed that installed phpmyadmin +pear... <a href="http://www.mkbernier.com/2010/09/28/installing-macports-php-mysql-pear-and-phpunit-on-mac-osx-snow-leopard/">&#187; Read More</a>]]></description>
			<content:encoded><![CDATA[<!-- sphereit start --><p>This is a little redundant of a post, considering the myriad of posts out there covering this topic. However, I am constantly looking for this information so I am putting it all in one place.</p>
<p>All of this information comes from these three links:</p>
<p style="padding-left: 30px;"><a href="http://developer.apple.com/technologies/xcode.html">Install Xcode</a></p>
<p style="padding-left: 30px;"><a href="http://www.macports.org/install.php">Install MacPorts</a></p>
<p style="padding-left: 30px;"><a href="http://2tbsp.com/content/install_apache_2_and_php_5_macports">Install Apache, MySQL, PHP and PEAR</a></p>
<p style="padding-left: 30px;"><a href="http://www.phpunit.de/manual/current/en/installation.html">Install PHPUnit</a></p>
<hr />
<strong>Installing Xcode</strong></p>
<ol>
<li>Go to the Xcode site above, click the Download link to download the .dmg</li>
<li>Install the .dmg</li>
</ol>
<p><strong>Installing MacPorts</strong></p>
<ol>
<li>Go to the MacPorts site above, click the Snow Leopard link to download the .dmg</li>
<li>Install the .dmg</li>
</ol>
<p><strong>Install Apache MySQL, PHP and PEAR</strong></p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> port <span class="kw2">install</span> apache2</div>
</li>
</ol>
</div>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> port <span class="kw2">install</span> php5 +apache2 +mysql5 +pear</div>
</li>
</ol>
</div>
<p>I have also noticed that installed phpmyadmin +pear causes everything above to install, either is fine</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> <span class="kw2">cp</span> <span class="sy0">/</span>opt<span class="sy0">/</span><span class="kw3">local</span><span class="sy0">/</span>apache2<span class="sy0">/</span>conf<span class="sy0">/</span>httpd.conf.sample <span class="sy0">/</span>opt<span class="sy0">/</span><span class="kw3">local</span><span class="sy0">/</span>apache2<span class="sy0">/</span>conf<span class="sy0">/</span>httpd.conf</div>
</li>
</ol>
</div>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw3">cd</span> <span class="sy0">/</span>opt<span class="sy0">/</span><span class="kw3">local</span><span class="sy0">/</span>apache2<span class="sy0">/</span>modules</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> <span class="sy0">/</span>opt<span class="sy0">/</span><span class="kw3">local</span><span class="sy0">/</span>apache2<span class="sy0">/</span>bin<span class="sy0">/</span>apxs -a -e -n <span class="st0">&quot;php5&quot;</span> libphp5.so</div>
</li>
</ol>
</div>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> <span class="kw2">nano</span> <span class="sy0">/</span>opt<span class="sy0">/</span><span class="kw3">local</span><span class="sy0">/</span>apache2<span class="sy0">/</span>conf<span class="sy0">/</span>httpd.conf</div>
</li>
</ol>
</div>
<p>Change</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">DocumentRoot <span class="st0">&quot;/opt/local/apache2/htdocs&quot;</span></div>
</li>
</ol>
</div>
<p>To</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">DocumentRoot <span class="st0">&quot;/Library/WebServer/Documents&quot;</span></div>
</li>
</ol>
</div>
<p>Change:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>Directory <span class="st0">&quot;/opt/local/apache2/htdocs&quot;</span><span class="sy0">&gt;</span></div>
</li>
</ol>
</div>
<p>To:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>Directory <span class="st0">&quot;/Library/WebServer/Documents&quot;</span><span class="sy0">&gt;</span></div>
</li>
</ol>
</div>
<p>Find:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>IfModule dir_module<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">DirectoryIndex index.html</div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;/</span>IfModule<span class="sy0">&gt;</span></div>
</li>
</ol>
</div>
<p>Make it look like this:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>IfModule dir_module<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">DirectoryIndex index.html index.php</div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;/</span>IfModule<span class="sy0">&gt;</span></div>
</li>
</ol>
</div>
<p>Find the &#8220;AddType&#8221; directives, there will be a few of them. Just below those add the following:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">AddType application<span class="sy0">/</span>x-httpd-php .php</div>
</li>
<li class="li1">
<div class="de1">AddType application<span class="sy0">/</span>x-httpd-php-<span class="kw3">source</span> .phps</div>
</li>
</ol>
</div>
<p>Create php.ini</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> <span class="kw2">cp</span> <span class="sy0">/</span>opt<span class="sy0">/</span><span class="kw3">local</span><span class="sy0">/</span>etc<span class="sy0">/</span>php.ini-dist <span class="sy0">/</span>opt<span class="sy0">/</span><span class="kw3">local</span><span class="sy0">/</span>etc<span class="sy0">/</span>php.ini</div>
</li>
</ol>
</div>
<p>Find &#8220;mysql.default_socket&#8221; make sure it says the following:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">mysql.default_socket = <span class="sy0">/</span>tmp<span class="sy0">/</span>mysql.sock</div>
</li>
</ol>
</div>
<p>Add an alias to your profile for starting/stopping apache:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">nano</span> ~<span class="sy0">/</span>.profile</div>
</li>
</ol>
</div>
<p>Add this to the bottom of the file</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw3">alias</span> <span class="re2">apachestart=</span><span class="st0">&#39;sudo /opt/local/apache2/bin/apachectl&#39;</span></div>
</li>
</ol>
</div>
<p>To exit nano (ctrl + x, choose to save)</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw3">source</span> ~<span class="sy0">/</span>.profile</div>
</li>
</ol>
</div>
<p>Start apache at reboot:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> launchctl load -<span class="kw2">w</span> <span class="sy0">/</span>Library<span class="sy0">/</span>LaunchDaemons<span class="sy0">/</span>org.macports.apache2.plist</div>
</li>
</ol>
</div>
<p>Try launching apache:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">apachestart</div>
</li>
</ol>
</div>
<p><strong>Installing PHPUnit</strong><br />
Install:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">pear channel-discover pear.phpunit.de</div>
</li>
</ol>
</div>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">pear channel-discover components.ez.no</div>
</li>
</ol>
</div>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">pear channel-discover pear.symfony-project.com</div>
</li>
</ol>
</div>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>code<span class="sy0">&gt;</span>pear <span class="kw2">install</span> phpunit<span class="sy0">/</span>PHPUnit</div>
</li>
</ol>
</div>
<p>Test:<br />
Type &#8220;phpunit&#8221; and see if the system recognizes the command.</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/2010/09/28/installing-macports-php-mysql-pear-and-phpunit-on-mac-osx-snow-leopard/')" href="http://www.sphere.com/search?q=sphereit:http://www.mkbernier.com/2010/09/28/installing-macports-php-mysql-pear-and-phpunit-on-mac-osx-snow-leopard/">Sphere: Related Content</a></span><br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.mkbernier.com/2010/09/28/installing-macports-php-mysql-pear-and-phpunit-on-mac-osx-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<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>The AOL logo and the Genius form error are a little confusing</title>
		<link>http://www.mkbernier.com/2009/02/07/the-aol-logo-and-the-genius-form-error-are-a-little-confusing/</link>
		<comments>http://www.mkbernier.com/2009/02/07/the-aol-logo-and-the-genius-form-error-are-a-little-confusing/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 14:00:54 +0000</pubDate>
		<dc:creator>Matt Bernier</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[about]]></category>
		<category><![CDATA[aol logo]]></category>
		<category><![CDATA[credentials]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[full attention]]></category>
		<category><![CDATA[functionality]]></category>
		<category><![CDATA[genius]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[interface work]]></category>
		<category><![CDATA[intuitive]]></category>
		<category><![CDATA[intuitive design]]></category>
		<category><![CDATA[paying attention]]></category>
		<category><![CDATA[red arrow]]></category>
		<category><![CDATA[triangle]]></category>

		<guid isPermaLink="false">http://www.mkbernier.com/?p=198</guid>
		<description><![CDATA[I was setting up Genius in Itunes tonight and I got to the form below, and didnt fill out the second input because it looked like they wanted AOL credentials.  Then, when the error came up, the red arrow and the blue triangle point to the same place, kind of confusing. Now, I know that if I would have just paid more attention, I would have gotten this from the start.  Even so, I sometimes stop paying attention and hope that the interface will be intuitive enough that I can just use it without thinking. I know, lame right?  Not necessarily, I have found that this is a good way to test out user functionality. If you have to stop... <a href="http://www.mkbernier.com/2009/02/07/the-aol-logo-and-the-genius-form-error-are-a-little-confusing/">&#187; Read More</a>]]></description>
			<content:encoded><![CDATA[<!-- sphereit start --><p>I was setting up Genius in Itunes tonight and I got to the form below, and didnt fill out the second input because it looked like they wanted AOL credentials.  Then, when the error came up, the red arrow and the blue triangle point to the same place, kind of confusing.</p>
<p>Now, I know that if I would have just paid more attention, I would have gotten this from the start.  Even so, I sometimes stop paying attention and hope that the interface will be intuitive enough that I can just use it without thinking. I know, lame right?  Not necessarily, I have found that this is a good way to test out user functionality.</p>
<p>If you have to stop and think about how to make the interface work, then there is something wrong.  The idea is that you want the users who pay full attention to find things that are especially for them, and for the other users you want them to be able skate by.</p>
<div id="attachment_199" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.mkbernier.com/wp-content/uploads/2009/02/badform.jpg"><img class="size-medium wp-image-199" title="its not intuitive" src="http://www.mkbernier.com/wp-content/uploads/2009/02/badform-300x190.jpg" alt="The AOL logo makes this form less than intuitive." width="300" height="190" /></a><p class="wp-caption-text">The AOL logo makes this form less than intuitive.</p></div>
<!-- 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/02/07/the-aol-logo-and-the-genius-form-error-are-a-little-confusing/')" href="http://www.sphere.com/search?q=sphereit:http://www.mkbernier.com/2009/02/07/the-aol-logo-and-the-genius-form-error-are-a-little-confusing/">Sphere: Related Content</a></span><br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.mkbernier.com/2009/02/07/the-aol-logo-and-the-genius-form-error-are-a-little-confusing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trim, I love your service, but please sanitize your inputs!!</title>
		<link>http://www.mkbernier.com/2009/02/05/trim-i-love-your-service-but-please-sanitize-your-inputs/</link>
		<comments>http://www.mkbernier.com/2009/02/05/trim-i-love-your-service-but-please-sanitize-your-inputs/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 05:25:19 +0000</pubDate>
		<dc:creator>Matt Bernier</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[192]]></category>
		<category><![CDATA[basic Google]]></category>
		<category><![CDATA[basic html]]></category>
		<category><![CDATA[continuation]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[dissapear]]></category>
		<category><![CDATA[document body]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[information]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[lt]]></category>
		<category><![CDATA[Matt Bernier]]></category>
		<category><![CDATA[s]]></category>
		<category><![CDATA[second thought]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[thougt]]></category>
		<category><![CDATA[tinyurl]]></category>
		<category><![CDATA[tr.im]]></category>
		<category><![CDATA[tweet]]></category>
		<category><![CDATA[twenty minutes]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[urge]]></category>

		<guid isPermaLink="false">http://www.mkbernier.com/?p=189</guid>
		<description><![CDATA[I was replying to a friend on Twitter using trim, and I had a &#60;script&#62; tag in the post.  I realized when I submitted that the tag made everything after it in my tweet dissapear. If you want to see the actual tweets, you can find them in my twitter feed here: Matt Bernier&#8217;s Twitter Feed First thougt was, &#8220;No Way!&#8221;.  Second thought was, &#8220;What Else Can I do?&#8221;. So, I tried basic HTML with this tweet: &#60;h2&#62;Testing whether HTML breaks tr.im&#60;/h2&#62; B/c my &#60;script&#62; tag did earlier&#60;/script&#62; &#60;span style=&#34;color:blue;&#34;&#62; ScreenShot coming&#60;/script&#62; This got me this result: Then I tried an alert: &#60;script type=&#34;text/javascript&#34;&#62; alert(&#39;does this work?&#39;); &#60;/script&#62; That got me this result: Then lastly, I tried a little more... <a href="http://www.mkbernier.com/2009/02/05/trim-i-love-your-service-but-please-sanitize-your-inputs/">&#187; Read More</a>]]></description>
			<content:encoded><![CDATA[<!-- sphereit start --><p>I was replying to a friend on Twitter using trim, and I had a &lt;script&gt; tag in the post.  I realized when I submitted that the tag made everything after it in my tweet dissapear.  If you want to see the actual tweets, you can find them in my twitter feed here: <a href="http://twitter.com/mbernier">Matt Bernier&#8217;s Twitter Feed</a></p>
<p>First thougt was, &#8220;No Way!&#8221;.  Second thought was, &#8220;What Else Can I do?&#8221;.</p>
<p>So, I tried basic HTML with this tweet:</p>
<div class="geshi no html">
<ol>
<li class="li1">
<div class="de1">&lt;h2&gt;Testing whether HTML breaks tr.im&lt;/h2&gt; B/c my
</div>
</li>
<li class="li1">
<div class="de1">&lt;script&gt; tag did earlier&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;span style=&quot;color:blue;&quot;&gt; ScreenShot coming&lt;/script&gt;</div>
</li>
</ol>
</div>
<p>This got me this result:</p>
<div id="attachment_192" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.mkbernier.com/wp-content/uploads/2009/02/trim.jpg"><img class="size-medium wp-image-192" title="trim" src="http://www.mkbernier.com/wp-content/uploads/2009/02/trim-300x144.jpg" alt="Just HTML in the Tweet" width="300" height="144" /></a><p class="wp-caption-text">Just HTML in the Tweet</p></div>
<p>Then I tried an alert:</p>
<div class="geshi no html">
<ol>
<li class="li1">
<div class="de1">&lt;script type=&quot;text/javascript&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">alert(&#39;does this work?&#39;);
</div>
</li>
<li class="li1">
<div class="de1">&lt;/script&gt;</div>
</li>
</ol>
</div>
<p>That got me this result:</p>
<div id="attachment_190" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.mkbernier.com/wp-content/uploads/2009/02/alert.jpg"><img class="size-medium wp-image-190" title="alert" src="http://www.mkbernier.com/wp-content/uploads/2009/02/alert-300x127.jpg" alt="Javascript Alert in a tweet" width="300" height="127" /></a><p class="wp-caption-text">Javascript Alert in a tweet</p></div>
<p>Then lastly, I tried a little more JS, pay attention though. To make it fit, I used a tr.im URL!!</p>
<div class="geshi no html">
<ol>
<li class="li1">
<div class="de1">&lt;script type=&quot;text/javascript&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">document.body.select(&#39;img&#39;).each(function(e){e.src=&quot;http://tr.im/evmz&quot;});
</div>
</li>
<li class="li1">
<div class="de1">alert(&#39;check the images&#39;)
</div>
</li>
<li class="li1">
<div class="de1">&lt;/script&gt;</div>
</li>
</ol>
</div>
<p>Which got me this result:</p>
<div id="attachment_191" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.mkbernier.com/wp-content/uploads/2009/02/images.jpg"><img class="size-medium wp-image-191" title="images" src="http://www.mkbernier.com/wp-content/uploads/2009/02/images-300x179.jpg" alt="Replaced Tr.im's images with Google's!" width="300" height="179" /></a><p class="wp-caption-text">Replaced Tr.im&#39;s images with Google&#39;s!</p></div>
<p>I have submitted this information to tr.im.  I did very mundane, topical things to the page I was looking at, and did not even attempt anything more dangerous.  <del datetime="2009-02-06T06:39:09+00:00">My hope is that you will see the humor in this, urge tr.im to fix this issue and to continue the amazing job that they do.</del></p>
<p><b>UPDATE:</b> The Tr.im developers are quick to read their emails, respond, and fix issues.  It took all of twenty minutes from when I sent the email to them, for a response saying that this issue was fixed.</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/02/05/trim-i-love-your-service-but-please-sanitize-your-inputs/')" href="http://www.sphere.com/search?q=sphereit:http://www.mkbernier.com/2009/02/05/trim-i-love-your-service-but-please-sanitize-your-inputs/">Sphere: Related Content</a></span><br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.mkbernier.com/2009/02/05/trim-i-love-your-service-but-please-sanitize-your-inputs/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>

