انجمن عمومی گسترش فناوری آگو
ساخت کلاس validation با php - نسخه‌ی قابل چاپ

+- انجمن عمومی گسترش فناوری آگو (http://forums.ago.ir)
+-- انجمن: انجمن های عمومی گسترش فناوری آگو (/forumdisplay.php?fid=1)
+--- انجمن: برنامه نویسی (/forumdisplay.php?fid=13)
+--- موضوع: ساخت کلاس validation با php (/showthread.php?tid=2087)



ساخت کلاس validation با php - agotd - 02-06-2013 02:25 PM

بی شک یکی از مشکلات برنامه نویسان Valid کردن اطلاعات ورودی هست . معمولا هم ما با استفاده از IF ... ELSE کار خودمونو راه می ندازیم. اما بهتره از Strategy Pattern استفاده بشه . بی شک به شما خیلی بیشتر کمک می کنه . برنامه هم خانایی بیشتری پیدا می کنه .
بهتره بریم سر اصل مطلب .

validator.php

کد php:
<?php
/**
 *  کلاس اصلی
 */
class Validator {
    
/**
    * Private
    * $errorMsg نگهداری خطا ها در صورت وجود
    */
    
var $errorMsg;
    
//! A constructor.
    /**
    * ساخت یک شی validator جدید
    */
    
function Validator () {
        
$this->errorMsg=array();
        
$this->validate();
    }
    
/**
    * @return void
    */
    
function validate() {
        
    }
    
/**
    * اضافه کردن خطا به آرایه
    * @return void
    */
    
function setError ($msg) {
        
$this->errorMsg[]=$msg;
    }
    
/**
    * بازگشت درست و غلط 
    * @return boolean
    */
    
function isValid () {
        if ( isset (
$this->errorMsg) ) {
            return 
false;
        } else {
            return 
true;
        }
    }
    
/**
    *  بدست آوردن خطا ها
    * @return string
    */
    
function getError () {
        return 
array_pop($this->errorMsg);
    }
}
/**
 *valid کردن username
 */
class ValidateUser extends Validator {
    
/**
    * $user متغیر مورد نیاز
    */
    
var $user;
    
/**
    * اخت یک شی validatoruser جدید
    * @param $user the string to validate
    */
    
function ValidateUser ($user) {
        
$this->user=$user;
        
Validator::Validator();
    }
    
/**
    * Validates کردن username
    * @return void
    */
    
function validate() {
        if (!
preg_match('/^[a-zA-Z0-9_]+$/',$this->user )) {
            
$this->setError('Username contains invalid characters');
        }
        if (
strlen($this->user) < ) {
            
$this->setError('Username is too short');
        }
        if (
strlen($this->user) > 20 ) {
            
$this->setError('Username is too long');
        }
    }
}
/**
 *  Validate کردن  password
 */
class ValidatePassword extends Validator {
    
/**
    * $pass متغیر مورد نیاز
    */
    
var $pass;
    
/**
    * $conf متغیر تکرار کلمه عبور
    */
    
var $conf;
    
/**
    * ساخت ValidatePassword شی جدید
    * @param $pass the string to validate
    * @param $conf to compare with $pass for confirmation
    */
    
function ValidatePassword ($pass,$conf) {
        
$this->pass=$pass;
        
$this->conf=$conf;
        
Validator::Validator();
    }
    
/**
    * Validates کردن  password
    * @return void
    */
    
function validate() {
        if (
$this->pass!=$this->conf) {
            
$this->setError('Passwords do not match');
        }
        if (!
preg_match('/^[a-zA-Z0-9_]+$/',$this->pass )) {
            
$this->setError('Password contains invalid characters');
        }
        if (
strlen($this->pass) < ) {
            
$this->setError('Password is too short');
        }
        if (
strlen($this->pass) > 20 ) {
            
$this->setError('Password is too long');
        }
    }
}
/**
 *  Validates کردن email address
 */
class ValidateEmail extends Validator {
    
/**
    * $email متغیر مورد نیاز
    */
    
var $email;
    
/**
    * جدید ValidateEmail ساخت شی
    * @param $email the string to validate
    */
    
function ValidateEmail ($email){
        
$this->email=$email;
        
Validator::Validator();
    }
    
/**
    * Validates کردن email address
    * @return void
    */
    
function validate() {
        
$pattern=
    
"/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+/";
        if(!
preg_match($pattern,$this->email)){
            
$this->setError('Invalid email address');
        }
        if (
strlen($this->email)>100){
            
$this->setError('Address is too long');
        }
    }
}
?>

index.php

کد php:
<?php
if ( $_POST['register'] ) {
    require_once(
'lib/Validator.php');
    
$v['u']=new ValidateUser($_POST['user']);
    
$v['p']=new ValidatePassword($_POST['pass'],$_POST['conf']);
    
$v['e']=new ValidateEmail($_POST['email']);
    foreach(
$v as $validator) {
        if (!
$validator->isValid()) {
            while (
$error=$validator->getError()) {
                
$errorMsg.="<li>".$error."</li>\n";
            }
        }
    }
    if (isset(
$errorMsg)) {
        print (
"<p>There were errors:<ul>\n".$errorMsg."</ul>");
    } else {
        print (
'<h2>Form Valid!</h2>');
    }
} else {
?>
<h2>Create New Account</h2>
<form action="<?php echo ($_SERVER['PHP_SELF']); ?>" method="post">
<p>Username: <input type="text" name="user"></p>
<p>Password: <input type="password" name="pass"></p>
<p>Confirm: <input type="password" name="conf"></p>
<p>Email: <input type="text" name="email"></p>
<p><input type="submit" name="register" value=" Register "></p>
</form>
<?php
}
?>