9.4. Redisplaying Forms with Preserved Information and Error Messages
Problem
When there’s a problem with data entered in a form, you want to print out error messages alongside the problem fields, instead of a generic error message at the top of the form. You also want to preserve the values the user typed into the form the first time.
Solution
Use an array, $errors,
and store your messages in the array indexed by the name of the
field.
if (! pc_validate_zipcode($_REQUEST['zipcode'])) {
$errors['zipcode'] = "This is is a bad ZIP Code. ZIP Codes must "
. "have 5 numbers and no letters.";
}When you redisplay the form, you can display each error by its field and include the original value in the field:
echo $errors['zipcode'];
$value = isset($_REQUEST['zipcode']) ?
htmlentities($_REQUEST['zipcode']) : '';
echo "<input type=\"text\" name=\"zipcode\" value=\"$value\">";Discussion
If your users encounter errors when filling out a long form, you can increase the overall usability of your form if you highlight exactly where the errors need to be fixed.
Consolidating all errors in a single array has many advantages.
First, you can easily check if your validation process has located
any items that need correction; just use
count($errors). This method is easier than trying
to keep track of this fact in a separate variable, especially if the
flow is complex or spread out over multiple functions. Example 9-4 shows the pc_validate_form( ) validation function, which uses an
$errors array.
Example 9-4. pc_validate_form( ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access