<?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>Webmaster Sessions &#187; James</title>
	<atom:link href="http://www.webmastersessions.com/author/admin/feed" rel="self" type="application/rss+xml" />
	<link>http://www.webmastersessions.com</link>
	<description>Web Design, Development, Promotion</description>
	<lastBuildDate>Fri, 27 Aug 2010 14:00:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Top 5 Must Have Plugins for Every WordPress Installation</title>
		<link>http://www.webmastersessions.com/top-5-must-have-plugins-for-every-wordpress-installation</link>
		<comments>http://www.webmastersessions.com/top-5-must-have-plugins-for-every-wordpress-installation#comments</comments>
		<pubDate>Fri, 27 Aug 2010 14:00:53 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Spam]]></category>
		<category><![CDATA[Wordpress Plugins]]></category>
		<guid isPermaLink="false">http://www.webmastersessions.com/?p=268</guid>
		<description><![CDATA[WordPress is the best open source solution for blogging I have come across.  There is an excellent community available to help with anything you need.  The number of plugins available can cover just about any need you have for your website or blog.  The following plugins are the ones I recommend the most. Akismet This [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress is the best open source solution for blogging I have come across.  There is an excellent community available to help with anything you need.  The number of plugins available can cover just about any need you have for your website or blog.  The following plugins are the ones I recommend the most.</p>
<p><strong>Akismet</strong></p>
<p>This plugin comes installed by default with WordPress.  When comments are submitted, this plugin with check them against a known list of spam comments that is updated constantly.  When allowing comments on your website or blog, this is a must have.</p>
<p><strong>All in One SEO Pack</strong></p>
<p>The SEO Pack allows you to edit the meta tags associated with your home page and every other page or post on your website.  To maximize your search engine visibility, I highly recommend this plugin.</p>
<p><strong>BackWPup</strong></p>
<p>This is one of the more recent plugin finds I have come across.  I am impressed with the number of available options for configuration when setting up a backup.  You can schedule a cron run for any time of day and can add as many backup jobs as you need.  You have the ability to backup not only the database, but your files as well.  This plugin can email you the backed up files, store them on your server, or send them to offsite storage, such as Amason S3.  Backups are an essential part of any website strategy, so make sure you don’t overlook this plugin if you are using WordPress.</p>
<p><strong>WP-Minify</strong></p>
<p>This plugin will take any Javascript or CSS files, combine them into a single file, and minify the code.  This helps to conserve bandwidth and server request overhead.  WP-Minify will speed up the load time of your website or blog.</p>
<p><strong>WP-reCAPTCHA</strong></p>
<p>CAPTCHA challenges are essential for controlling spam submissions, especially when allowing comments by anonymous users.  reCAPTCHA is my favorite version of the CAPTCHA challenge out there.  This plugin is very easy to use, for both the website owner and visitor.</p>
<img src="http://www.webmastersessions.com/?ak_action=api_record_view&id=268&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.webmastersessions.com/top-5-must-have-plugins-for-every-wordpress-installation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Easiest Way to Add a Toolbar to Your Website or Blog</title>
		<link>http://www.webmastersessions.com/the-easiest-way-to-add-a-toolbar-to-your-website-or-blog</link>
		<comments>http://www.webmastersessions.com/the-easiest-way-to-add-a-toolbar-to-your-website-or-blog#comments</comments>
		<pubDate>Thu, 26 Aug 2010 14:00:51 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[Website Toolbar]]></category>
		<guid isPermaLink="false">http://www.webmastersessions.com/?p=261</guid>
		<description><![CDATA[Have you ever wanted a toolbar with social networking, translations, or many other types of applications?  Wibiya has an excellent toolbar specifically for this purpose. One night, I was browsing the web and reading some blogs.  I came across the Wibiya toolbar at the bottom of the page on one of these blogs.  I thought, [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever wanted a toolbar with social networking, translations, or many other types of applications?  <a href="http://www.wibiya.com/" target="_blank">Wibiya</a> has an excellent toolbar specifically for this purpose.</p>
<p>One night, I was browsing the web and reading some blogs.  I came across the Wibiya toolbar at the bottom of the page on one of these blogs.  I thought, that is really cool, so I visited their website, signed up for an account, and added it to my blog.</p>
<p>The process to add the toolbar to your website is incredibly simple.  You visit their website, sign up for an account, select the applications you would like on the toolbar, then add the code to your website.  In the case of WordPress, there is a great <a href="http://wordpress.org/extend/plugins/wibiya/" target="_blank">Wibiya plugin</a> available to download.</p>
<p>They have recently launched a premium service to give you more control over the toolbar.  The three levels of this service are plus, pro, and max.  For a small monthly fee, you can add your brand, or even create your own apps for the toolbar!</p>
<p>I recommend you visit their website, signup for an account, and try the toolbar on your website or blog.  I don&#8217;t think you will be disappointed.  To design and code a toolbar with this smooth of integration could take months of development and testing.</p>
<p>In case you are curious, this is not a paid review.  When I come across a product or service I really like, I love to share it with others.</p>
<p><a href="http://www.wibiya.com/" target="_blank">Visit the Wibiya website</a></p>
<div align="center">
<script type="text/javascript">// <![CDATA[
  google_ad_client = "pub-6593062067391452"; /* WebmasterSessions Post Bottom */ google_ad_slot = "5751872481"; google_ad_width = 468; google_ad_height = 60;
// ]]&gt;</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
</div>
<img src="http://www.webmastersessions.com/?ak_action=api_record_view&id=261&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.webmastersessions.com/the-easiest-way-to-add-a-toolbar-to-your-website-or-blog/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How Search Engines Work: Learn How Your Site Appears in the Search Results</title>
		<link>http://www.webmastersessions.com/how-search-engines-work-learn-how-your-site-appears-in-the-search-results</link>
		<comments>http://www.webmastersessions.com/how-search-engines-work-learn-how-your-site-appears-in-the-search-results#comments</comments>
		<pubDate>Wed, 25 Aug 2010 14:00:50 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Promotion]]></category>
		<category><![CDATA[Crawler]]></category>
		<category><![CDATA[Meta Tags]]></category>
		<category><![CDATA[nofollow]]></category>
		<category><![CDATA[robots.txt]]></category>
		<category><![CDATA[Search Engine]]></category>
		<category><![CDATA[Search Index]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[SERP]]></category>
		<category><![CDATA[Sitemap]]></category>
		<guid isPermaLink="false">http://www.webmastersessions.com/?p=259</guid>
		<description><![CDATA[Search Engines have changed quite a bit since the birth of the web, but how do they work?  How does your website magically show up on the search results page for a given query?  In the rest of this post, I will describe the process a Search Engine goes through, from visiting your website to [...]]]></description>
			<content:encoded><![CDATA[<p>Search Engines have changed quite a bit since the birth of the web, but how do they work?  How does your website magically show up on the search results page for a given query?  In the rest of this post, I will describe the process a Search Engine goes through, from visiting your website to deciding which queries will display your listing on the results page.</p>
<p><strong>Visiting and Crawling a Website</strong></p>
<p>The Search Engine process starts by a crawler visiting a website and downloading the content.  A crawler is a program written with the task of downloading content from website pages on a schedule basis.  The list of websites and pages for a crawler to visit come from many sources, such as:</p>
<ul>
<li>Submitting a website or page to a Search Engine via a form at their website</li>
<li>The discovery of new pages or sites by the crawler when downloading a page</li>
<li>Submission or download of a sitemap</li>
</ul>
<p>When a crawler visits a website, there are many ways to control its behavior so that content you do or don&#8217;t want to show in the search results has the desired effect.  The crawler behavior can be modified using the following techniques.</p>
<ul>
<li><strong>robots.txt</strong> &#8211; The robots.txt file goes in the website root and contains rules for a crawler to follow when visiting your website.  You can allow or deny a crawler access to specific directories or files based on the user agent.  Wikipedia has an excellent article on the details of the <a href="http://en.wikipedia.org/wiki/Robots_exclusion_standard" target="_blank">robots.txt</a> file and links to additional      resources.</li>
<li><strong>Meta Tags</strong> &#8211; Meta Tags can be used to control the behavior of a Search Engine crawler on a page by page basis.  In most cases, using the robots.txt file is all that is needed to control what the crawler sees on      your website.</li>
<li><strong>Nofollow      Attribute</strong> &#8211; This attribute allows the webmaster to control which links will pass credit on      to the pages they link to and which ones won&#8217;t.  This is useful for links added in forums or blog comments.</li>
</ul>
<p><strong>The Search Engine Index</strong></p>
<p>Each Search Engine has their own algorithm used to sort and rank the crawled web pages.  Most Search Engines have many similarities in the way they sort the pages.  The built index determines what pages will be shown to the user for a particular search query.</p>
<p>The algorithms used to build an index look for things such as how many times a word or phrase shows up on a page, the font size of a word or phrase, the amount of content on the page, formatting, user experience, meta tags, and the number of links to a page.  There are many tutorials and guides available on the Internet on best practices when developing web sites and pages to maximize the user experience and the ability of a Search Engine to crawl the website pages.</p>
<p><strong>Searching and the Display of Search Results</strong></p>
<p>A search is performed using a keyword or group of words to form a phrase.  Most Search Engines include more advanced search functions, such as using Boolean operators and keywords meant to perform a specific function.</p>
<p>Once the search query is entered and submitted, the Search Engine consults its index to return a number of pages that best fix the query according to their algorithm.  Search results can vary from search to search and even more so in different geographic regions.  The search results page is constantly changing and it is rare for a website or page to remain at the same ranking for a long period of time.</p>
<img src="http://www.webmastersessions.com/?ak_action=api_record_view&id=259&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.webmastersessions.com/how-search-engines-work-learn-how-your-site-appears-in-the-search-results/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Rank Results in SQL Server</title>
		<link>http://www.webmastersessions.com/how-to-rank-results-in-sql-server</link>
		<comments>http://www.webmastersessions.com/how-to-rank-results-in-sql-server#comments</comments>
		<pubDate>Tue, 24 Aug 2010 14:00:57 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Database Development]]></category>
		<category><![CDATA[SQL Rank]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.webmastersessions.com/?p=232</guid>
		<description><![CDATA[Wouldn&#8217;t it be nice to get away from using temporary tables to rank query results in SQL Server?  The rank functions can help you accomplish this very easily.  There are four rank functions: ROW_NUMBER, RANK, DENSE_RANK, and NTILE. The ROW_NUMBER Function The ROW_NUMBER function works similar to an identity column in a table.  It will [...]]]></description>
			<content:encoded><![CDATA[<p>Wouldn&#8217;t it be nice to get away from using temporary tables to rank query results in SQL Server?  The rank functions can help you accomplish this very easily.  There are four rank functions: ROW_NUMBER, RANK, DENSE_RANK, and NTILE.</p>
<p><strong>The ROW_NUMBER Function</strong></p>
<p>The ROW_NUMBER function works similar to an identity column in a table.  It will assign a unique number, starting at 1 and incrementing depending on the sort order specified.  Duplicate rows will receive a unique number with this function.</p>
<p>The example below assigns a column value starting at 1 and incrementing according to the lastname column in ascending order.</p>
<pre class="brush:sql">Select ROW_NUMBER() over (order by lastname asc), firstname, lastname
From person
Order by lastname asc, firstname asc</pre>
<p><strong>The RANK Function</strong></p>
<p>The main difference between the RANK function and the ROW_NUMBER function is how duplicates are treated.  They are not assigned a unique number with RANK.  The duplicates will each have the same number.  The next unique row after two or more duplicates will have the next number in the series after skipping the appropriate number based on the number of duplicates.</p>
<p>The following example is the same as above, but with the RANK function.</p>
<pre class="brush:sql">Select RANK() over (order by lastname asc), firstname, lastname
From person
Order by lastname asc, firstname asc</pre>
<p><strong>The DENSE_RANK Function</strong></p>
<p>The DENSE_RANK function is very similar to the RANK function, except after assigning a number to a series of duplicates, then next value will be n + 1.  There are not gaps in the number when using this function.</p>
<p>The following example is similar to the two above, but with the DENSE_RANK function.</p>
<pre class="brush:sql">Select DENSE_RANK() over (order by lastname asc), firstname, lastname
From person
Order by lastname asc, firstname asc</pre>
<p><strong>The NTILE Function</strong></p>
<p>The NTILE function is used to divide the resultset into a number of groups.  Say you have 100 rows in your resultset and you use NTILE(4).  You will end up with 4 groups of 25 rows, with each row of each group having a unique number assigned to that group.</p>
<p>The following example is the same query as the ones above, but splits the resultset into four groups using the NTILE function.</p>
<pre class="brush:sql">Select NTILE(4) over (order by lastname asc), firstname, lastname
From person
Order by lastname asc, firstname asc</pre>
<p><strong>The Partition By Clause</strong></p>
<p>The partition by clause is used to further subdivide the resultset to be ranked by grouping on a particular column.  Using the same query as above, let&#8217;s add a zipcode.  This will result in the following query when using the RANK function.</p>
<pre class="brush:sql">Select RANK() over (partition by zipcode order by lastname asc), firstname, lastname, zipcode
From person
Order by zipcode asc, lastname asc, firstname asc</pre>
<p>This query will rank by the lastname in ascending order within each zipcode column.  The partition by clause makes each of the functions above much more useful when applying a rank to query results.</p>
<img src="http://www.webmastersessions.com/?ak_action=api_record_view&id=232&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.webmastersessions.com/how-to-rank-results-in-sql-server/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Create a Contact Form in PHP</title>
		<link>http://www.webmastersessions.com/how-to-create-a-contact-form-in-php</link>
		<comments>http://www.webmastersessions.com/how-to-create-a-contact-form-in-php#comments</comments>
		<pubDate>Mon, 23 Aug 2010 14:00:20 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Contact Form]]></category>
		<category><![CDATA[Email Form]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://www.webmastersessions.com/?p=227</guid>
		<description><![CDATA[A contact form is an essential part of any website.  Many forms out there only have a mailto link with an email address listed.  By going that route, you lose out on many people being able to contact you because they don&#8217;t have a default email client installed on their computer, or are not going [...]]]></description>
			<content:encoded><![CDATA[<p>A contact form is an essential part of any website.  Many forms out there only have a mailto link with an email address listed.  By going that route, you lose out on many people being able to contact you because they don&#8217;t have a default email client installed on their computer, or are not going to copy the email address listed into a new email.  This article will show you how to create a contact form that will work for any visitor to your website.</p>
<p><strong>The Contact Form</strong></p>
<p>First off, we need to create a contact form using html.</p>
<pre class="brush:html">&lt;form method="post" action="contactFormSubmit.php"&gt;
	&lt;label for="name"&gt;Name:
		&lt;input type="text" /&gt;
	&lt;/label&gt;
	&lt;label for="email"&gt;Email Address:
		&lt;input type="text" /&gt;
	&lt;/label&gt;
	&lt;label for="subject"&gt;Subject:
		&lt;input type="text" /&gt;
	&lt;/label&gt;
	&lt;label for="body"&gt;Message:
		&lt;textarea name="body" cols="60" rows="10"&gt;&lt;/textarea&gt;
	&lt;/label&gt;
	&lt;input type="submit" value="Send" /&gt;
&lt;/form&gt;</pre>
<p>In the form above, there are five fields created.  Not all fields have to be required, but these fields are a good starting point for a visitor to contact you.  By capturing their name and email address, you can have a way to reply to them.</p>
<p><strong>How to Send Email in PHP</strong></p>
<p>With PHP, you can send email via the built-in mail() function.  The function is defined as follows:</p>
<p>mail(to, subject, message, headers)</p>
<ul>
<li>to &#8211; email address (who you are sending the message to)</li>
<li>subject &#8211; the subject of the email</li>
<li>message &#8211; the content of the email</li>
<li>headers &#8211; additional details to add to the email, such as who the email is from</li>
</ul>
<p>Now, we need to create a PHP script to handle the form data sent to the server.  Below is one example of such a script:</p>
<pre class="brush:php">$name = !empty($_POST['name']) ? htmlentities($_POST['name']) : '';
$email = !empty($_POST['email']) ? $_POST['email'] : '';
$subject = !empty($_POST['subject']) ? htmlentities($_POST['subject']) : '';
$message = !empty($_POST['body']) ? htmlentities( $_POST['body']) : '';
if (!strpos($email,'@')) {
	echo 'Invalid Email Address';
} else {
	$to = 'youremailhere';
	$headers = 'From: '.$email;
	mail($to,$subject,$message,$headers);
}</pre>
<p>In the above code, replace &#8220;youremailhere&#8221; with the email where you would like the message to be sent.</p>
<p><strong>Additional Considerations</strong></p>
<p>This is only a simple example of what can be implemented using the PHP mail() function.  You may want to consider some of the following when implementing a contact form on your website:</p>
<ul>
<li>Spam &#8211; This script does not check      for spam submissions.  To avoid spam      in your contact form, I recommend implement a CAPTCHA, such as <a href="http://www.google.com/recaptcha" target="_blank">reCAPTCHA</a>.</li>
<li>Validation &#8211; Further validation may be      needed to make sure the contact form is safe from script or other types of      injection attacks.  The email      address in this script is only validated by looking for the @ symbol in      the string.  I recommend using a      function to validate email addresses.       There are a number of good examples across the Internet, but a good      one is <a href="http://www.linuxjournal.com/article/9585" target="_blank">here</a>.</li>
</ul>
<p>While this contact form is considerably more complex than a mailto link, it is worth the extra effort to be able to be contacted by any of your website visitors.</p>
<img src="http://www.webmastersessions.com/?ak_action=api_record_view&id=227&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.webmastersessions.com/how-to-create-a-contact-form-in-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top 10 Must Have Modules For Every Drupal Site</title>
		<link>http://www.webmastersessions.com/top-10-must-have-modules-for-every-drupal-site</link>
		<comments>http://www.webmastersessions.com/top-10-must-have-modules-for-every-drupal-site#comments</comments>
		<pubDate>Fri, 20 Aug 2010 14:00:31 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Administration Menu]]></category>
		<category><![CDATA[CAPTCHA]]></category>
		<category><![CDATA[CCK]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Content Management System]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Global Redirect]]></category>
		<category><![CDATA[Modules]]></category>
		<category><![CDATA[Nodewords]]></category>
		<category><![CDATA[Pathauto]]></category>
		<category><![CDATA[Rules]]></category>
		<category><![CDATA[Validation API]]></category>
		<category><![CDATA[Views]]></category>
		<category><![CDATA[Webform]]></category>
		<guid isPermaLink="false">http://www.webmastersessions.com/?p=224</guid>
		<description><![CDATA[As many of you already know, Drupal is one of the best and most popular content management systems for web sites.  Drupal has an excellent community of developers and contributors.  As a result, there are a ton of modules available.  The following modules are my favorites and the ones I use most often. Content Construction Kit (CCK) CCK [...]]]></description>
			<content:encoded><![CDATA[<p>As many of you already know, Drupal is one of the best and most popular content management systems for web sites.  Drupal has an excellent community of developers and contributors.  As a result, there are a ton of modules available.  The following modules are my favorites and the ones I use most often.</p>
<p><strong>Content Construction Kit (CCK)</strong></p>
<p>CCK is by far my favorite module.  I can&#8217;t imagine a site being built in Drupal without it.  CCK allows you to create new content node types, as well as add additional fields to an existing content type.  There are a number of additional modules you can install for just about any sort of form field you can think of.  This module is so important to Drupal, they are going to include it in the core modules for the 7.x release.</p>
<p><a href="http://drupal.org/project/cck" target="_blank">Visit the CCK project page</a></p>
<p><strong>Views</strong></p>
<p>Views is another very useful module and is a must have for any Drupal installation.  With Views, you can build lists from any data source in Drupal and customize the look and feel of the data.  The way it works is similar to designing a query in a database query designer application, but it is much simpler and offers far more flexibility.  I think Views should join CCK as a core module.</p>
<p><a href="http://drupal.org/project/views" target="_blank">Visit the Views project page</a></p>
<p><strong>Administration Menu</strong></p>
<p>The administration menu module creates a dropdown menu at the top of the page when logged in as an administrator.  This is very useful for quickly navigating to the various admin areas of the website.</p>
<p><a href="http://drupal.org/project/admin_menu" target="_blank">Visit the Administration Menu project page</a></p>
<p><strong>Nodewords</strong></p>
<p>The nodewords modules allows  the editing of meta tags for any content created in Drupal.  This is very useful for SEO purposes to have precise control over the meta tags and content of those tags appearing in your website code.</p>
<p><a href="http://drupal.org/project/nodewords" target="_blank">Visit the Nodewords project page</a></p>
<p><strong>Global Redirect and Pathauto</strong></p>
<p>These two modules work well together to aid in rewriting the url to a more human friendly version.  Global Redirect will redirect any duplicate paths to the correct alias.  Pathauto allows you to manage the alias generated for each page of content.</p>
<p><a href="http://drupal.org/project/globalredirect" target="_blank">Visit the Global Redirect project page</a></p>
<p><a href="http://drupal.org/project/pathauto" target="_blank">Visit the Pathauto project page</a></p>
<p><strong>Rules</strong></p>
<p>This module allows the administrator to setup rules, conditions, and actions.  Using the rules module, you can modify the workflow of your website.  Say you want a user to be directed to a specific page when they login if they have a certain role.  This module can do that, and much more.</p>
<p><a href="http://drupal.org/project/rules" target="_blank">Visit the Rules project page</a></p>
<p><strong>Google Analytics</strong></p>
<p>Every site needs to have some sort of analytics tracking.  Analytics are essential for improving your website by studying trends.  One of the best packages out there is Google Analytics.  Google provides a very easy to use interface for viewing website statistics and trends.  The best part about it?  It&#8217;s free.</p>
<p><a href="http://drupal.org/project/google_analytics" target="_blank">Visit the Google Analytics project page</a></p>
<p><strong>Webform</strong></p>
<p>The webform module is useful for creating any sort of form within node content without knowing how to program or create your own module.  I have found it especially useful for custom contact forms.</p>
<p><a href="http://drupal.org/project/webform" target="_blank">Visit the Webform project page</a></p>
<p><strong>Captcha and reCaptcha</strong></p>
<p>These two modules are useful for stopping spam submissions in your website forms.  The reCaptcha module presents the user with two words to enter from a distorted image.  I have found this one to be the most effective and easiest to implement captcha system.  The captcha challenge can be applied to any form registered with Drupal.</p>
<p><a href="http://drupal.org/project/captcha" target="_blank">Visit the Captcha project page</a></p>
<p><a href="http://drupal.org/project/recaptcha" target="_blank">Visit the reCaptcha project page</a></p>
<p><strong>Validation API</strong></p>
<p>This module allows the administrator to define custom validations for any form field on your website.  I have found this very useful for CCK Field validation beyond the built-in validation.</p>
<p><a href="https://drupal.org/project/validation_api" target="_blank">Visit the Validation API project page</a></p>
<img src="http://www.webmastersessions.com/?ak_action=api_record_view&id=224&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.webmastersessions.com/top-10-must-have-modules-for-every-drupal-site/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use jQuery To Bring Your Site To Life</title>
		<link>http://www.webmastersessions.com/use-jquery-to-bring-your-site-to-life</link>
		<comments>http://www.webmastersessions.com/use-jquery-to-bring-your-site-to-life#comments</comments>
		<pubDate>Thu, 19 Aug 2010 14:00:41 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Table Row Background]]></category>
		<guid isPermaLink="false">http://www.webmastersessions.com/?p=217</guid>
		<description><![CDATA[If you&#8217;re not using a Javascript framework, you are writing too much code!  When I first started learning how to write Javascript several years ago, I didn&#8217;t know these frameworks existed.  A couple a years ago, I learned about jQuery and how to utilize it to speed up my development. I&#8217;m sure you&#8217;re thinking that [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re not using a Javascript framework, you are writing too much code!  When I first started learning how to write Javascript several years ago, I didn&#8217;t know these frameworks existed.  A couple a years ago, I learned about jQuery and how to utilize it to speed up my development.</p>
<p>I&#8217;m sure you&#8217;re thinking that first paragraph seems like an ad.  Well, that may be so, but I enjoy every minute I am able to develop code using jQuery.</p>
<p><strong>Example: Alternate Background Colors in a Table</strong></p>
<p>Let&#8217;s start with a table layout.</p>
<pre class="brush:html">
&lt;table id="example"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Column 1&lt;/th&gt;
&lt;th&gt;Column 2&lt;/th&gt;
&lt;th&gt;Column 3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data 1&lt;/td&gt;
&lt;td&gt;Data 2&lt;/td&gt;
&lt;td&gt;Data 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data 4&lt;/td&gt;
&lt;td&gt;Data 5&lt;/td&gt;
&lt;td&gt;Data 6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data 7&lt;/td&gt;
&lt;td&gt;Data 8&lt;/td&gt;
&lt;td&gt;Data 9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</pre>
<p>To alternate background colors, the following code can be used.</p>
<pre class="brush:javascript">
$('#example tbody tr:odd').css('background-color','#CCCCCC');
</pre>
<p>In the above code, css selectors are used to get a handle to every other tr in the table tbody section.  Then, the background color is applied to every other table row.  Only one line of Javascript code is needed to accomplish this!</p>
<p>To learn more, <a href="http://www.jquery.com/" target="_blank">visit the jQuery website</a>.</p>
<img src="http://www.webmastersessions.com/?ak_action=api_record_view&id=217&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.webmastersessions.com/use-jquery-to-bring-your-site-to-life/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top 5 Must Read Development Blogs</title>
		<link>http://www.webmastersessions.com/top-5-must-read-development-blogs</link>
		<comments>http://www.webmastersessions.com/top-5-must-read-development-blogs#comments</comments>
		<pubDate>Wed, 18 Aug 2010 14:00:55 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Development Blogs]]></category>
		<category><![CDATA[Must Read]]></category>
		<guid isPermaLink="false">http://www.webmastersessions.com/?p=210</guid>
		<description><![CDATA[Have you been looking for some excellent development blogs to read?  The blogs listed below are some of my favorites and I read them every day. Sitepoint Sitepoint has several blog updates each day.  Each post is very well written and informative.  I have learned many new techniques from this blog. Sitepoint also has a [...]]]></description>
			<content:encoded><![CDATA[<p>Have you been looking for some excellent development blogs to read?  The blogs listed below are some of my favorites and I read them every day.</p>
<p><strong>Sitepoint</strong></p>
<p>Sitepoint has several blog updates each day.  Each post is very well written and informative.  I have learned many new techniques from this blog. Sitepoint also has a large collection of development articles, an excellent forum community, and, in my opinion, the best written development books.  I am the proud owner of more than ten of their development books.</p>
<p><a href="http://www.sitepoint.com/" target="_blank">Visit the Sitepoint website</a></p>
<p><strong>Smashing Magazine</strong></p>
<p>The reason I really love to read Smashing Magazine is their articles are incredibly in depth and provide a great learning experience.  The amount of time spent and attention to detail in each article is the best I have seen in a blog.</p>
<p><a href="http://www.smashingmagazine.com/" target="_blank">Visit the Smashing Magazine website</a></p>
<p><strong>Six Revisions</strong></p>
<p>Six Revisions is one of those blog sites you can&#8217;t be disappointed with. They cover a variety of topics from development to design, freebies, and tutorials.  The articles are very well written and informative.</p>
<p><a href="http://www.sixrevisions.com/" target="_blank">Visit the Six Revisions website</a></p>
<p><strong>Viperchill</strong></p>
<p>Not too long ago, I discovered Viperchill in a similar post such as this on another blog.  I visited the website and was immediately impressed with the quality and in depth coverage of the articles presented.  While it is a newer blog, the future for this blog is very bright</p>
<p><a href="http://www.viperchill.com/" target="_blank">Visit the Viperchill website</a></p>
<p><strong>Nettuts+</strong></p>
<p>Nettus+ is another great blog I love to read.  Each week, I end up reading several articles and I am impressed with their choice of article content.  Not only is their content interesting to read, but you can learn quite a bit.</p>
<p><a href="http://net.tutsplus.com/" target="_blank">Visit the Nettuts+ website</a></p>
<img src="http://www.webmastersessions.com/?ak_action=api_record_view&id=210&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.webmastersessions.com/top-5-must-read-development-blogs/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Secure Your Website: SQL Injection</title>
		<link>http://www.webmastersessions.com/how-to-secure-your-website-sql-injection</link>
		<comments>http://www.webmastersessions.com/how-to-secure-your-website-sql-injection#comments</comments>
		<pubDate>Tue, 17 Aug 2010 14:00:35 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Injection]]></category>
		<guid isPermaLink="false">http://www.webmastersessions.com/?p=205</guid>
		<description><![CDATA[SQL Injection is one of the most common, overlooked, and potentially destructive attacks on modern websites.  When SQL code is posted to the web server via an input field and the code results in an unintended result, your have a SQL Injection attack.  This sort of attack can be used for anything from viewing unintended [...]]]></description>
			<content:encoded><![CDATA[<p>SQL Injection is one of the most common, overlooked, and potentially destructive attacks on modern websites.  When SQL code is posted to the web server via an input field and the code results in an unintended result, your have a SQL Injection attack.  This sort of attack can be used for anything from viewing unintended data, bypassing authentication, or even removing data from the database.</p>
<p><strong>SQL Injection Example</strong></p>
<p>Let&#8217;s say you have a login form for authentication to your website marked up as so:</p>
<pre class="brush:html">&lt;form  method="post" action="serversidescript"&gt;
&lt;label  for="username"&gt;Username:
&lt;input  type="text" name="username" id="username" /&gt;
&lt;/label&gt;
&lt;label  for="password"&gt;Password:
&lt;input  type="password" name="password" id="password"  /&gt;
&lt;/label&gt;
&lt;input  type="submit" name="submit" id="submit"  value="Login" /&gt;
&lt;/form&gt;</pre>
<p>On the server side, the script with SQL code could look something like this:</p>
<pre class="brush:php">$sql = "select * from users where username = '$username' and password = '$password'";</pre>
<p>The problem with this code is the variables from the form are input directly into the SQL query without checking their values.  An attacker could bypass your authentication with the following code:</p>
<p>Username: sometext<br />
Password: &#8216; or &#8217;1&#8242;=&#8217;1</p>
<p>The sql query line then becomes:</p>
<pre class="brush:php">$sql = "select * from users where username = 'sometext' and password = '' or '1' = '1'";</pre>
<p>The injected SQL code will effectively make this statement become &#8220;select * from users&#8221;.</p>
<p><strong>How To Secure Against SQL Injection</strong></p>
<p>The best way to secure your site against this type of attack is to assume any input from the user is malicious.  Implementing defenses to check the input values against rigid validation and/or escaping dangerous characters will secure your website against SQL Injection attacks.</p>
<p>Each scripting language has its own set of useful functions to help with sanitizing input data from the user.  In many cases, there are frameworks available, such as .NET, to further aid in defending against this type of attack.</p>
<p>Regular expressions, if used properly, are very effective at checking user input against a character set pattern.  Make sure to thoroughly test your regular expressions.  Even one mistake can have huge unintended results.</p>
<img src="http://www.webmastersessions.com/?ak_action=api_record_view&id=205&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.webmastersessions.com/how-to-secure-your-website-sql-injection/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction to SQL Statements</title>
		<link>http://www.webmastersessions.com/introduction-to-sql-statements</link>
		<comments>http://www.webmastersessions.com/introduction-to-sql-statements#comments</comments>
		<pubDate>Mon, 16 Aug 2010 14:00:51 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Database Development]]></category>
		<category><![CDATA[Delete]]></category>
		<category><![CDATA[From]]></category>
		<category><![CDATA[Order By]]></category>
		<category><![CDATA[Select]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Update]]></category>
		<category><![CDATA[Where]]></category>
		<guid isPermaLink="false">http://www.webmastersessions.com/?p=201</guid>
		<description><![CDATA[SQL is how you communicate with a relational database system, such as SQL Server, MySQL, or SQL Anywhere.  SQL stands for Structured Query Language.  The following sections will guide you through the basics of SQL used in retrieving, updating, and deleting data from a database. The Select Statement The select statement is used to retrieve [...]]]></description>
			<content:encoded><![CDATA[<p>SQL is how you communicate with a relational database system, such as SQL Server, MySQL, or SQL Anywhere.  SQL stands for Structured Query Language.  The following sections will guide you through the basics of SQL used in retrieving, updating, and deleting data from a database.</p>
<p><strong>The Select Statement</strong></p>
<p>The select statement is used to retrieve data from a database.  Select is the first SQL keyword used when retrieving the data.  Let&#8217;s take a look at a simple example.</p>
<pre class="brush:sql">Select * from table</pre>
<p>In this example, all columns will be retrieved from the table.  In the location of the *, column names, separated by commas, can be placed to select individual columns, rather than all columns.  This feature is demonstrated in the next example.</p>
<p><strong>The From Clause</strong></p>
<p>From is used to determine what table to retrieve data from.  In the example above, we are selecting from a table named &#8220;table&#8221;.</p>
<p><strong>The Where Clause</strong></p>
<p>Where is used to limit the result set retrieved from a table.  While the where clause is not required, it is used very often to retrieve the smallest result subset of data necessary.  The following example demonstrates the use of the where clause.</p>
<pre class="brush:sql">Select column1, column2, column3 from tablename where column2 = 'Test String' and column3 is not null</pre>
<p>In the example above, the conditions to limit the result set can be compared in a variety of ways.  The first comparison uses the equals operator to test where the value of column2 is equal to Test String.  In SQL, strings are enclosed in single quotes.  If single quotes are included in the string, a second single quote is used to escape the single quote character.  The second comparison will match values in column3 where the value is not equal to null.  Null is used to denote an empty column that has no value.</p>
<p><strong>The Order By Clause</strong></p>
<p>Order by is used to sort the result set into a format usable by your application.  Let&#8217;s take a look at an example:</p>
<pre class="brush:sql">Select * from tablename order by column1 asc, column4 desc</pre>
<p>In the example above, the result is sorted first in ascending order by column1, and then in descending order by column 4.  The order by clause always comes after the where clause.</p>
<p><strong>The Update Statement</strong></p>
<p>The update statement is used to change the value of existing data in a database.  The following is a simple example:</p>
<pre class="brush:sql">Update tablename set column1 = 5 where id = 8</pre>
<p>The table to update the data follows the update statement.  The set keyword is used to denote what data to update and in which columns.  The where clause is critical in an update statement.  It determines what rows will be updated.  If the where clause is omitted, all rows will be updated.</p>
<p><strong>The Delete Statement</strong></p>
<p>The delete statement is used to remove rows of data from a database table.  In the example below, the row with an id value of 8 will be removed.</p>
<pre class="brush:sql">Delete from tablename where id = 8</pre>
<p>As with the update statement, the where clause is critical so you do not delete more rows than intended.  If the where clause is omitted, all data from the table will be removed!</p>
<p><strong>Resources To Learn More</strong></p>
<p>MySQL</p>
<ul>
<li>MySQL website &#8211; <a href="http://www.mysql.com/">http://www.mysql.com/</a></li>
</ul>
<p>SQL Server</p>
<ul>
<li>SQL Server website &#8211; <a href="http://www.microsoft.com/sqlserver/">http://www.microsoft.com/sqlserver/</a></li>
</ul>
<p>For the many other relational database systems in existence, refer to the documentation that came with the database software or visit the company website to learn more.</p>
<img src="http://www.webmastersessions.com/?ak_action=api_record_view&id=201&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.webmastersessions.com/introduction-to-sql-statements/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
