<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<title>CodeIgniter User Guide : Form Validation</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />

</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle.jpg" width="153" height="44" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>CodeIgniter User Guide Version 1.6.0</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->


<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://www.codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
Form Validation
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->

<br clear="all" />


<!-- START CONTENT -->
<div id="content">

<h1>Form Validation</h1>

<p>Before explaining CodeIgniter's approach to data validation, let's describe the ideal scenario:</p>

<ol>
<li>A form is displayed.</li>
<li>You fill it in and submit it.</li>
<li>If you submitted something invalid, or perhaps missed a required item, the form is redisplayed containing your data along with an error message describing the problem.</li>
<li>This process continues until you have submitted a valid form.</li>
</ol>

<p>On the receiving end, the script must:</p>

<ol>
<li>Check for required data.</li>
<li>Verify that the data is of the correct type, and meets the correct criteria. (For example, if a username is submitted
it must be validated to contain only permitted characters.  It must be of a minimum length,
and not exceed a maximum length. The username can't be someone else's existing username, or perhaps even a reserved word. Etc.)</li>
<li>Sanitize the data for security.</li>
<li>Pre-format the data if needed (Does the data need to be trimmed?  HTML encoded?  Etc.)</li>
<li>Prep the data for insertion in the database.</li>
</ol>


<p>Although there is nothing complex about the above process, it usually requires a significant
amount of code, and to display error messages, various control structures are usually placed within the form HTML.
Form validation, while simple to create, is generally very messy and tedious to implement.</p>

<dfn>CodeIgniter provides a comprehensive validation framework that truly minimizes the amount of code you'll write.
It also removes all control structures from your form HTML, permitting it to be clean and free of code.</dfn>

<h2>Overview</h2>

<p>In order to implement CodeIgniter's form validation you'll need three things:</p>

<ol>
<li>A <a href="../general/views.html">View</a> file containing the form.</li>
<li>A View file containing a "success" message to be displayed upon successful submission.</li>
<li>A <a href="../general/controllers.html">controller</a> function to receive and process the submitted data.</li>
</ol>

<p>Let's create those three things, using a member sign-up form as the example.</p>

<h2>The Form</h2>

<p>Using a text editor, create a form called <dfn>myform.php</dfn>.  In it, place this code and save it to your <samp>applications/views/</samp>
folder:</p>


<textarea class="textarea" style="width:100%" cols="50" rows="30">&lt;html>
&lt;head>
&lt;title>My Form&lt;/title>
&lt;/head>
&lt;body>

&lt;?=$this->validation->error_string; ?>

&lt;?=form_open('form'); ?>

&lt;h5>Username&lt;/h5>
&lt;input type="text" name="username" value="" size="50" />

&lt;h5>Password&lt;/h5>
&lt;input type="text" name="password" value="" size="50" />

&lt;h5>Password Confirm&lt;/h5>
&lt;input type="text" name="passconf" value="" size="50" />

&lt;h5>Email Address&lt;/h5>
&lt;input type="text" name="email" value="" size="50" />

&lt;div>&lt;input type="submit" value="Submit" />&lt;/div>

&lt;/form>

&lt;/body>
&lt;/html>
</textarea>


<h2>The Success Page</h2>


<p>Using a text editor, create a form called <dfn>formsuccess.php</dfn>.  In it, place this code and save it to your <samp>applications/views/</samp>
folder:</p>


<textarea class="textarea" style="width:100%" cols="50" rows="14">
&lt;html>
&lt;head>
&lt;title>My Form&lt;/title>
&lt;/head>
&lt;body>

&lt;h3>Your form was successfully submitted!&lt;/h3>

&lt;p>&lt;?=anchor('form', 'Try it again!'); ?>&lt;/p>

&lt;/body>
&lt;/html>
</textarea>


<h2>The Controller</h2>

<p>Using a text editor, create a controller called <dfn>form.php</dfn>.  In it, place this code and save it to your <samp>applications/controllers/</samp>
folder:</p>


<textarea class="textarea" style="width:100%" cols="50" rows="21">&lt;?php

class Form extends Controller {
	
	function index()
	{
		$this->load->helper(array('form', 'url'));
		
		$this->load->library('validation');
				
		if ($this->validation->run() == FALSE)
		{
			$this->load->view('myform');
		}
		else
		{
			$this->load->view('formsuccess');
		}
	}
}
?></textarea>


<h2>Try it!</h2>

<p>To try your form, visit your site using a URL similar to this one:</p>

<code>www.your-site.com/index.php/<var>form</var>/</code>

