2012-07-24 62 views
0

我試圖將我的第一步放入OO PHP世界。我想要做的是做一個類來驗證我的表單輸入。我知道我整個網站需要哪些輸入字段,並希望進行切換,根據輸入字段做正確的事情。假設我們有一個名爲'email'的輸入字段,並且我們有一個表單等等。我該如何做到這一點? PHP5表單驗證

首先,我想要做的是嘗試使用array_key()函數讀取$ _post名稱,基於我有一個開關。

這裏是我的代碼:

public function __construct ($var) { 
    $this->arraykeys = array_keys($var); 
    $this->error = false; 
    $this->message = array(); 
}   

public function check() { 

     foreach ($this->arraykeys as $i => $value) 
     { 

     switch ($value) 
     { 
     case 'email' : 

     $checkmail = new checkEmail($_POST); 
     $checkmail->chkEmail($_POST['email']); 
     if ($checkmail->chkEmail($_POST['email']) == false) 
     { 
      array_push($this->message, 'Cannot validate emailadres'); 
     }    
     break; 

     } 


     } 

    // print_r($this->field); 
} 

的檢查工作,但不知何故消息數組錯誤後保持爲空! 我嘗試了一切,但我無法將它展現在屏幕上!

請幫忙!

謝謝!

回答

0

試試這個:

public function check() 
{ 

     foreach ($this->arraykeys as $i => $value) 
     { 

     switch ($value) 
     { 
     case 'email' : 

     $checkmail = new checkEmail($_POST); 
     $checkmail->chkEmail($_POST['email']); 
     if ($checkmail->chkEmail($_POST['email']) == false) 
     { 
      $this->message[] = 'Cannot validate emailadres'; 
     }    
     break; 

     } 


     } 

    print_r($this->message); 
} 

還要確保你的屬性設置爲公開。

您確定$checkmail->chkEmail()變得錯誤並且運行良好嗎?

+0

嗯,據我知道PHP,這是做完全一樣的,所以我不知道它如何才能發揮作用? – hakre 2012-07-24 16:06:23

+0

@hakre我知道,但它被稱爲「檢查」的替代方法。 – 2012-07-24 16:07:25

+0

你是我的英雄!謝謝!順便說一句,因爲即時通訊新的OOP,這是做事的正確方式還是我的方式? – user1362916 2012-07-24 16:09:24

1

在你使用OOP的你確實需要有一些更基本的對象,使您能夠讓你的表單處理來住的,例如面向對象的PHP超全局範圍內的表單字段驗證錯誤消息:

只是一個例子:

// defining the interfaces and classes of the form values and validation, form field 
// and fields 
Interface FormValue 
{ 
    public function getValue(); 
} 

interface FormValueValidator 
{ 
    /** 
    * @param FormValue $value 
    * @return bool 
    */ 
    public function validate(FormValue $value); 
} 

class NamedFormValue implements FormValue 
{ 
    private $name; 
    private $value; 

    public function __construct(array $data, $name, $default = null) 
    { 
     $this->name = $name; 
     $this->value = isset($data[$name]) ? $data[$name] : $default; 
    } 

    public function getValue() 
    { 
     return $this->value; 
    } 

    public function getName() 
    { 
     return $this->name; 
    } 
} 

class EmailValidator implements FormValueValidator 
{ 
    public function validate(FormValue $value) 
    { 
     $result = filter_var((string) $value->getValue(), FILTER_VALIDATE_EMAIL); 
     return is_string($result); 
    } 
} 

class FormFieldFactory 
{ 
    /** 
    * @param $name 
    * @param array $field 
    * @return FormField 
    */ 
    public function create($name, array $field) 
    { 
     $validatorClass = sprintf('%sValidator', @$field['validator']); 
     $validator = new $validatorClass; 

     $formField = new FormField($name); 
     $formField->setValidator($validator); 
     $formField->setErrorMessage($field['error_msg']); 
     return $formField; 
    } 
} 

class FormField 
{ 
    private $name; 
    /** 
    * @var FormValueValidator 
    */ 
    private $validator; 
    private $errorMessage; 
    /** 
    * @var FormValue 
    */ 
    private $value; 

    public function __construct($name) 
    { 
     $this->name = $name; 
    } 

    public function setValidator(FormValueValidator $validator) 
    { 
     $this->validator = $validator; 
    } 

    public function isValid() 
    { 
     return $this->validator->validate($this->value); 
    } 

    public function setErrorMessage($errorMessage) 
    { 
     $this->errorMessage = $errorMessage; 
    } 


    public function getErrorMessage() { 
     return $this->errorMessage; 
    } 

    public function setValue(FormValue $value) 
    { 
     $this->value = $value; 
    } 

    /** 
    * @return FormValue 
    */ 
    public function getValue() 
    { 
     return $this->value; 
    } 
} 

class FormFields extends IteratorIterator 
{ 
    private $fieldFactory; 
    private $invalidFields; 

    public function __construct(array $definitions, $fieldFactory) 
    { 
     parent::__construct(new ArrayIterator($definitions)); 
     $this->fieldFactory = $fieldFactory; 
    } 

    public function current() 
    { 
     $name = $this->getInnerIterator()->key(); 
     $definition = $this->getInnerIterator()->current(); 
     return $this->fieldFactory->create($name, $definition); 
    } 

    public function valid() 
    { 
     return $this->getInnerIterator()->valid(); 
    } 

    /** 
    * @param array $data 
    * @return bool true on success, false on validation error 
    */ 
    public function validateOn(array $data) 
    { 
     $this->invalidFields = array(); 

     foreach($this as $name => $field) { 
      /* @var $field FormField */ 
      $value = new NamedFormValue($data, $name); 
      $field->setValue($value); 
      $valid = $field->isValid(); 
      $valid || ($this->invalidFields[$name] = $field); 
     } 

     return 0 === count($this->invalidFields); 
    } 

    /** 
    * @return FormField[] 
    */ 
    public function getInvalidFields() 
    { 
     return $this->invalidFields; 
    } 
} 

// defining the form in array notation: 
$form = array(
    'fields' => array(
     'email' => array(
      'validator' => 'Email', 
      'error_msg' => 'Cannot validate emailadress', 
     ), 
    ), 
); 

// processing the form validation 
$messages = array(); 
$fields = new FormFields($form['fields'], new FormFieldFactory()); 
$fields->validateOn($_POST) 
foreach ($fields->getInvalidFields() as $field) { 
    $messages[] = $field->getErrorMessage(); 
} 
var_dump($messages); 

輸出例:

array(1) { 
    [0]=> 
    string(27) "Cannot validate emailadress" 
} 
相關問題