CI 묻고 답하기

제목 폼검증 에러를 요렇게 처리는 안될까요
글쓴이 밥아저씨 작성시각 2012/07/19 10:48:23
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 18670   RSS
if ($this->form_validation->run('write') == FALSE)
{
 echo '실패';
 echo validation_errors();
 echo form_error('author');
 echo form_error('title');
}
config 에 array로 설정값 넣었습니다.
일반 웹 페이지 작업이 아니라
xml로 바로 뽑아내야 해서요
저런 식으로 작업을 할 수 없을까요?

코드상에서는 에러로 빠지기는하는데
내용은 아무것도 출력되지 않네요
 다음글 layout 질문드립니다. (1)
 이전글 한글 쿼리시 한글이 깨진체로 실행? (2)

댓글

변종원(웅파) / 2012/07/19 11:08:47 / 추천 0
폼 처음 접속하면 아무 것도 안나오는게 당연할거구요.

필수 필드를 입력 안하고 폼 전송을 했는데도 아무 것도 안나온다는 말씀인가요?

full 소스를 올려주세요
밥아저씨 / 2012/07/19 12:12:08 / 추천 0
해결 되었습니다.

테스트 페이지에서 폼 내용을 옳바르지 않게 전송시켜주면
에러 내용이 출력되는데.
컨트롤러에 그냥 접속을 하면 required 항목이 있어도
에러 출력을 안해주는군요.

웅파님 감사합니다.
그런데 -_-; 왜 이럴까요
아마도 empty냐 null이냐로 구분을 할꺼라고 예상은 해봅니다.



밑에 내용은 무시하셔도 됩니다.




// config 폴더내에 form_validation.php 파일 내용 일부분
array('field' => 'title', 'label' => 'TITLE', 'rules' => 'required|min_length[1]|max_length[40]|xss_clean')




public function write()
{
 if ($this->form_validation->run('write') == TRUE)
 {
  echo '검증 실패';
  echo form_error('title');
 }
 else
 {
  echo '검증 성공';
 }
}

따로 풀 소스라 할것은 없고요
따로 폼 전송 안하고 바로 컨트롤러에 접속하면
required 만족이 안되기 때문에 당연히 전송된 내용이 없기에 FALSE가 뜨는것은 맞는데
오류 내용은 안나오네요.
따로 view페이지 작업은 안합니다.

예전에는 어느 부분이 잘못됐는지 세세하게 알려주지 못했고
그냥 입력값만 잘못됐다고 알려줬거든요
그런데 세세하게 알려줄 필요가 있는거 같아
테스트로 한번 해보는 중입니다.
milosz / 2012/07/19 12:29:48 / 추천 0
폼 전송 없이 바로 접속했을 때 에러가 나지 않는게 정상적인 상태입니다.
또한 form_error()와 같은 function은 view에서만 사용 가능합니다.
 
자세한 내용은 메뉴얼을 참고하세요 ^^
 
 
변종원(웅파) / 2012/07/19 12:51:55 / 추천 0
폼검증은 폼 전송이 일어나야 체크가 되는 부분입니다.

컨트롤러단에서만 처리하시려면 폼검증 라이브러리 쓰지 마시고 값 체크 하시면 됩니다.
밥아저씨 / 2012/07/19 15:04:39 / 추천 0
 milosz // 감사합니다.
음... 그런데 저는 현재 폼 전송이 되면
컨트롤러 내에서도 form_error() 함수는 사용이 됩니다.

웅파 // 그런데 폼 검증 라이브러리는 너무 편해서
버릴수가 없네욥 ㅠ.ㅠ
폼을 전송하기는 합니다. 다만, 안드로이드 휴대폰에서...
웹 서버 연동하는 앱을 만드는중입니다 ^^;
한대승(불의회상) / 2012/07/19 15:24:34 / 추천 0
웹브라우져든 스마트폰이든 일단 값을  POST방식으로 넘겨야만 에러 처리가 가능 합니다.
 XML 연동용으로 만들때 에러 처리 부분을  요렇게 햇는데..

참고 하세요..

 if ($this->form_validation->run() === TRUE) {
  // 정상 처리용 코드
 } else {
  // 에러 처리용 코드
  foreach(explode("\n", strip_tags(validation_errors())) as $err) {
   if(strstr($err, 'email')) { 
    $_data['responseCode'] = 'MA02_0003'; 
    break;
   } else
   if(strstr($err, 'password')) { 
    $_data['responseCode'] = 'MA02_0004';
    break;
   } else
   if(strstr($err, 'firstname')) { 
    $_data['responseCode'] = 'MA02_0005';
    break;
   } else
   if(strstr($err, 'lastname')) { 
    $_data['responseCode'] = 'MA02_0006';
    break;
   } else
   if(strstr($err, 'cell')) { 
    $_data['responseCode'] = 'MA02_0007';
    break;
   } else {
    $_data['responseCode'] = 'MA02_0001';
   }
  }
 }

밥아저씨 / 2012/07/19 15:52:37 / 추천 0
불의회상 // 좋은 팁 감사합니다.
foreach 부분 라이브러리로
만들어서 사용해도 좋겠네요