<p><strong>If you submit the form you should simply see the form reload.  That's because you haven't set up any validation
rules yet, which we'll get to in a moment.</strong></p>


<h2>Explanation</h2>

<p>You'll notice several things about the above pages:</p>

<p>The <dfn>form</dfn> (myform.php) is a standard web form with a couple exceptions:</p>

<ol>
<li>It uses a <dfn>form helper</dfn> to create the form opening.
Technically, this isn't necessary.  You could create the form using standard HTML.  However, the benefit of using the helper
is that it generates the action URL for you, based on the URL in your config file.  This makes your application more portable
and flexible in the event your URLs change.</li>

<li>At the top of the form you'll notice the following variable:
<code>&lt;?=$this->validation->error_string; ?&gt;</code>

<p>This variable will display any error messages sent back by the validator. If there are no messages it returns nothing.</p>
</li>
</ol>

<p>The <dfn>controller</dfn> (form.php) has one function: <dfn>index()</dfn>. This function initializes the validation class and
loads the <var>form helper</var> and <var>URL helper</var> used by your view files. It also <samp>runs</samp>
the validation routine. Based on
whether the validation was successful it either presents the form or the success page.</p>

<p><strong>Since you haven't told the validation class to validate anything yet, it returns "false" (boolean false) by default.  The <samp>run()</samp>
function only returns "true" if it has successfully applied your rules without any of them failing.</strong></p>


<h2>Setting Validation Rules</h2>

<p>CodeIgniter lets you set as many validation rules as you need for a given field, cascading them in order, and it even lets you prep and pre-process the field data
at the same time. Let's see it in action, we'll explain it afterwards.</p>

<p>In your <dfn>controller</dfn> (form.php), add this code just below the validation initialization function:</p>

<code>$rules['username']	= "required";<br />
$rules['password']	= "required";<br />
$rules['passconf']	= "required";<br />
$rules['email']		= "required";<br />
<br />
$this->validation->set_rules($rules);</code>

<p>Your controller should now look like this:</p>

<textarea class="textarea" style="width:100%" cols="50" rows="28"><?php

class Form extends Controller {
	
	function index()
	{
		$this->load->helper(array('form', 'url'));
		
		$this->load->library('validation');
			
		$rules['username']	= "required";
		$rules['password']	= "required";
		$rules['passconf']	= "required";
		$rules['email']		= "required";
		
		$this->validation->set_rules($rules);
			
		if ($this->validation->run() == FALSE)
		{
			$this->load->view('myform');
		}
		else
		{
			$this->load->view('formsuccess');
		}
	}
}
?></textarea>

<p><dfn>Now submit the form with the fields blank and you should see the error message.
If you submit the form with all the fields populated you'll see your success page.</dfn></p>

<p class="important"><strong>Note:</strong> The form fields are not yet being re-populated with the data when
there is an error.  We'll get to that shortly, once we're through explaining the validation rules.</p>


<h2>Changing the Error Delimiters</h2>

<p>By default, the system adds a paragraph tag (&lt;p&gt;) around each error message shown. You can easily change these delimiters with
this code, placed in your controller:</p>

<code>$this->validation->set_error_delimiters('<kbd>&lt;div class="error"></kbd>', '<kbd>&lt;/div></kbd>');</code>

<p>In this example, we've switched to using div tags.</p>

<h2>Cascading Rules</h2>

<p>CodeIgniter lets you pipe multiple rules together.  Let's try it. Change your rules array like this:</p>


<code>$rules['username']	= "required|min_length[5]|max_length[12]";<br />
$rules['password']	= "required|matches[passconf]";<br />
$rules['passconf']	= "required";<br />
$rules['email']		= "required|valid_email";</code>

<p>The above code requires that:</p>

<ol>
<li>The username field be no shorter than 5 characters and no longer than 12.</li>
<li>The password field must match the password confirmation field.</li>
<li>The email field must contain a valid email address.</li>
</ol>

<p>Give it a try!</p>

<p class="important"><strong>Note:</strong> There are numerous rules available which you can read about in the validation reference.</p>


<h2>Prepping Data</h2>

<p>In addition to the validation functions like the ones we used above, you can also prep your data in various ways.
For example, you can set up rules like this:</p>

<code>$rules['username']	= "<kbd>trim</kbd>|required|min_length[5]|max_length[12]|<kbd>xss_clean</kbd>";<br />
$rules['password']	= "<kbd>trim</kbd>|required|matches[passconf]|<kbd>md5</kbd>";<br />
$rules['passconf']	= "<kbd>trim</kbd>|required";<br />
$rules['email']		= "<kbd>trim</kbd>|required|valid_email";</code>

