serverValidate - it is very easy!

cuhuak 04 May, 2008
Hi all. Here i'll describe my server validation.
It consists of of 3 steps:
1. to add control to the administration panel (validation tab),
administrator/components/com_chronocontact/admin.chronocontact.html.php file
2. to add code to components/com_chronocontact/chronocontact.php file
3. to add chrono_servervalidate.php file (contains function for validation).

OK, let's begin.

1.
administrator/components/com_chronocontact/admin.chronocontact.html.php file
line ~ 742
	<tr style="background-color:#c9c9c9 ">
		<td><?php echo JHTML::_('tooltip', "Enable Server Validation ?" ); ?></td>
		<td><strong>Enable Server Validation ?</strong> </td>
		<td></td>
		<td>
		<select name="params[servervalidate]" id="params[servervalidate]">
			<option<?php if($paramsvalues->servervalidate == 'No'){ echo ' selected';} ?> value="No">No</option>
			<option<?php if($paramsvalues->servervalidate == 'Yes'){ echo ' selected';} ?> value="Yes">Yes</option>
		</select>
		</td>
	</tr>

Now go to the validation tab and you will see servervalidation dropdown
2. components/com_chronocontact/chronocontact.php
line: before "/** * Main E-mail type switch "
    	if ( trim($paramsvalues->servervalidate) == 'Yes' ) {		
			include_once('chrono_servervalidate.php');
			$arr_required = explode(",", str_replace(" ","",$paramsvalues->val_required));
			$arr_validate_number = explode(",", str_replace(" ","",$paramsvalues->val_validate_number));
			$arr_validate_digits = explode(",", str_replace(" ","",$paramsvalues->val_validate_digits));
			$arr_validate_alpha = explode(",", str_replace(" ","",$paramsvalues->val_validate_alpha));
			$arr_validate_alphanum = explode(",", str_replace(" ","",$paramsvalues->val_validate_alphanum));
			$arr_validate_date = explode(",", str_replace(" ","",$paramsvalues->val_validate_date));
			$arr_validate_email = explode(",", str_replace(" ","",$paramsvalues->val_validate_email));
			$arr_validate_url = explode(",", str_replace(" ","",$paramsvalues->val_validate_url));
			$arr_validate_date_au = explode(",", str_replace(" ","",$paramsvalues->val_validate_date_au));
			$arr_validate_currency_dollar = explode(",", str_replace(" ","",$paramsvalues->val_validate_currency_dollar));
			$arr_validate_selection = explode(",", str_replace(" ","",$paramsvalues->val_validate_selection));
			$arr_validate_one_required = explode(",", str_replace(" ","",$paramsvalues->val_validate_one_required));
			foreach ( $fields as $name => $post) {
				// replace $name with $titlesvalues->$name if you wants to see 'Elements titles' (if it was assigned...)
				if(in_array($name,$arr_required)){
					validator($name, trim($post), 'string', 1);
				}
				if(in_array($name,$arr_validate_number)){
					validator($name, trim($post) , "number"«»);
				}
				if(in_array($name,$arr_validate_digits)){
					validator($name, trim($post) , "digits"«»);
				}
				if(in_array($name,$arr_validate_alpha)){
					validator($name, trim($post) , "alfa"«»);
				}
				if(in_array($name,$arr_validate_alphanum)){
					validator($name, trim($post) , "alphanum"«»);
				}
				if(in_array($name,$arr_validate_date)){
					validator($name, trim($post) , "date"«»);
				}
				if(in_array($name,$arr_validate_email)){
					validator($name, trim($post) , "email"«»);
				}
				if(in_array($name,$arr_validate_url)){
					validator($name, trim($post) , "url"«»);
				}
				if(in_array($name,$arr_validate_date_au)){
					validator($name, trim($post) , "date_au"«»);
				}
				if(in_array($name,$arr_validate_currency_dollar)){
					validator($name, trim($post) , "currency_dollar"«»);
				}
				if(in_array($name,$arr_validate_selection)){
					validator($name, trim($post) , "number"«»);
				}
				if(in_array($name,$arr_validate_one_required)){
					validator($name, trim($post) , "one_required"«»);
				}
	        }
	        if (count($validator_errors)>0) {
	        	if ($debug) {
		        	echo '<hr /><b>ERRORS:</b> <br />';
			        foreach ( $validator_errors as $type => $error) {
			        	echo 'rule: ' .$type . ' * '. $error . '<br />';
			        }
		        	echo '<hr />';
	        	}
	        	echo 'Data you typed is invalid.';
				showform($_POST);
				return;			
	        }
    	}


3. Add chrono_servervalidate.php file to the components/com_chronocontact/ folder
<?php
global $validator_errors;

function validator($field_descr, $field_data, $field_type='', $field_required=0) {

	# array for storing error messages
	global $validator_errors;

	if(!$field_data && !$field_required){ return; }

	# initialize a flag variable - used to flag whether data is valid or not
	$field_ok=false;

	# a hash array of "types of data" pointing to "regexps" used to validate the data:
	$data_types=array(
		'number' => '/^[0-9]+$/',
		'digits' => '/^[+-]?\d+$/',
		'alfa' => '/^[a-zA-Z]+$/i',
		'alphanum' => '/^[\w]+$/i',
		'date' => '/^[\d]$/',//?DATE? o.O timestamp?
		'email' => '/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/',
		'url' => '/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:«»(\d+))?\/?/i',
		'date-au' => '/^(\d{2})\/(\d{2})\/(\d{4})$/', // format: dd/MM/YYYY
		'currency-dollar' => '/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/',
		'phonenumber' => '/^[0-9 -\(\)]+$/',
		'string'=>''
	);
	
	# check for required fields
	if ($field_required && $field_data=='') {
		$validator_errors[] = "Field '$field_descr' is required.";
		return 0;
	}
	
	if ($field_type == "string"«») {
		$field_ok = true;
	} else if ($field_type != ''){
		$field_ok = preg_match($data_types[$field_type], $field_data);
	}
	
	if (!$field_ok) {
		$validator_errors[$field_type] = "Field '$field_descr' is invalid.";
		return 0;
	}
	return 1;
}
?>


Post edited by: cuhuak, at: 2008/05/04 14:31<br><br>Post edited by: cuhuak, at: 2008/05/04 14:35
This topic is locked and no more replies can be posted.