<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.ingenio.com/CommunityServer/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>PHP Tips and Tricks</title><link>http://www.ingenio.comhttp://blogs.ingenio.com/The PHP Doctor</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2.0 (Debug Build: 52582.144)</generator><item><title>Use Functions</title><link>http://www.ingenio.com/CommunityServer/UserBlogPosts/The_PHP_Doctor/Use-Functions/203778.aspx</link><pubDate>Wed, 15 Aug 2007 23:11:00 GMT</pubDate><guid isPermaLink="false">8ca05964-da1c-4176-9dbc-9d0bc609bb83:203778</guid><dc:creator>The PHP Doctor</dc:creator><slash:comments>0</slash:comments><comments>http://www.ingenio.com/CommunityServer/blogs/10724397/comments/203778.aspx</comments><wfw:commentRss>http://www.ingenio.com/CommunityServer/blogs/10724397/commentrss.aspx?PostID=203778</wfw:commentRss><description>Creating functions for re-use will not only make your code shorter, but it makes your code much more legible.&lt;br /&gt;&lt;br /&gt;Let's say we've got a string that we want to process to remove all non-numeric characters. We would start with something like this:&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;$InString = "The Quick Brown Fox Jumped Over all 1500 of the Lazy Dogs";&lt;br /&gt;$OutString = "";&lt;br /&gt;$OKChars = "1234567890";&lt;br /&gt;for( $x = 0 ; $x += 1 ; $x &amp;lt; strlen( $InString ) ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( strstr( $OKChars , $InString[$x] ) ) $OutString .= $InString[$x];&lt;br /&gt;}&lt;br /&gt;echo $OutString; // Outputs "1500"&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;This code is perfectly fine...but let's say we now need to process two different strings. There are many different ways we could accomplish this, but here is the best:&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;function stripToNumbers( $InString ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $OutString = "";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $OKChars = "1234567890";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for( $x = 0 ; $x += 1 ; $x &amp;lt; strlen( $InString ) ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if( strstr( $OKChars , $InString[$x] ) ) $OutString .= $InString[$x];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $OutString;&lt;br /&gt;
}&lt;br /&gt;&lt;br /&gt;$String1 = "The Quick Brown Fox Jumped Over all 1500 of the Lazy Dogs";&lt;br /&gt;

$String2 = "The Quick Brown Fox Jumped Over all 200 of the Lazy Dogs";&lt;br /&gt;