<p>In the above, we are "trimming" the fields, converting the password to MD5, and running the username through
the "xss_clean" function, which removes malicious data.</p>

<p class="important"><strong>Any native PHP function that accepts one parameter can be used as a rule, like <dfn>htmlspecialchars</dfn>,
<dfn>trim</dfn>,  <dfn>MD5</dfn>, etc.</strong></p>

<p><strong>Note:</strong> You will generally want to use the prepping functions <strong>after</strong>
the validation rules so if there is an error, the original data will be shown in the form.</p>

<h2>Callbacks: Your own Validation Functions</h2>

<p>The validation system supports callbacks to your own validation functions.  This permits you to extend the validation class
to meet your needs.  For example, if you need to run a database query to see if the user is choosing a unique username, you can
create a callback function that does that.  Let's create a simple example.</p>

<p>In your controller, change the "username" rule to this:</p>

<code>$rules['username'] = "callback_username_check"; </code>

<p>Then add a new function called <dfn>username_check</dfn> to your controller.  Here's how your controller should look:</p>


<textarea class="textarea" style="width:100%" cols="50" rows="44"><?php

class Form extends Controller {
	
	function index()
	{
		$this->load->helper(array('form', 'url'));
		
		$this->load->library('validation');
			
		$rules['username']	= "callback_username_check";
		$rules['password']	= "required";
		$rules['passconf']	= "required";
		$rules['email']		= "required";
		
		$this->validation->set_rules($rules);
			
		if ($this->validation->run() == FALSE)
		{
			$this->load->view('myform');
		}
		else
		{
			$this->load->view('formsuccess');
		}
	}
	
	function username_check($str)
	{
		if ($str == 'test')
		{
			$this->validation->set_message('username_check', 'The %s field can not be the word "test"');
			return FALSE;
		}
		else
		{
			return TRUE;
		}
	}
	
}
?></textarea>

<p>Reload your form and submit it with the word "test" as the username.  You can see that the form field data was passed to your
callback function for you to process.</p>

<p><strong>To invoke a callback just put the function name in a rule, with "callback_" as the rule prefix.</strong></p>

<p>The error message was set using the <dfn>$this->validation->set_message</dfn> function.
Just remember that the message key (the first parameter) must match your function name.</p>

<p class="important"><strong>Note:</strong> You can apply your own custom error messages to any rule, just by setting the
message similarly. For example, to change the message for the "required" rule you will do this:</p>

<code>$this->validation->set_message('required', 'Your custom message here');</code>

<h2>Re-populating the form</h2>

<p>Thus far we have only been dealing with errors.  It's time to repopulate the form field with the submitted data.
This is done similarly to your rules.  Add the following code to your controller, just below your rules:</p>

<code>$fields['username'] = 'Username';<br />
$fields['password'] = 'Password';<br />
$fields['passconf'] = 'Password Confirmation';<br />
$fields['email'] = 'Email Address';<br />
<br />
$this->validation->set_fields($fields);</code>

<p>The array keys are the actual names of the form fields, the value represents the full name that you want shown in the
error message.</p>

<p>The index function of your controller should now look like this:</p>


<textarea class="textarea" style="width:100%" cols="50" rows="30">function index()
{
	$this->load->helper(array('form', 'url'));
	
	$this->load->library('validation');
		
	$rules['username']	= "required";
	$rules['password']	= "required";
	$rules['passconf']	= "required";
	$rules['email']		= "required";
	
	$this->validation->set_rules($rules);
	
	$fields['username']	= 'Username';
	$fields['password']	= 'Password';
	$fields['passconf']	= 'Password Confirmation';
	$fields['email']	= 'Email Address';

	$this->validation->set_fields($fields);
		
	if ($this->validation->run() == FALSE)
	{
		$this->load->view('myform');
	}
	else
	{
		$this->load->view('formsuccess');
	}
}</textarea>


<p>Now open your <dfn>myform.php</dfn> view file and update the value in each field so that it has an object corresponding to its name:</p>


<textarea class="textarea" style="width:100%" cols="50" rows="30">
&lt;html>
&lt;head>
&lt;title>My Form&lt;/title>
&lt;/head>
&lt;body>

&lt;?=$this->validation->error_string; ?>

&lt;?=form_open('form'); ?>

&lt;h5>Username&lt;/h5>
&lt;input type="text" name="username" value="&lt;?=$this->validation->username;?>" size="50" />

&lt;h5>Password&lt;/h5>
&lt;input type="text" name="password" value="&lt;?=$this->validation->password;?>" size="50" />

