2012-02-11 32 views
0

我有一個表單不輸出任何錯誤消息我錯過了什麼嗎?不輸出表單錯誤消息

型號:

function createUser($username = NULL ,$passwordHash = NULL ,$firstname = NULL ,$lastname = NULL ,$email = NULL,$group = NULL ,$active = NULL) 
    { 
     $data = array('userName' => $username, 'userFirstName' => $firstname, 'userLastName' => $lastname, 'userEmail' => $email, 'userPassword' => sha1($passwordHash), 'userGroup' => $group, 'userActive' => $active); 

     $this->db->insert('users',$data); 

     return TRUE; 
    } 

查看:

<h1><?php echo $companyName; echo nbs(1);?> - <?php echo $pageTitle; ?></h1> 

<?php 
if($success == TRUE) { 
echo '<section id = "validation">Page Updated</section>'; 
} 
?> 
    <p>Error: <?php echo validation_errors();?> </p> 
    <div class="formContent"> 
     <form action="createUser" method="post"> 
      <fieldset class="control-group"> 
       <label for="userName">User Name: <input type="text" name="userName" value="<?php echo set_value('userName'); ?>" placeholder="User Name"></label> 
       <label for="userPassword">User Password: <input type="password" name="userPassword" value="<?php echo set_value('userPassword'); ?>" placeholder="User Password"></label> 
       <label for="userFirstName">First Name: <input type="text" name="userFirstName" value="<?php echo set_value('userFirstName'); ?>" placeholder="First Name"></label> 
       <label for="userLastName">Last Name: <input type="text" name="userLastName" value="<?php echo set_value('userLastName'); ?>" placeholder="Last Name"></label> 
       <label for="userEmail">E-Mail: <input type="text" name="userEmail" value="<?php echo set_value('userEmail'); ?>" placeholder="Admin E-mail"></label> 
       <label for="userGroup"> User Group: 
        <select name="userGroup" value="<?php echo set_value('userGroup'); ?>"> 
         <option value="select">Please Select</option> 
         <option value="admin">Admin Group</option> 
         <option value="user">User Group</option> 
        </select> 
       </label> 
       <label for="userActive"> User Active: 
         <select name="userActive" value="<?php echo set_value('userActive'); ?>"> 
          <option value="select">Please Select</option> 
          <option value="yes">Yes</option> 
          <option value="no">No</option> 
         </select> 
       </label> 
       <button type="submit" class="btn-primary">Create</button> 
       </fieldset> 
     </form> 
    </div> 

控制器:

public function index() 
    { 
     $data['companyName'] = $this->core_model->companyName(); 
     $data['success'] =""; 
     $data['pageTitle'] = "Create User"; 
     $this->load->view('admin/assets/header', $data); 
     $this->load->view('admin/createUser', $data); 
     $this->load->view('admin/assets/footer'); 

     if($this->input->post('submit')) 
     { 
       $this->form_validation->set_rules('userName', 'User Name', 'trim|required|xss_clean|callback_username_check'); 
       $this->form_validation->set_rules('userPassword', 'User Password', 'trim|required|xss_clean|sha1'); 
       $this->form_validation->set_rules('userFirstName', 'First Name', 'trim|required|xss_clean'); 
       $this->form_validation->set_rules('userLastName', 'Last Name', 'trim|required|xss_clean'); 
       $this->form_validation->set_rules('userEmail', 'E-Mail', 'trim|required|xss_clean'); 
       $this->form_validation->set_rules('userGroup', 'User Group', 'trim|required|xss_clean'); 
       $this->form_validation->set_rules('userActive', 'User Active', 'trim|required|xss_clean'); 

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

       $data['companyName'] = $this->core_model->companyName(); 
       $data['success'] =""; 
       $data['pageTitle'] = "Create User"; 
       $this->load->view('admin/assets/header', $data); 
       $this->load->view('admin/createUser', $data); 
       $this->load->view('admin/assets/footer'); 
      }else{ 

      $username = $this->input->post('userName',TRUE); 
      $password = $this->input->post('userPassword', TRUE); 
      $firstname = $this->input->post('userFirstName', TRUE); 
      $lastname = $this->input->post('userLastName',TRUE); 
      $email = $this->input->post('userEmail',TRUE); 
      $group = $this->input->post('userGroup',TRUE); 
      $active = $this->input->post('userActive', TRUE); 

      $this->db->escape($username); 
      $this->db->escape($password); 
      $this->db->escape($firstname); 
      $this->db->escape($lastname); 
      $this->db->escape($email); 
      $this->db->escape($group); 
      $this->db->escape($active); 

      $passwordHash = $this->encrypt->sha1($password); 

      if ($this->core_model->createUser($username,$passwordHash,$firstname,$lastname,$email,$group,$active)) 
      { 
       $data['success'] = TRUE; 
       $data['companyName'] = $this->core_model->companyName(); 
       $data['pageTitle'] = "Create User"; 
       $this->load->view('admin/assets/header', $data); 
       $this->load->view('admin/createUser', $data); 
       $this->load->view('admin/assets/footer'); 
      }else{ 
       $data['companyName'] = $this->core_model->companyName(); 
       $data['pageTitle'] = "Create User"; 
       $this->load->view('admin/assets/header', $data); 
       $this->load->view('admin/createUser', $data); 
       $this->load->view('admin/assets/footer'); 
      } 
     } 
     } 
    } 

     function __username_check($userName){ 
     { 
      if ($userName == $user->$userName) { 

       $this->form_validation->set_message('username_check','Sorry the chosen username %s is taken!'); 

       return false; 
      }else{ 
       return true; 
      } 

     } 

    } 

} 

