Hello Bruce, Friday, August 12, 2005, 1:39:54 PM, you wrote: > I believe this can be done with an array. > any assistance is greatly appreciated! I've been working on a validation function for quite a while now that does what you're asking. I keep adding to it as I run across stuff I didn't need before. It's not perfect, but it does work pretty good. It does not do addslashes() because I do that only when I need to store it in a DB. Ok... Let's see if I can put this together without it being too ugly. The function as functions.php: ********************************************************************* function validate($fieldName, $value, $size, $type, $extra="0") { GLOBAL $errors; GLOBAL $safe; if ($value != "") { switch ($type) { case 'alpha': #Matches only letters and a hyphen (for last names) if (!preg_match("/^[a-z]+-?[a-z]+$/i", $value)) { $errors[0] = 1; $errors[$fieldName] = '<span class="badnote">This field only accepts alphabetic input'; } break; //------------------------------------------------------------------------------ case 'numeric': #Matches numeric input if (!preg_match("/^[0-9\.]+$/", $value)) { $errors[0] = 1; $errors[$fieldName] = '<span class="badnote">This field only accepts numeric input'; } break; //------------------------------------------------------------------------------ case 'phone': #Matches phonenumber in xxx-xxx-xxxx where area code and exchange do not start with a "1" if (!preg_match("/^[2-9][0-9]{2}-[2-9][0-9]{2}-[0-9]{4}$/", $value)) { $errors[0] = 1; $errors[$fieldName] = '<span class="badnote">Phone number must be in xxx-xxx-xxxx format'; } break; //------------------------------------------------------------------------------ case 'email': #Should match 99% of valid e-mail addresses if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $value)) { $errors[0]= 1; $errors[$fieldName] = '<span class="badnote">E-mail address ' . $email . ' doesn\'t appear valid, please verify'; } break; //------------------------------------------------------------------------------ case 'alphanumeric': #Matches strings with only alphanumerics if (!preg_match("/^[0-9a-z]+$/i", $value)) { $errors[0] = 1; $errors[$fieldName] = '<span class="badnote">This field only accepts alphanumeric characters'; } break; //------------------------------------------------------------------------------ case 'descriptor': #Allows strings with alphanumerics, and other common #things you'd find in titles and descriptions $value = htmlentities($value); break; //------------------------------------------------------------------------------ case 'date': #Matches strings with dates as mm-dd-yyyy if (!preg_match("/^(0[1-9]|1[012])\/(0[1-9]|[12][0-9]|3[01])\/(19|20)\d\d$/i", $value)) { $errors[0] = 1; $errors[$fieldName] = '<span class="badnote">Invalid date, enter as mm/dd/yyyy'; } break; //------------------------------------------------------------------------------ case 'time12': #Matches strings with dates as hh:mm if (!preg_match("/^([0]?[1-9]|1[0-2]):[0-5][0-9]$/i", $value)) { $errors[0] = 1; $errors[$fieldName] = '<span class="badnote">Invalid time, enter as xx:xx'; } break; // ------------------------------------------------------------------------------ case 'lat': #Matches strings with latitude as hddd mm.mmm if (!preg_match("/^-?([0-8]{1,3})\s([0-9]{1,2})\.[0-9]{1,3}$/",$value)) { $errors[0] = 1; $errors[$fieldName] = '<span class="badnote">Invalid value, enter as ddd mm.mmm'; } $value = str_replace(".", "", $value); $value = str_replace(" ", ".", $value); if ($extra == "S") $value = "-" . $value; break; // ------------------------------------------------------------------------------ case 'long': #Matches strings with longitude as hddd mm.mmm if (!preg_match("/^-?([0-9]{1,3})\s([0-9]{1,2})\.[0-9]{1,3}$/",$value)) { $errors[0] = 1; $errors[$fieldName] = '<span class="badnote">Invalid value, enter as ddd mm.mmm'; } $value = str_replace(".", "", $value); $value = str_replace(" ", ".", $value); if ($extra == "W") $value = "-" . $value; break; //------------------------------------------------------------------------------ } //Common to all in switch if (strlen($value) > $size) { if (!isset($errors[$fieldName])) $errors[$fieldName] .= '<span class="badnote">'; else $errors[$fieldName] .= '<br />'; $errors[0] = 1; $errors[$fieldName] .= 'Field limited to ' . $size . ' characters'; } if (isset($errors[$fieldName])) $errors[$fieldName] .= '</span>'; } //Ends if on a blank value else { $errors[0] = 1; $errors[$fieldName] = '<span class="badnote">You can not leave this field blank</span>'; } //It passed all the tests and is considered safe. Use this array to echo output //to the user or to insert / update a DB field. if (!isset($errors[$fieldName])) $safe[$fieldName] = stripslashes($value); } ********************************************************************* The validator.php file: ********************************************************************* require_once('functions.php'); validate('waypointID', $_POST['waypointID'], 6, 'alphanumeric'); validate('waypointName', $_POST['waypointName'], 50, 'descriptor'); validate('datePlaced', $_POST['datePlaced'], 10, 'date'); validate('lat', $_POST['lat'], 10, 'lat', $_POST['latComp']); validate('long', $_POST['long'], 10, 'long', $_POST['longComp']); validate('placedBy', $_POST['placedBy'], 50, 'descriptor'); validate('waypointType', $_POST['waypointType'], 25, 'descriptor'); validate('waypointSize', $_POST['waypointSize'], 25, 'descriptor'); validate('terrain', $_POST['terrain'], 3, 'numeric'); validate('difficulty', $_POST['difficulty'], 3, 'numeric'); ********************************************************************* You can see from the use as follows: validate( A name you'll use for this item in the array, The source of the thing you're validating, The max size in chars for it, The type of validation you want done, "extra" you can see used in the lat and long for N,S,E,W but can be used in other validation cases when needed. ) validator.php gets included if ($_POST['submit'] == 'submit') To show errors, I do this: ********************************************************************* <tr><td>Waypoint ID</td><td><input type="text" name="waypointID" style="width: 187px;" value="<?php echo $_POST['submit'] == "Submit" ? $safe['waypointID'] : 'GCXXXX';?>" /> <?php echo $errors['waypointID'];?></td></tr> ********************************************************************* The $errors[] and $safe[] key is created via the first variable in the validate() function. I don't do anything with the input (write to file/DB) if $errors[0] == 1; But if there are no errors, I use the validated ($safe[]) input like: $gpxOutput .= '<keywords>' . $safe['keywords'] . ', devtek</keywords>' . "\r\n"; The CSS class "badnote" is just red text in a slightly smaller font size. You can see how the whole thing works (the example is from a GPX XML generator I just wrote) at: http://www.pcwize.com/geocaching/gpx_generator.php If you want the code for it to see it all working together, let me know as I'll be GPL'ing it when I'm done. -- __ ____ ____ ____ TBUDL/BETA/DEV/TECH Lists Moderator / PGP 0x6C0AB16B ( ) ( ___)(_ _)( ___) TBUDP Wiki Site: http://www.PCWize.com/thebat/tbudp )(__ )__) _)(_ )__) Roguemoticons & Smileys: http://PCWize.com/thebat (____)(____)(____)(__) PHP Tutorials and snippets: http://www.DevTek.org Serial killer strikes! Mouse and modem found dead. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php