2014-01-08 148 views
-1

我正在開發一個使用php進行驗證的簡單註冊表單。問題不在於屏幕上的驗證迴應,一旦我點擊提交按鈕,沒有任何事情發生,沒有錯誤或剎車它不會顯示我錯誤是什麼,我相信我的邏輯是正確的,但我相信可能有錯誤。php驗證不起作用

將我並欣賞的問題任何意見或識別

register.php

<?php 
require_once 'core/init.php'; 

if(Input::exists()) { 
    $validate = new Validate(); 
    $validation = $validate->check($_POST, array(
     'username' => array(
      'required' => true, 
      'min' => 2, 
      'max' => 20, 
      'unique' => 'users' 
     ), 
     'password' => array(
      'required' => true, 
      'min' => 6 
     ), 
     'password_again' => array(
      'required' => true, 
      'matches' => 'password' 
     ), 
     'name' => array(
      'required' => true, 
      'min' => 2, 
      'max' => 50 
     ), 
    )); 

    if($validation->passed()) { 
     echo 'Passed'; 
    } else { 
      print_r($validation->errors()); 
    } 

} 
?> 

<form action="" methord="post"> 
    <div class="field"> 
     <lable for="username">Username</lable> 
     <input type="text" name="username" id="username" value="<?php echo escape(Input::get('username')); ?>" autocomplete="off"> 
    </div> 

    <div class="field"> 
     <lable for="password">Choose Your Password</lable> 
     <input type="password" name="password" id="password"> 
    </div> 

    <div class="field"> 
     <lable for="password_again">Verify Password</lable> 
     <input type="password" name="password_again" id="password_again"> 
    </div> 

    <div class="field"> 
     <lable for="name">Your Name</lable> 
     <input type="text" name="name" value="<?php echo escape (Input::get('name')); ?>" id="name"> 
    </div> 

    <input type="submit" value="Register"> 
</form> 

Validation.php

<?php 
class Validate { 
    private $_passed = false, 
      $_errors = array(), 
      $_db = null; 

    public function __contruct() { 
     $this->_db = DB::getInstance(); 
    } 

    public function check($source, $items = array()) { 
     foreach($items as $item => $rules) { 
      foreach($rules as $rule => $rule_value) { 

       $value = $source[$item]; 

       if($rule == 'required' && empty($value)) { 
        $this->addError("{$item} is required") 
       } else { 

       } 

      } 
     } 

     if(empty($this->_errors)) { 
      $this->_passed = true; 
     } 

     return $this; 
    } 

    private function addError() { 
     $this->_errors[] = $error; 
    } 

    public function errors() { 
     return $this->_errors; 
    } 

    public function passed() { 
     return $this->_passed; 
    } 
} 

UPDATE

糾正了@PeteR正確指出的排字錯誤,但仍然存在回顯驗證未打印出來的問題。

鏈接,形成

http://stuweb.cms.gre.ac.uk/~ob219/membership/register.php

+0

//打開錯誤報告以查看發生了什麼ini_set('display_errors',1); error_reporting(E_ALL); – Mubo

+1

@Mubo好感謝偉大的想法,金正日給它一個去 – Beep

回答

2

看起來你有一個錯字,小夥子。

if($rule == 'requierd' && empty($value)) { 

你也有一個分號缺少在這裏:

$this->addError("{$item} is required"); 
            ----^ 

而另一錯字:

<form action="" methord="post"> 

應該是方法......

最後,試試這個:

private function addError($error) { 
+0

前,可我除C後...歡呼@PeteR總是簡單的東西。 – Beep

+0

要麼是這樣,要麼你就像我一樣 - 打字時就是廢話! :) –

+0

拼寫錯誤已更正。不幸的是,打印的回聲傳遞或告訴用戶錯過了什麼字段仍然沒有顯示出來。 – Beep

1
Input::exists() 

返回false/null或包含錯誤,因此,if語句不true

if(Input::exists()) { 

和它的(驗證)中的代碼不會永遠不會得到執行。

調試與

print_r(Input::exists()); 

你也應該改變你如果到實際情況:

if(Input::exists() === true) { 

啓用PHP錯誤報告(從http://blog.flowl.info/2013/enable-display-php-errors/

<?php 
// Put these lines to the top of your script 
error_reporting(E_ALL); 
ini_set('display_errors', true); 
ini_set('display_startup_errors', true); 
ini_set('xmlrpc_errors', true); 

更新 - 然而,另一個:

private function addError() { 
    $this->_errors[] = $error; 
} 

方法沒有參數..

private function addError($error) { 
    $this->_errors[] = $error; 
} 
+0

好的建議,謝謝香港專業教育學院不使用調試的這種形式之前已經幫助了很多。 – Beep