&lt;h5>Password Confirm&lt;/h5>
&lt;input type="text" name="passconf" value="&lt;?=$this->validation->passconf;?>" size="50" />

&lt;h5>Email Address&lt;/h5>
&lt;input type="text" name="email" value="&lt;?=$this->validation->email;?>" size="50" />

&lt;div>&lt;input type="submit" value="Submit" />&lt;/div>

&lt;/form>

&lt;/body>
&lt;/html>
</textarea>


<p>Now reload your page and submit the form so that it triggers an error.  Your form fields should be populated
and the error messages will contain a more relevant field name.</p>



<h2>Showing Errors Individually</h2>

<p>If you prefer to show an error message next to each form field, rather than as a list, you can change your form so that it looks like this:</p>


<textarea class="textarea" style="width:100%" cols="50" rows="20">
&lt;h5>Username&lt;/h5>
&lt;?=$this->validation->username_error; ?>
&lt;input type="text" name="username" value="&lt;?=$this->validation->username;?>" size="50" />

&lt;h5>Password&lt;/h5>
&lt;?=$this->validation->password_error; ?>
&lt;input type="text" name="password" value="&lt;?=$this->validation->password;?>" size="50" />

&lt;h5>Password Confirm&lt;/h5>
&lt;?=$this->validation->passconf_error; ?>
&lt;input type="text" name="passconf" value="&lt;?=$this->validation->passconf;?>" size="50" />

&lt;h5>Email Address&lt;/h5>
&lt;?=$this->validation->email_error; ?>
&lt;input type="text" name="email" value="&lt;?=$this->validation->email;?>" size="50" /></textarea>

<p>If there are no errors, nothing will be shown.  If there is an error, the message will appear, wrapped in the delimiters you
have set (&lt;p> tags by default).</p>

<p class="important"><strong>Note: </strong>To display errors this way you must remember to set your fields using the <kbd>$this->validation->set_fields</kbd>
function described earlier. The errors will be turned into variables that have "_error" after your field name.
For example, your "username" error will be available at:<br /><dfn>$this->validation->username_error</dfn>.</p>


<h2>Rule Reference</h2>

<p>The following is a list of all the native rules that are available to use:</p>



<table cellpadding="0" cellspacing="1" border="0" style="width:100%" class="tableborder">
<tr>
<th>Rule</th>
<th>Parameter</th>
<th>Description</th>
<th>Example</th>
</tr><tr>

<td class="td"><strong>required</strong></td>
<td class="td">No</td>
<td class="td">Returns FALSE if the form element is empty.</td>
<td class="td">&nbsp;</td>
</tr><tr>

<td class="td"><strong>matches</strong></td>
<td class="td">Yes</td>
<td class="td">Returns FALSE if the form element does not match the one in the parameter.</td>
<td class="td">matches[form_item]</td>
</tr><tr>

<td class="td"><strong>min_length</strong></td>
<td class="td">Yes</td>
<td class="td">Returns FALSE if the form element is shorter then the parameter value.</td>
<td class="td">min_length[6]</td>
</tr><tr>

<td class="td"><strong>max_length</strong></td>
<td class="td">Yes</td>
<td class="td">Returns FALSE if the form element is longer then the parameter value.</td>
<td class="td">max_length[12]</td>
</tr><tr>

<td class="td"><strong>exact_length</strong></td>
<td class="td">Yes</td>
<td class="td">Returns FALSE if the form element is not exactly the parameter value.</td>
<td class="td">exact_length[8]</td>
</tr><tr>

<td class="td"><strong>alpha</strong></td>
<td class="td">No</td>
<td class="td">Returns FALSE if the form element contains anything other than alphabetical characters.</td>
<td class="td">&nbsp;</td>
</tr><tr>

<td class="td"><strong>alpha_numeric</strong></td>
<td class="td">No</td>
<td class="td">Returns FALSE if the form element contains anything other than alpha-numeric characters.</td>
<td class="td">&nbsp;</td>
</tr><tr>

<td class="td"><strong>alpha_dash</strong></td>
<td class="td">No</td>
<td class="td">Returns FALSE if the form element contains anything other than alpha-numeric characters, underscores or dashes.</td>
<td class="td">&nbsp;</td>
</tr><tr>

<td class="td"><strong>numeric</strong></td>
<td class="td">No</td>
<td class="td">Returns FALSE if the form element contains anything other than numeric characters.</td>
<td class="td">&nbsp;</td>
</tr><tr>

