Pogledajte određenu poruku
Staro 26. 01. 2013.   #1
sinisake
član
Certified
 
Datum učlanjenja: 26.07.2008
Poruke: 76
Hvala: 15
285 "Hvala" u 10 poruka
sinisake is on a distinguished roadsinisake is on a distinguished roadsinisake is on a distinguished road
Default Jos jedna php klasica za validaciju forme

Ima bolje i pametnije napisanih i sveobuhvatnijih, ali evo... mozda cak nekome i posluzi, za neke skromnije potrebe...

PHP kd:
class Form_validator 

{
    
var 
$errors='';
var 
$output='';
public function 
__construct() 
   {
foreach(
$_POST as $key=>$value) {
$_SESSION[$key]=$value;
}
    
   }
    
    


    
public function 
validate($vars

   {
       
    
    
    
    for(
$i=0;$i<count($vars);$i++) 
    
    {
        
        
$title=$vars[$i][0];
        
$rules=$vars[$i][1];
        
$var=$vars[$i][2];
        
        
            
//check rules
            
            //required field
            
if(strpos($rules,'req')!==FALSE
            
            {
                if(empty(
$var))
            
$this->errors.= $title' is required field!<br />';    
                
            }
            
            
//only text is allowed
            
            
if(strpos($rules,'text')!==FALSE
            
            {
                if(
preg_match('%[^A-Za-z ]%',$var))
            
$this->errors.= $title' field should contain only letters!<br />';    
                
            }
            
            
//only letters & numbers are allowed
            
            
if(strpos($rules,'alpha_digit')!==FALSE
            
            {
                if(
preg_match('%[^A-Za-z0-9 ]%',$var))
            
$this->errors.= $title' field should contain only letters and/or numbers!<br />';    
                
            }
            
            
//valid email
            
if(strpos($rules,'valid_email')!==FALSE
            
            {
            
if(!
filter_var($varFILTER_VALIDATE_EMAIL))
  {
  
$this->errors.= $title' is not a valid email address!<br />';
  }

                
            }
            
            
//only numeric chars
                
if(strpos($rules,'num')!==FALSE
            
            {
                if(
preg_match('%[^0-9. ]%',$var))
            
$this->errors.= $title' field should contain only numbers!<br />';    
                
            }
            
            
            
//minimal chars
                
if(strpos($rules,'min=')!==FALSE
            
            {
                if(
preg_match('%min=[0-9]{1,10}%',$rules,$match))
                {
                
$numb=str_replace('min=','',$match[0]);
                
                }
                if(!empty(
$var))
                if(
strlen($var)<$numb)
            
$this->errors.= $title" should have at least $numb characters!<br />";    
                
            }
            
            
//max chars
                
if(strpos($rules,'max=')!==FALSE
            
            {
                if(
preg_match('%max=[0-9]{1,10}%',$rules,$match))
                {
                
$numb=str_replace('max=','',$match[0]);
                
                }
                if(!empty(
$var))
                if(
strlen($var)>$numb)
            
$this->errors.= $title" should have at most $numb characters!<br />";    
                
            }
            
                
//check single checkbox
                
if(strpos($rules,'type:check_single')!==FALSE
            
            {
                if(
preg_match('%value:[0-9A-Za-z]{1,20}%',$rules,$match))
                {
                
$value=str_replace('value:','',$match[0]);
                
                }
                if(!empty(
$var))
                if(
$var!=$value)
            
$this->errors.= $title" wrong entry!<br />";    
                
            }
            
            
            
//check checkbox group/multiple checkboxes 
            
                
if(strpos($rules,'type:check_multi')!==FALSE
            
            {
                if(
preg_match('%values:[()0-9A-Za-z,]{1,200}%',$rules,$match))
                {
                    
$replace=array('values:','(',')');
                    
                
$values=str_replace($replace,'',$match[0]);
                
$values_array=explode(',',$values);
                
            
                
                
                }
                if(!empty(
$var))
                foreach (
$var as $val) {
                if(!
in_array($val,$values_array))
            
$this->errors.= $title" wrong entry!<br />";
                }
                
            }
            
            
            
//check radio buttons group
            
                
if(strpos($rules,'type:radio')!==FALSE
            
            {
                if(
preg_match('%values:[()0-9A-Za-z,]{1,200}%',$rules,$match))
                {
                    
$replace=array('values:','(',')');
                    
                
$values=str_replace($replace,'',$match[0]);
                
$values_array=explode(',',$values);
                
            
                
                
                }
                if(!empty(
$var))
                if(!
in_array($var,$values_array))
            
$this->errors.= $title" wrong entry!<br />";    
                
            }
            
            
                
//only numeric chars
                
if(strpos($rules,'custom')!==FALSE
            
            {
                if(
preg_match('%\[.+\]%',$rules,$match)) {
                
$rule=$match[0];    
                
                }
                
                if(
preg_match("%".$rule."%",$var))
            
$this->errors.= $title" contains disallowed char(s)!<br />";    
                
            }
            
        if(!
is_array($var)) {    
        
$this->output.=$title' : '$var'<br />';    
        }
        else 
        {
            
$this->output.=$title' : 'implode(',',$var). '<br />';
        }
            
            
    
        
        
    }
    
    if(
$this->errors!=''
    
    {
    return 
false;    
        
    }
    
    else 
    {
    return 
true;    
    }
    
   
    
   }
    
    
    

Upotreba:

PHP kd:
<?php 
error_reporting
(0);
session_start();
include(
'form_validator.php');
$validator= new Form_validator;    
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form action="" method="post">
Please enter your name: <br  />
<input name="name" type="text" value="<?php echo $_SESSION['name']; ?>" />
<br />
Please enter your email: <br  />
<input name="email" type="text" value="<?php echo $_SESSION['email']; ?>" />
<br />
Please enter some number: <br  />
<input name="number" type="text" value="<?php echo $_SESSION['number']; ?>" />
<br />
I agree with terms and conditions: 
<input name="terms" type="checkbox" value="1" <?php if($_SESSION['terms']=='1') echo 'checked'  ?> />
<br />
Vehicle:<br />
<input type="checkbox" name="vehicle[]" value="Bike" <?php if(in_array('Bike',$_SESSION['vehicle'])) echo 'checked';  ?>  >I have a bike<br>
<input type="checkbox" name="vehicle[]" value="Car"  <?php if(in_array('Car',$_SESSION['vehicle'])) echo 'checked';  ?> >I have a car<br>
 <input type="checkbox" name="vehicle[]" value="Plane"<?php if(in_array('Plane',$_SESSION['vehicle'])) echo 'checked';  ?>  >I have a plane<br> 
<br />
Gender:<br />
<input type="radio" name="gender" value="male" <?php if($_SESSION['gender']=='male') echo 'checked'  ?> >Male<br />
<input type="radio" name="gender" value="female"<?php if($_SESSION['gender']=='female') echo 'checked'  ?>  >Female<br />
<br />
How did you hear about us: <br />
<select name="how">
<option value="0">Please select one option</option>
<option value="Google">Google</option>
<option value="Radio">Radio</option>
<option value="TV">TV</option>
<option value="Other">Other</option>
</select>
<br />
Numbers and text:<br />
<input name="numbtext" type="text" value="<?php echo $_SESSION['numbtext']; ?>" />
<br />
Message:<br />
<textarea name="message" cols="" rows="" style="width:250px;height:130px;"><?php echo $_SESSION['message']; ?></textarea>
<br /><br />
<input name="submit" type="submit" value="Submit" />
</form>
<?php

if(isset($_POST['submit'])) 

{

// Set variable description titles (used for error messages), names, and validation rules + type of fields (checkboxes and radio buttons).
/*
req=required field
text=only letters are allowed
min = minimal number of characters
max = maximal number of characters
valid_email = obviously... :)
num = only numeric chars
alpha_digit = numbers&letters allowed
custom = format:[^your custom list of allowed characters in field]

types: 
check_single - single check box
check_multi - checkbox group
radio - radio buttons group



//rules for check box -> check_single -> one checkbox, value:-> check for exact value! check_multi -> checkbox group values:-> check for exact values!

*/    
$vars = array

array(
"Name"'req|text|min=6|max=20' $_POST['name']),
array(
"Email"'valid_email' $_POST['email']),
array(
"Test Number"'req|num|max=4' $_POST['number']),
//single checkbox setup -> additional fields: type, checked value
array("Terms and Conditions"'req|type:check_single|value:1' $_POST['terms']),
//single checkbox setup -> additional fields in rules section: type, multiple checkboxes, checked values
array("Vehicle"'req|type:check_multi|values:(Bike,Car,Plane)' $_POST['vehicle']),
// Radio button group setup -> additional fields in rules section: type, checked values
array("Gender"'req|type:radio|values:(male,female)' $_POST['gender']),
// select dropdown setup
array("How did you hear about us"'req' $_POST['how']),
//letters and text validation
array("Numbers and text"'req|alpha_digit' $_POST['numbtext']),

//custom regex setup -> add custom ALLOWED characters, if variable contains any other chars - validation will fail -> format: [^custom chars]
array("Message"'req|custom[^A-Za-z0-9-,.\r\n!?= ]' $_POST['message'])


 ); 
    

//if validation fails print error messages
if(!$validator->validate($vars)) 
{

echo 
$validator->errors;
    
    
}
//else send mail, or whatever...
else 
{
echo 
'Validation passed!<br />';    
echo 
$validator->output;    
    
}

    
}

?>
</body>
</html>
Naravno, ovo je vise vezbica, kritike samog koncepta i razrade su dobrodosle.

Poslednja izmena od sinisake : 26. 01. 2013. u 23:44.
sinisake je offline   Odgovorite uz citat