Hey people.

I'm trying to come up with an easy way to validate forms. I've got an
idea and I'd like your feedback as well as suggestions and/or your own
methods.

My idea is to have a multi-dimensional array with fields: data and type.

Let's say you have a form with three fields. First Name (fname), Last
Name (lname), and Phone Number (phone). It's sent to a processing script
via GET. On the processing script you have the basics:

<? // pseudo code

// collect data
$fname = (!empty($_GET['fname'])) ? $_GET['fname'] : "" ;
$lname = (!empty($_GET['lname'])) ? $_GET['lname'] : "" ;
$phone = (!empty($_GET['phone'])) ? $_GET['phone'] : "" ;

// validate data
if($fname is not [a-zA-Z]{2,20})
{
        // mark as error
}

if($lname is not [a-zA-Z]{2,20})
{
        // mark as error
}

$phone = stripOutEverythingButTheNumbers($phone);

if($phone is not [0-9]{10}) // we only sell to US via website
{
        // mark as error
}

$_SESSION['form_errors'] = put_the_errors_in_here;

redirect("to_the_previous_page.php"); // where the errors will be read
                                      // and the fields with bad data
                                      // will be marked appropriately

?>

What I'd like to do is get rid of all the if's and what not and throw
them into a function. What I thought of doing to replace all this is:

<? // pseudo code

$formdata['fname']['data'] = (!empty($_GET['fname'])) ? $_GET['fname'] :
"" ;
$formdata['fname']['type'] = "name";
$formdata['lname']['data'] = (!empty($_GET['lname'])) ? $_GET['lname'] :
"" ;
$formdata['lname']['type'] = "name";
$formdata['phone']['data'] = (!empty($_GET['phone'])) ? $_GET['phone'] :
"" ;
$formdata['phone']['type'] = "phonenumber";


$_SESSION['form_errors'] = validateFormData($formdata);


redirect("to_the_previous_page.php");

?>

The validateFormDate() function would be defined something like this:

function validateFormData($input)
{
        foreach($input as $field)
        {
                switch ($field['type'])
                {
                        case 'name':
                                // do the magic
                                break;
                        case 'phonenumber':
                                // do the magic
                                break;
                }
        }
}


The validateFormData() function will return false if there are no errors
to report.

For a form that has a lot of fields to validate I think this can make
things pretty easy.


So... what do you think?



Chris.

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to