<td class="td"><strong>valid_email</strong></td>
<td class="td">No</td>
<td class="td">Returns FALSE if the form element does not contain a valid email address.</td>
<td class="td">&nbsp;</td>
</tr>
<tr>
<td class="td"><strong>valid_ip</strong></td>
<td class="td">No</td>
<td class="td">Returns FALSE if the supplied IP is not valid.</td>
<td class="td">&nbsp;</td>
</tr>

</table>

<p><strong>Note:</strong> These rules can also be called as discreet functions. For example:</p>

<code>$this->validation->required($string);</code>

<p class="important"><strong>Note:</strong> You can also use any native PHP functions that permit one parameter.</p>



<h2>Prepping Reference</h2>

<p>The following is a list of all the prepping functions that are available to use:</p>



<table cellpadding="0" cellspacing="1" border="0" style="width:100%" class="tableborder">
<tr>
<th>Name</th>
<th>Parameter</th>
<th>Description</th>
</tr><tr>

<td class="td"><strong>xss_clean</strong></td>
<td class="td">No</td>
<td class="td">Runs the data through the XSS filtering function, described in the <a href="input.html">Input Class</a> page.</td>
</tr><tr>

<td class="td"><strong>prep_for_form</strong></td>
<td class="td">No</td>
<td class="td">Converts special characters so that HTML data can be shown in a form field without breaking it.</td>
</tr><tr>

<td class="td"><strong>prep_url</strong></td>
<td class="td">No</td>
<td class="td">Adds "http://" to URLs if missing.</td>
</tr><tr>

<td class="td"><strong>strip_image_tags</strong></td>
<td class="td">No</td>
<td class="td">Strips the HTML from image tags leaving the raw URL.</td>
</tr><tr>

<td class="td"><strong>encode_php_tags</strong></td>
<td class="td">No</td>
<td class="td">Converts PHP tags to entities.</td>
</tr>

</table>

<p class="important"><strong>Note:</strong> You can also use any native PHP functions that permit one parameter,
like <kbd>trim</kbd>, <kbd>htmlspecialchars</kbd>, <kbd>urldecode</kbd>, etc.</p>


<h2>Setting Custom Error Messages</h2>

<p>All of the native error messages are located in the following language file:  <dfn>language/english/validation_lang.php</dfn></p>

<p>To set your own custom message you can either edit that file, or use the following function:</p>

<code>$this->validation->set_message('<var>rule</var>', '<var>Error Message</var>');</code>

<p>Where <var>rule</var> corresponds to the name of a particular rule, and <var>Error Message</var> is the text you would like displayed.</p>


<h2>Dealing with Select Menus, Radio Buttons, and Checkboxes</h2>

<p>If you use select menus, radio buttons or checkboxes, you will want the state of
these items to be retained in the event of an error.  The Validation class has three functions that help you do this:</p>

<h2>set_select()</h2>

<p>Permits you to display the menu item that was selected.  The first parameter
must contain the name of the select menu, the second parameter must contain the value of
each item. Example:</p>

<code>
&lt;select name="myselect"><br />
&lt;option value="one" <dfn>&lt;?= $this->validation->set_select('myselect', 'one'); ?></dfn> >One&lt;/option><br />
&lt;option value="two" <dfn>&lt;?= $this->validation->set_select('myselect', 'two'); ?></dfn> >Two&lt;/option><br />
&lt;option value="three" <dfn>&lt;?= $this->validation->set_select('myselect', 'three'); ?></dfn> >Three&lt;/option><br />
&lt;/select>
</code>


<h2>set_checkbox()</h2>

<p>Permits you to display a checkbox in the state it was submitted.  The first parameter
must contain the name of the checkbox, the second parameter must contain its value. Example:</p>

<code>&lt;input type="checkbox" name="mycheck" value="1" <dfn>&lt;?= $this->validation->set_checkbox('mycheck', '1'); ?></dfn> /></code>


<h2>set_radio()</h2>

<p>Permits you to display radio buttons in the state they were submitted.  The first parameter
must contain the name of the radio button, the second parameter must contain its value. Example:</p>

<code>&lt;input type="radio" name="myradio" value="1" <dfn>&lt;?= $this->validation->set_radio('myradio', '1'); ?></dfn> /></code>





</div>
<!-- END CONTENT -->


<div id="footer">
<p>
Previous Topic:&nbsp;&nbsp;<a href="user_agent.html">User Agent Class</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
Next Topic:&nbsp;&nbsp;<a href="xmlrpc.html">XML-RPC Class</a>
</p>
<p><a href="http://www.codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2007 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
</div>

</body>
</html>