Multiple Form Handling Scripts vs. Switch/If...Else Statements vs. Lookup Arrays
A demonstration of how to use variable variables and lookup arrays by Jason Lengstorf.
Example 1 — Multiple Form Handling Scripts
In this example, each form directs to a separate form-handling script.
Processing File 1 (assets/inc/ex1-form1.php)
<?php
// Turn on error reporting so we can see if anything is going wrong
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Make sure our faux-token was supplied
if( isset($_POST['token']) && $_POST['token']==='secret token goes here' )
{
// Require the necessary class
require_once 'class.copterlabs_account.inc.php';
// Create a new instance of the class
$account_obj = new CopterLabs_Account();
// Handle the form submission
$output = $account_obj->save_name();
// For this example, just output some data about the form submission
echo "<pre>Processing File: ", $_SERVER['PHP_SELF'],
"\n\n<strong>Method Output:</strong>\n", $output, "</pre>\n",
'<p><a href="../../">Go back</a></p>';
}
else
{
die( 'Invalid form submission' );
}
Processing File 2 (assets/inc/ex1-form1.php)
<?php
// Turn on error reporting so we can see if anything is going wrong
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Make sure our faux-token was supplied
if( isset($_POST['token']) && $_POST['token']==='secret token goes here' )
{
// Require the necessary class
require_once 'class.copterlabs_account.inc.php';
// Create a new instance of the class
$account_obj = new CopterLabs_Account();
// Handle the form submission
$output = $account_obj->save_email();
// For this example, just output some data about the form submission
echo "<pre>Processing File: ", $_SERVER['PHP_SELF'],
"\n\n<strong>Method Output:</strong>\n", $output, "</pre>\n",
'<p><a href="../../">Go back</a></p>';
}
else
{
die( 'Invalid form submission' );
}
Processing File 3 (assets/inc/ex1-form1.php)
<?php
// Turn on error reporting so we can see if anything is going wrong
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Make sure our faux-token was supplied
if( isset($_POST['token']) && $_POST['token']==='secret token goes here' )
{
// Require the necessary class
require_once 'class.copterlabs_account.inc.php';
// Create a new instance of the class
$account_obj = new CopterLabs_Account();
// Handle the form submission
$output = $account_obj->save_both();
// For this example, just output some data about the form submission
echo "<pre>Processing File: ", $_SERVER['PHP_SELF'],
"\n\n<strong>Method Output:</strong>\n", $output, "</pre>\n",
'<p><a href="../../">Go back</a></p>';
}
else
{
die( 'Invalid form submission' );
}
Example 2 — Single Form Handling Script with a Switch
In this example, all forms direct to the same processing script, which uses a switch statement to determine what action should be taken.
Processing File (assets/inc/ex2-switch.php)
<?php
// Turn on error reporting so we can see if anything is going wrong
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Make sure our faux-token was supplied
if( isset($_POST['token']) && $_POST['token']==='secret token goes here' )
{
// Require the necessary class
require_once 'class.copterlabs_account.inc.php';
// Create a new instance of the class
$account_obj = new CopterLabs_Account();
// Sanitize the action
$action = htmlentities($_POST['action'], ENT_QUOTES);
// Use the new 'action' hidden input to determine what action to call
switch( $action )
{
// Form 1 handling
case 'update-name':
$output = $account_obj->save_name();
break;
// Form 2 handling
case 'update-email':
$output = $account_obj->save_email();
break;
// Form 3 handling
case 'update-both':
$output = $account_obj->save_both();
break;
// If no valid action is found, something isn't right
default:
die( 'Unsupported action.' );
}
// For this example, just output some data about the form submission
echo "<pre>Processing File: ", $_SERVER['PHP_SELF'],
"\nAction: ", htmlentities($_POST['action'], ENT_QUOTES),
"\n\n<strong>Method Output:</strong>\n", $output, "</pre>\n",
'<p><a href="../../#ex2">Go back to example 2</a></p>';
}
else
{
die( 'Invalid form submission' );
}
Example 3 — Single Form Handling Script with a Lookup Array
In this example, all forms direct to the same processing script, which uses a lookup array to determine what action should be taken.
Processing File (assets/inc/ex3-lookup-array.php)
<?php
// Turn on error reporting so we can see if anything is going wrong
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Make sure our faux-token was supplied
if( isset($_POST['token']) && $_POST['token']==='secret token goes here' )
{
// Require the necessary class
require_once 'class.copterlabs_account.inc.php';
// Create a new instance of the class
$account_obj = new CopterLabs_Account();
// Sanitize the action
$action = htmlentities($_POST['action'], ENT_QUOTES);
// Set up a lookup array to match actions to method names
$lookup_array = array(
'update-name' => 'save_name',
'update-email' => 'save_email',
'update-both' => 'save_both'
);
// Make sure the array key exists
if( array_key_exists($action, $lookup_array) )
{
// Using variable variables, call the proper method and store the output
$output = $account_obj->$lookup_array[$action]();
}
else
{
die( 'Unsupported action.' );
}
// For this example, just output some data about the form submission
echo "<pre>Processing File: ", $_SERVER['PHP_SELF'],
"\nAction: ", htmlentities($_POST['action'], ENT_QUOTES),
"\n\n<strong>Method Output:</strong>\n", $output, "</pre>\n",
'<p><a href="../../#ex3">Go back to example 3</a></p>';
}
else
{
die( 'Invalid form submission' );
}