CI 묻고 답하기

제목 회원가입 중복체크 질문 드립니다.
글쓴이 책상다리 작성시각 2014/03/05 14:40:39
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 16429   RSS
 회원가입시 중복 체크를 하는데, 어제와 마찬가지로 포럼소스를 참고 하고 있습니다.

컨트롤러 부분에
$errors = $this->tank_auth->get_error_message();
foreach ($errors as $k => $v) $data['errors'][$k] = $this->lang->line($v);
요 부분이 아마 애러메세지를 출력하는 부분이 아닐까 생각합니다. 아 language 폴더에 tank_auth 넣었고, 
컨트롤러에서 $this->lang->load('tank_auth'); 도 햇습니다.

모델에선
is_userid_available
is_nickname_available
is_email_available
함수도 선언해줬습니다. 

뷰에서는 
<td style="color: red;"><?php echo form_error($userid['name']); ?><?php echo isset($errors[$userid['name']])?$errors[$userid['name']]:''; ?></td>
이런식으로 쭉 선언해줬습니다만.....

출력이 안됩니다 ㅠ
아무것도 입력하지 않았을때는 옆에 빨간글씨로 잘 뜨는거 보니까...다른 문제인거 같은데...

혹시 라이브러리의 
function get_error_message()
{
return $this->error;
}
이부분이 문제 일까요..
조금만 도움을 부탁드립니다. ㅠ
 
//컨트롤러
public function join()
{
 $this->output->enable_profiler(FALSE);
 $this->load->library('form_validation');

 //폼 검증할 필드와 규칙 사전 정의
 $this->form_validation->set_rules('id','아이디','required');
 $this->form_validation->set_rules('password','비밀번호','required');
 $this->form_validation->set_rules('chk_pwd','비밀번호체크','required');
 $this->form_validation->set_rules('name','닉네임','required');
 $this->form_validation->set_rules('email','이메일','required');

 $data['errors'] = array();

 if( $this->form_validation->run())
 {
  if (!is_null($data = $this->tank_auth->create_user(
   $this->form_validation->set_value('id'),
   $this->form_validation->set_value('password'),
   //$this->form_validation->set_value('chk_pwd'),
   $this->form_validation->set_value('name'),
   $this->form_validation->set_value('email')
   ))) {

   alert('회원 가입을 축하드립니다.','/');
   exit;
  }
  else
  {
   $errors = $this->tank_auth->get_error_message();
   foreach ($errors as $k => $v) $data['errors'][$k] = $this->lang->line($v);
  }
 }
 $this->load->view('/join/join_v', $data);
}
 
//모델
function is_userid_available($id)
 {
  $this->db->select('1', FALSE);
  $this->db->where('LOWER(username)=', strtolower($id));
  $query = $this->db->get(self::TABLE);
  return $query->num_rows() == 0;
 }
  
 function is_nickname_available($name)
 {
  $this->db->select('1', FALSE);
  $this->db->where('LOWER(name)=', strtolower($name));
  $query = $this->db->get(self::TABLE);
  return $query->num_rows() == 0;
 } 
 
 function is_email_available($email)
 {
  $this->db->select('1', FALSE);
  $this->db->where('LOWER(email)=', strtolower($email));
  //$this->db->or_where('LOWER(new_email)=', strtolower($email));
  $query = $this->db->get(self::TABLE);
  return $query->num_rows() == 0;
 } 

 function create_user($data, $activated = TRUE)
 {
  $data['reg_date'] = date('Y-m-d H:i:s');
  //$data['activated'] = $activated ? 1 : 0;

  if ($this->db->insert(self::TABLE, $data)) {
   print_r($data);
   $user_id = $this->db->insert_id();

   return array('user_id' => $user_id);
  }
  return NULL;
 }

 
 다음글 코드이그나이저 설치질문 (10)
 이전글 같은 컨트롤러안의 여러 함수 호출 (3)

댓글

변종원(웅파) / 2014/03/05 15:31:23 / 추천 0
출력이 안된다는게 무슨 말이죠?

폼검증값 복원 말씀하시는 건가요? 그렇다면 http://cikorea.net/user_guide_2.1.0/libraries/form_validation.html#repopulatingform 매뉴얼 참고하세요.

아이디 중복체크는 폼검증의 콜백함수 이용합니다.

매뉴얼에서 콜백함수 부분 보시기 바랍니다. 포럼 원본소스도 비교해보시구요.
책상다리 / 2014/03/05 15:35:27 / 추천 0
음 조금 설명이 이상했던 모양입니다. 
회원가입 할때 중복체크를 하려고 하는겁니다.
그리고 중복일 경우에 옆쪽에 이미 중복된 아이디 입니다. 뭐 이런식으로 애러메세지가 나오는거구요.

출력이 안된다는것은 중복된 아이디나 이메일을 넣었을때 옆쪽에 아무런 메세지가 나오지 않는다는 뜻이었구요.
아무것도 입력하지 않았을때는 옆쪽에 아이디를 입력해주세요. 뭐 이런식으로 뜨는걸 보니, 뷰쪽의 문제는 아닌거 같습니다만...

전체 소스를 올리자니 너무 길어질거 같아서 부분부분 올렸는데, 그래서 그런가 으으
부분적으로나마 전부 올려보겠습니다;;;

변종원(웅파) / 2014/03/05 15:50:41 / 추천 0
$this->tank_auth->create_user() 함수에서 중복체크 로직이 있는지 보세요.

중복로직이 있다면 $this->tank_auth->get_error_message() 함수로 중복되었다는 내용을 가져올테구요.

위 create_user()는 tank_auth 라이브러리에 있습니다.

책상다리 / 2014/03/05 15:55:56 / 추천 0
if ((strlen($id) > 0) AND !$this->ci->join_m->is_userid_available($id)) {
$this->error = array('username' => 'auth_userid_in_use');
 
}
elseif (!$this->ci->join_m->is_nickname_available($name)) {
$this->error = array('name' => 'auth_nickname_in_use');
}
/*else if ((strlen($username) > 0) AND !$this->ci->users->is_username_available($username)) {
$this->error = array('username' => 'auth_username_in_use');
 
} */
elseif (!$this->ci->join_m->is_email_available($email)) {
$this->error = array('email' => 'auth_email_in_use');
 
}

이렇게 라이브러리에 있습니다. 음...

function get_error_message()
{
return $this->error;
}

요것도 있습니다. 라이브러리에 ㅠㅠ
 
변종원(웅파) / 2014/03/05 16:48:59 / 추천 0
내용만 전부 입력이 되면 위 로직으로서는 당연히 통과됩니다.

create_user()함수에서 체크하고 $this->error에 담아도 그 이후 액션은 회원가입축하합니다 입니다.
매뉴얼 보시고 폼검증에서 콜백함수 적용하세요.
책상다리 / 2014/03/05 17:07:39 / 추천 0
 아....조금 알거 같습니다...하 아직도 이런거 하나 못해서야 흐...
감사합니다.