2012-12-19 155 views
1

我用笨框架來創建我的Web應用程序。顯示錯誤消息

我對用戶輸入自己的用戶名和密碼,以及一個記得我複選框登錄表單。在用戶提交表單後,它使用jQuery的AJAX提交表單和後的數據發送到登錄控制器提交功能,用於數據檢查和處理。提交功能追着如果用戶登錄返回JSON數組。如果用戶在他成功登錄/她發送到儀表板,如果他們不是在成功登錄,然後會顯示錯誤消息,並且下每個用戶輸入都會將相應的消息顯示給未通過CI表單驗證規則的規則。

截至目前,它顯示一條消息,說它沒有通過驗證,但我有一個問題,弄清楚如何顯示沒有通過用戶輸入框下的驗證規則。

<div style="display:none" id="message_container"><button type="button" class="close" data-dismiss="alert">&times;</button></div> 
    <div class="login_container"> 
<?php $attributes = array('id' => 'login_form', 'class' => 'form-horizontal'); ?> 
<?php echo form_open('login/submit', $attributes); ?> 
    <div class="form-row row-fluid"> 
     <div class="spa12"> 
      <div class="row-fluid"> 
       <?php $attributes = array('class' => 'form_label span12'); ?> 
       <?php echo form_label('Username<span class="icon16 icomoon-icon-user-3 right gray marginR10"></span>', 'username', $attributes); ?> 
       <?php $attributes = array('name' => 'username', 'id' => 'username', 'value' => '', 'class' => 'span12 text valid'); ?> 
       <?php echo form_input($attributes); ?> 
      </div> 
     </div> 
    </div> 
    <div class="form-row row-fluid"> 
     <div class="span12"> 
      <div class="row-fluid"> 
       <?php $attributes = array('class' => 'form_label span12'); ?> 
       <?php echo form_label('Password<span class="icon16 icomoon-icon-locked right gray marginR10"></span><span class="forgot"><a href="#">Forgot your password?</a></span>', 'password', $attributes); ?> 
       <?php $attributes = array('name' => 'password', 'id' => 'password', 'value' => '', 'class' => 'span12 password'); ?> 
       <?php echo form_password($attributes); ?> 
      </div> 
     </div> 
    </div> 
    <div class="form-row row-fluid">      
     <div class="span12"> 
      <div class="row-fluid"> 
       <div class="form-actions"> 
        <div class="span12 controls"> 
         <input type="checkbox" id="keepLoged" value="Value" class="styled" name="logged" />Keep me logged in 
         <button type="submit" class="btn btn-info right" id="loginBtn"> 
          <span class="icon16 icomoon-icon-enter white"></span> 
          Login 
         </button> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
</form> 
</div> 


public function submit() 
{ 
    $output_status = 'Notice'; 
    $output_title = 'Not Processed'; 
    $output_message = 'The request was unprocessed!'; 

    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|callback_check_username'); 
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean'); 
    $this->form_validation->set_rules('remember', 'Remember Me', 'trim|xss_clean|integer'); 

    if ($this->form_validation->run() == TRUE) 
    { 

    } 
    else 
    { 
     $output_status = 'Error'; 
     $output_title = 'Form Not Validated'; 
     $output_message = 'The form did not validate successfully!'; 
    } 

    echo json_encode(array('output_status' => $output_status, 'output_title' => $output_title, 'output_message' => $output_message)); 
} 

public function check_username($str) 
{ 
    if (preg_match('#[0-9]#', $str) && preg_match('#[a-z]#', $str)) 
    { 
     return TRUE; 
    } 
    $this->form_validation->set_message('check_username', 'This is not have an accepted value!'); 
    return FALSE; 
} 

編輯:

「error_messages」:{ 「用戶名」: 「這是沒有一個公認的價值!」}}

由於我提交通過jQuery AJAX功能我這種形式試圖弄清楚我將如何做出我的陳述。考慮到我會有多個輸入,除非有更好的主意,否則必須放在每個文本字段下。

回答

1

如果你正在嘗試做的是錯誤信息的字符串追加到$output_message你也許可以做到這一點:

$output_message = 'The form did not validate successfully! Errors: ' . $this->form_validation->error_string(); 

可以使用設置自定義錯誤消息:

$this->form_validation->set_message('username', 'Invalid Username'); 

按照你的評論編輯,如果你想發回錯誤信息,你應該嘗試這樣:

echo json_encode(array('output_status' => $output_status, 'output_title' => $output_title, 'output_message' => $output_message, 'error_messages' => $this->form_validation->error_array())); 

,並顯示這些錯誤消息我想補充的佔位符在HTML並附加有消息

CodeIgniters Form Validation Library Source

/** 
* Get Array of Error Messages 
* 
* Returns the error messages as an array 
* 
* @return array 
*/ 
public function error_array() 
{ 
    return $this->_error_array; 
} 

如此看來,這是一個新增加的Version 3.0到來,所以現在你可以只是通過將文件您application/libraries/並將其命名爲MY_Form_validation.php內部延伸表單驗證庫和裏面放置此:

class MY_Form_validation extends CI_Form_validation { 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    /** 
    * Get Array of Error Messages 
    * 
    * Returns the error messages as an array 
    * 
    * @return array 
    */ 
    public function error_array() 
    { 
     return $this->_error_array; 
    } 
} 
+0

嗯,這是事物的輸出消息僅用於在出現錯誤時返回。我確實希望如果有錯誤讓他們特別在用戶文本字段下顯示具體的錯誤。 –

+0

@KevinSmith我已經更新了我的答案,告訴您如何將錯誤發送回您的腳本,然後您可以將消息追加到您選擇的佔位符中。 – PhearOfRayne

+0

我沒有看到表單驗證庫的error_array功能。 –