2012-02-11 5 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

당신은 01를 배치해야s 외부<label> </label> 태그! 이것은 주요 문제입니다. 또한

: 당신의 사실에 이름 속성이 없습니다 버튼을 제출 "제출"라는 입력이 없습니다

  1. . 그리고, 당신은 이미 form_validation 클래스를 사용하고 있기 때문에, 그 체크 (if input->post('submit'))는 중복됩니다;
  2. 또 다른 중복 된 것은 입력 -> 게시 메서드에 TRUE (즉, xss_cleaned)를 전달하는 것입니다. 이미 xss_clean 유효성 검사 규칙이 많으므로 그 이유는 무엇입니까? 다시 이미 값 비싼 추가 처리 유효성 검사 중에 확인을 통과 했습니까?
  3. 액티브 레코드 또는 쿼리 바인딩을 사용하는 경우 변수를 이스케이프 할 필요가 없으므로 해당 부분도 제거해야합니다.
  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 : 사용자 이름 확인을 위해 같은

, 당신은 능력이 검증 중 기능을 갖춘 것이이 CodeIgniter의의 v.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 내가 현재이 시점에서 생성하려고하는 것은 그 사용자 이름이 있는지 확인하는 검사기이다. 찍은 다음 취한 경우 오류를 다시 내뱉거나 처리하면 오류가 발생합니다. 어떻게하면 좋을까요? 나는 당신의 아주 명확한 피드백을 위해 모델을 업로드 할 것이고, 1 년 전에 찾았 으면 좋겠다. –

+0

글쎄, db :를 쿼리하기 만하면된다. 사용자 이름이 있으면 FALSE를 반환하고 (유효성 검사가 실패하면 username이 있음), 그렇지 않으면 TRUE를 반환한다. 그러나 CI를 버전> 2로 업그레이드 할 계획이라면 그저 새 설정 규칙이 있다는 것을 알게 될 것입니다. 나는 이것으로 내 대답을 업데이 트했습니다. 데이터 이스케이프에 관해서는 맞았지만, 프레임 워크에 대한 좋은 점은 작업을 쉽게한다는 것입니다 : 액티브 레코드를 사용하기 때문에 쿼리가 이미 프레임 워크에 의해 이스케이프되었습니다 –

관련 문제