echo stripToNumbers( $String1 );&lt;br /&gt;echo stripToNumbers( $String2 );&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;Now that we have created the function, we can re-use it over and over without needing to re-write any code. But, let's take it to the extreme...let's say we've got like 100 variable that need processing, each of which need to be stripped down to a different set of characters. (I know, this is bizarre and silly, but it's a great example)...we can write a group of functions:&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;function stripProcess( $InString , $OKChars ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $OutString = "";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for( $x = 0 ; $x += 1 ; $x &amp;lt; strlen( $InString ) ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if( strstr( $OKChars , $InString[$x] ) ) $OutString .= $InString[$x];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return $OutString;&lt;br /&gt;

}&lt;br /&gt;function stripToNumbers( $InString ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return stripProcess( $InString , "1234567890" );&lt;br /&gt;}&lt;br /&gt;function stripToLowercase( $InString ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $OKChars = "abcdefghijklmnopqrstuvwxyz";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return stripProcess( $InString , $OKChars );&lt;br /&gt;}&lt;br /&gt;function stripToUppercase( $InString ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $OKChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return stripProcess( $InString , $OKChars );&lt;br /&gt;
}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;Now we have a bunch of specialized functions which work great for the task at hand, but it is kind of messy to have so many functions rolling around in our code...it would be much better as a class...something I cover in an upcoming post.&lt;br /&gt;&lt;img src="http://www.ingenio.com/CommunityServer/aggbug.aspx?PostID=203778" width="1" height="1"&gt;</description></item><item><title>Comment Your Code</title><link>http://www.ingenio.com/CommunityServer/UserBlogPosts/The_PHP_Doctor/Comment-Your-Code/192548.aspx</link><pubDate>Sat, 04 Aug 2007 19:04:00 GMT</pubDate><guid isPermaLink="false">8ca05964-da1c-4176-9dbc-9d0bc609bb83:192548</guid><dc:creator>The PHP Doctor</dc:creator><slash:comments>0</slash:comments><comments>http://www.ingenio.com/CommunityServer/blogs/10724397/comments/192548.aspx</comments><wfw:commentRss>http://www.ingenio.com/CommunityServer/blogs/10724397/commentrss.aspx?PostID=192548</wfw:commentRss><description>For many programmers, this one is obvious. Commenting code is important for a number of reasons:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It will remind you what all the code does - if you don't look at it every day, coming back to uncommented code is often a hassle.&lt;/li&gt;&lt;li&gt;It will be a nice gift to your successor - when you develop code for a client, chances are you won't be the only one working on it during it's lifetime.&lt;/li&gt;&lt;li&gt;It makes calls with me quicker! If I can skim over code by looking at valid comments, I can diagnose problems in a fraction of the time.&lt;/li&gt;&lt;/ol&gt;Here's an example:&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;$n = "1234.5678";&lt;br /&gt;$n += pow( 10 , -3 );&lt;br /&gt;$n = round( $n * pow( 10 , 2 ) ) / pow( 10 , 2 );&lt;br /&gt;$n += pow( 10 , -3 );&lt;br /&gt;$n = substr( $n , 0 , strpos( $n , '.' ) + 3 );&lt;br /&gt;echo $n;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;So...what does that code do? Any idea at all? Wouldn't that be nicer if it was commented?&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;
$n = "1234.5678";&lt;br /&gt;// Instead of using PHP's built-in rounding function, manually round $n to 2 decimal places.&lt;br /&gt;
$n += pow( 10 , -3 );&lt;br /&gt;
$n = round( $n * pow( 10 , 2 ) ) / pow( 10 , 2 );&lt;br /&gt;
$n += pow( 10 , -3 );&lt;br /&gt;
$n = substr( $n , 0 , strpos( $n , '.' ) + 3 );&lt;br /&gt;
echo $n;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;This example gives rise to two other topics which I will cover later: Using Functions and Using Good Variable Names. When it's all said and done, here's the finished code:&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;function roundToTwo( $Number ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Instead of using PHP's built-in rounding function only, round $Number to two decimal places.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Number += pow( 10 , -3 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Number = round( $Number * pow( 10 , 2 ) ) / pow( 10 , 2 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Number += pow( 10 , -3 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Number = substr( $Number , 0 , strpos( $Number , '.' ) + 3 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $n;&lt;br /&gt;}&lt;br /&gt;echo roundToTwo( 1234.5678 );&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;img src="http://www.ingenio.com/CommunityServer/aggbug.aspx?PostID=192548" width="1" height="1"&gt;</description></item><item><title>Expect the Unexpected</title><link>http://www.ingenio.com/CommunityServer/UserBlogPosts/The_PHP_Doctor/Expect-the-Unexpected/189738.aspx</link><pubDate>Thu, 02 Aug 2007 09:25:00 GMT</pubDate><guid isPermaLink="false">8ca05964-da1c-4176-9dbc-9d0bc609bb83:189738</guid><dc:creator>The PHP Doctor</dc:creator><slash:comments>0</slash:comments><comments>http://www.ingenio.com/CommunityServer/blogs/10724397/comments/189738.aspx</comments><wfw:commentRss>http://www.ingenio.com/CommunityServer/blogs/10724397/commentrss.aspx?PostID=189738</wfw:commentRss><description>&lt;font face="Verdana"&gt;This one isn't easy...it takes a lot of practice to master, but the basic principle is simple:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;When you write your code, write it to handle what it isn't designed to handle.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Here's an example:&lt;br /&gt;&lt;br /&gt;Let's say you've got a form where you ask for a zipcode because you want to know if the user lives in Florida. Your PHP code might look something like this:&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;$ZipCode = $_REQUEST['zipCode'];&lt;br /&gt;if ( $ZipCode &amp;gt;= 32000 || $ZipCode &amp;lt;= 34000 ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo "You live in Florida!";&lt;br /&gt;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo "You live somewhere else!";&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;But, we aren't doing any error checking. We need to make sure that the field has something in it, that it's a number, and that it's 5-9 digits in length. So, we need to adjust our code:&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;if ( ! isset( $_REQUEST['zipCode'] ) ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo "You didn't enter a Zip Code!";&lt;br /&gt;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ZipCode = $_REQUEST['zipCode'];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( is_numeric( $ZipCode ) &amp;amp;&amp;amp; strlen( $ZipCode ) &amp;gt;= 5 &amp;amp;&amp;amp; strlen( $ZipCode ) &amp;lt;= 9 ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if ( $ZipCode &amp;gt;= 32000 &amp;amp;&amp;amp; $ZipCode &amp;lt;= 34000 ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  echo "You live in Florida!";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  echo "You live somewhere else!";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  echo "You didn't enter a valid zipcode!";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;Always try and anticipate what your users &lt;i&gt;might&lt;/i&gt; do and write your script accordingly - otherwise not only do you risk an undesired effect, you might send your users nasty errors or even open up your website to hacking.&lt;br /&gt;&lt;br /&gt;If you need your scripts proof-read, let me know!&lt;br /&gt;&lt;/font&gt;&lt;img src="http://www.ingenio.com/CommunityServer/aggbug.aspx?PostID=189738" width="1" height="1"&gt;</description></item></channel></rss>