/* End of file login.php */ 
/* Location: ./application/controllers/admin/createUser.php */ 

回答

2

你需要把<input> s outside the <label> </label>標籤!這是主要問題。

另外:

  1. 沒有一個名爲「提交」輸入:你的提交按鈕,其實沒有名字屬性。而且,順便說一句,既然你已經在使用form_validation類,那麼檢查(if input->post('submit'))是多餘的;
  2. 我看到的另一個多餘的事情是將TRUE(即使用xss_cleaned)傳遞給input-> post方法:您已經有了大量的xss_clean驗證規則,那麼爲什麼還要將再次傳遞給那麼昂貴的額外處理在驗證檢查過程中通過它?
  3. 旁註,如果你使用的Active Record,或查詢綁定,你沒有逃跑的變量,所以我會刪除部分太:)
  4. 我相信你對__username_check()調用將失敗:在函數,關於「callback_」驗證規則的是「username_check」;另外雙下劃線通常用於PHP中的「魔術方法」;您可以安全地刪除兩者,或者如果您確實需要函數名稱的下劃線(只有一個),則可能需要調用「callback__check_username」。
  5. 而且你三次加載相同的視圖,爲什麼?我相信你可以重寫整個指數的方法是這樣的:

    function index() 
    { 
        $this->form_validation->set_rules('userName', 'User Name', 'trim|required|xss_clean|callback_username_check'); 
        $this->form_validation->set_rules('userPassword', 'User Password', 'trim|required|xss_clean|sha1'); 
        $this->form_validation->set_rules('userFirstName', 'First Name', 'trim|required|xss_clean'); 
        $this->form_validation->set_rules('userLastName', 'Last Name', 'trim|required|xss_clean'); 
        $this->form_validation->set_rules('userEmail', 'E-Mail', 'trim|required|xss_clean'); 
        $this->form_validation->set_rules('userGroup', 'User Group', 'trim|required|xss_clean'); 
        $this->form_validation->set_rules('userActive', 'User Active', 'trim|required|xss_clean'); 
    
        if ($this->form_validation->run() == FALSE) { 
    
         $data['success'] =""; 
    
        }else{ 
    
         $username = $this->input->post('userName'); 
         $password = $this->input->post('userPassword'); 
         $firstname = $this->input->post('userFirstName'); 
         $lastname = $this->input->post('userLastName'); 
         $email = $this->input->post('userEmail'); 
         $group = $this->input->post('userGroup'); 
         $active = $this->input->post('userActive'); 
         $passwordHash = $this->encrypt->sha1($password); 
    
         if ($this->core_model->createUser($username,$passwordHash,$firstname,$lastname,$email,$group,$active)) 
         { 
          $data['success'] = TRUE; 
    
         }  
        } 
        $data['companyName'] = $this->core_model->companyName(); 
        $data['pageTitle'] = "Create User"; 
        $this->load->view('admin/assets/header', $data); 
        $this->load->view('admin/createUser', $data); 
        $this->load->view('admin/assets/footer'); 
    } 
    

UPDATE:

爲用戶名檢查,因爲笨的2.0版你有能力驗證中精選規則:如果您放置了is_unique規則,實際上它會自動查詢數據庫以檢查該規則。語法是:

is_unique[table.field] 

在你的情況,可能是

$this->form_validation->set_rules('userName', 'User Name', 'trim|required|is_unique[users.userName]|xss_clean'); 
+0

太感謝你了達米安,我是立足一個網站的驗證碼,我不得不建立一個文憑我沒有和我可以現在看到我已經花了很多時間,然後我應該有代碼寫作 - >我們在哪裏告訴要逃避所有數據等等。RE:4我現在想創建的是一個檢查器,檢查用戶名是否有被採取,然後吐出一個錯誤,如果它被採取或處理,如果它確定。我將如何做到這一點?我會上傳模型以獲得非常明確的反饋,希望我在一年前找到您。 – 2012-02-12 02:55:34

+0

那麼,你只需要查詢數據庫:如果用戶名存在,返回FALSE(驗證失敗:用戶名存在),否則返回TRUE(驗證通過)。但是:如果你願意將你的CI升級到大於2的版本,你會注意到有一個新的驗證規則可以做到這一點。我已經用這個更新了我的答案。至於轉義數據,你被告知是正確的,但關於框架的好處是他們可以減輕你的工作量:因爲你使用的是Active Record,所以你的查詢已經被框架轉義了 – 2012-02-12 08:41:36