Client + Server Side Validation = New Love
Having to do some recent form validation I wanted to have a solution that worked both on the client and server side. I found it!
It comes from combining jQuery Validation Plugin and jQuery Validation PHP Plugin
Using both of these libraries I create one rule file and incorporate it for both client and server side validation. My recent rule file looks like the following.
<?php $validation_rules = array( 'rules' => array( 'timestamp' => array( 'required' => true, 'number' => true ), 'full-name' => 'required', 'address' => 'required', 'city-state-zip' => 'required', 'home-phone' => 'required', 'email' => array( 'required' => true, 'email' => true ), 'birthday' => array( 'required' => true, 'dateUS' => true ) ), 'messages' => array( 'timestamp' => array( 'required' => 'Select a date.', 'number' => 'The date selected is not valid.' ), 'full-name' => 'Enter your full name.', 'address' => 'Enter your address.', 'city-state-zip' => 'Enter your city state and zip.', 'home-phone' => 'Enter a phone number.', 'email' => array( 'required' => 'Enter your email address', 'email' => 'Enter a valid email address' ), 'birthday' => array( 'required' => 'Enter your birthday', 'dateUS' => 'Enter a date in the format mm/dd/yyyy.' ) ) ); ?>
Notice how I have dateUS. That is a custom validation rule I set up. Adding custom rules is really easy for both libraries.
I am using Twitter Bootstrap for my framework, and the following js helps jQuery validator work great on the client side.
var settings = $('#form').validate(<?php echo json_encode($validation_rules); ?>).settings; $.extend(settings, { errorClass: 'help-block', highlight: function(element){ $(element).closest('.control-group').addClass('error'); }, success: function(element){ element.closest('.control-group').removeClass('error'); } });
My post to page now follows something along the following logic.
<?php require_once 'rules.php'; require_once 'validator.class.php'; $oValidator = new Validator($validation_rules); $validated_data = $oValidator->validate($_POST); if (count($validated_data) == 0){ echo 'no errors'; } else{ print_r($validated_data); } ?>