2012-02-15 31 views
-1

我只是有一個快速的問題:驗證不停止數據和功能不斷插入

在下面的功能我想if the username is taken return the error return false but if it doesn't exist return true and continue我不認爲我有我的T/F以正確的順序。

public function username_check($username) 
    { 
     if($username == TRUE) 
     { 
      $this->form_validation->set_message('username_check','Sorry the username %s is already taken!'); 
      return true; 
     }else{ 
      return FALSE; 
     } 
    } 

更新:

我有湯姆斯代碼工作正常,但我現在有這一個問題似乎回調不工作,它只是通過它不斷將用戶添加到數據庫中,即使已經存在!

查看:

<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:</label><input type="text" id="userName" name="userName" value="<?php echo set_value('userName'); ?>" placeholder="User Name"> 
       <label for="userPassword">User Password:</label><input type="password" id="userPassword" name="userPassword" placeholder="User Password"> 
       <label for="userFirstName">First Name:</label><input type="text" id="userFirstName" name="userFirstName" value="<?php echo set_value('userFirstName'); ?>" placeholder="First Name"> 
       <label for="userLastName">Last Name:</label><input type="text" id="userLastName" name="userLastName" value="<?php echo set_value('userLastName'); ?>" placeholder="Last Name"> 
       <label for="userEmail">E-Mail:</label> <input type="text" id="userEmail" name="userEmail" value="<?php echo set_value('userEmail'); ?>" placeholder="Admin E-mail"> 
       <label for="userGroup"> User Group:</label> 
        <select name="userGroup" id="userGroup"> 
         <option value="select"<?=(set_value('userGroup')=='select')?' selected="selected" ':''?>>Please Select</option> 
         <option value="admin" <?=(set_value('userGroup')=='admin')?' selected="selected" ':''?>>Admin</option> 
         <option value="user" <?=(set_value('userGroup')=='user')?' selected="selected" ':''?>>User</option> 
        </select> 
       <label for="userActive"> User Active:</label> 
         <select name="userActive" id="userActive"> 
          <option value="select" <?=(set_value('userActive')=='select')?' selected="selected" ':''?>>Please Select</option> 
          <option value="yes" <?=(set_value('userActive')=='yes')?' selected="selected" ':''?>>Yes</option> 
          <option value="no" <?=(set_value('userActive')=='no')?' selected="selected" ':''?>>No</option> 
         </select> 
       <div> 
        <button type="submit" class="btn-primary">Create</button> 
       </div> 
       </fieldset> 
     </form> 
    </div> 

控制器:

public function index() 
    { 
     //Form Validation prep making sure its all clean 

     $this->form_validation->set_rules('userName', 'User Name', 'trim|required|callback_username_check|xss_clean'); 
     $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 form validation fails load previous page with errors else do the job and insert data into db 

     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); // Lets encrypt the password why sha1? MD5 is for tossers 

      // If the data is correct follow through with db insert 

      if($this->users_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'); 
    } 

    public function username_check($username) 
    { 
     if($this->users_model->username_taken($username)) 
     { 
      $this->form_validation->set_message('username_check', 'Sorry the username %s is taken!'); 
      return TRUE; 
     }else{ 
      return FALSE; 
     } 
    } 

型號:

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; 
} 

function username_taken($username) 
{ 
    $this->db->select('userName'); 
    $this->db->from('users'); 
    $this->db->where('userName', $username); 
    $query = $this->db->get(); 

    if($query->num_rows() > 0) 
    { 
     return TRUE; 
    }else{ 
     return FALSE; 
    } 
+0

在你的'if'是否意味着檢查變量'$ username'是否已經傳遞給函數?或者'$ username'是否等於*'TRUE'?因爲你實際檢查的是後者。 – 2012-02-15 23:26:59

+0

'return true and continue'?你不能這樣做,你能嗎?我的意思是從一個函數返回並且在該函數內繼續...... – 2012-02-15 23:26:59

+1

現在你正在檢查'$ username'是否被設置爲'true'。我猜你想要做的是詢問你的數據庫是否存在用戶名。此外,這看起來像CodeIgniter的回調。如果是這種情況,你應該命名你的函數'_username_check',使其無法通過GET請求訪問。 – kba 2012-02-15 23:27:09

回答

3

你的問題現在得到是因爲您同時使用get('users')from('users')。您應該使用兩種:

$this->db->select('userName'); 
$this->db->from('users'); 
$this->db->where('userName', $username); 
$query = $this->db->get(); 

或者:

$this->db->select('userName'); 
$this->db->where('userName', $username); 
$query = $this->db->get('users'); 

更新:得到它的工作,你的代碼應該是這樣的:

控制器:

public function index() 
{ 
    $this->form_validation->set_rules('userName', 'User Name', 'trim|required|callback_username_check|xss_clean'); 

    // Etc 
} 

public function username_check($username) 
{ 
    if($this->users_model->username_taken($username)) 
    { 
    $this->form_validation->set_message('username_check', 'Sorry the username %s is taken!'); 
    return FALSE; 
    } 
    else 
    { 
    return TRUE; 
    } 
} 

型號:

function username_taken($username) 
{ 
    $this->db->where('userName', $username); 
    return $this->db->count_all_results('users') > 0; 
} 
+0

現在我真的很困惑,現在看到http://stackoverflow.com/questions/9288142/controller-form-doing-strange-things-when-content-is-實施 – 2012-02-16 02:23:57

+0

嗯,所以'is_unique'不起作用?你在其他問題中的代碼看起來不錯,所以我不知道那裏發生了什麼。在這種情況下,堅持湯姆的回答,並用我上面提出的建議更新模型中的'username_taken'函數。 – Mischa 2012-02-16 03:06:22

+0

嘿,我剛剛嘗試過你的第一個查詢,並得到mysql_num_rows()期望參數1是資源,給定的對象。後一個查詢給出了上述錯誤。 – 2012-02-16 03:14:24