처음부터 차근차근

Form Validation 본문

Framework/CodeIgniter

Form Validation

_soyoung 2021. 10. 17. 18:05
반응형
Form validation

 

Form validation이란, 데이터의 유효성을 검사하는 것이다.

CodeIgniter에는 formvalidation 라이브러리가 있고, 이 라이브러리를 로드해서 사용하면 form에 의해 함수로 전달된 데이터들의 유효성을 검사할 수 있다.

 

 

 

Form validation 라이브러리 로드
$this->load->library('form_validation');

 

 

 

유효성 체크

 

아래는 입력된 데이터가 유효한지 체크하는 코드이다.

$this->form_validation->set_rules('필드이름', '사람이 알아보기 쉬운 이름', '검사규칙');

 

유효성을 체크하는 코드는 반드시 form validation 라이브러리를 로드한 후 써야한다.

필드이름 : form에서 name에 해당하는 것을 넣어야한다.

사람이 알아보기 쉬운 이름 : 데이터가 유효하지 않을 때 화면에 출력할 이름. 

검사 규칙 : 

  • required - 반드시 값을 넣어야함
  • min_length[2] - 2보다 작은 값을 넣으면 안됨
  • max_length[10] - 10보다 큰 값을 넣으면 안됨
  • maches[필드이름] - 필드이름과 일치해야 값이 함
  • valid_email - email 양식에 충족해야함   ex) aaa@gamail.com

검사 규칙을 2개 이상 적을 때는 | 를 사용해서 한 번에 적는다.

 

예시)

$this->form_validation->set_rules('title', '제목', 'required|min_length[2]|max_length[20]');
$this->form_validation->set_rules('content', '내용', 'required');

 

 

 

유효하지 않은 데이터 출력

 

아래는 유효성 검사를 한 후 어느 필드의 데이터가 유효하지 않았는지 출력해주는 코드이다.

<?php echo validation_errors(); ?>

이 코드를 쓰면 화면에 어느 곳이 잘못됐나 출력해준다.

 

예시)

코드
결과

 

 

 

유효성 검사 실행

 

아래는 유효성 검사를 실행시킨 후 데이터가 유효한지(값이 조건에 맞게 잘 들어왔는지)에 대한 답을 리턴하는 코드이다.

$this->form_validation->run();

유효성 검사를 했을 때 데이터가 유효하면 true가 나오고, 데이터가 유효하지 않았다면 false가 나온다.

보통 아래와 같이 응용해서 사용한다.

if ($this->form_validation->run() == FALSE) {
    $this->load->view('add');
}
else {
    echo '데이터가 잘 입력됐습니다.';
}

 

 

 

 

set 함수

 

db에 새로운 내용을 insert()메서드를 이용하여 삽입할 때 현재 날짜(시간)을 넣고 싶을 때가 있다.

그러면 now() 함수를 이용하여 현재 시간을 직접 넣으면 된다.

하지만 now() 함수를 그대로 넣게 될 시 now() 메서드가 문자로 처리되어서 값이 제대로 들어가지 않는다.

이럴 때 사용하는 방법이 db 객체의 set()메서드다.

 

$this->db->set();

이 함수는 입력(insert) 혹은 업데이트(update)시 값을 설정하는 함수이다.

 

예제)

$this->db->set('name', $name);
$this->db->set('age', $age);
$this->db->insert('myTable');

 

set 함수는 세번째 매개변수도 받을 수 있는데, 세번 째 매개변수는 bool형 값을 넣어야한다.

false를 넣은면 쿼리를 자동으로 이스케이프 하지않는다.

즉, 자동으로 문자로 만들지 않는다는 얘기다.

php에서 쿼리를 작성하면 쿼리를 실행할 때 자동으로 문자열로 만들어 실행한다.

그 자동으로 문자열 만드는 것을 pass하겠다는 말이다.

 

즉, 처음에 말했던 now() 함수 문제는 아래와 같이 해결하면 된다.

$this->db->set('writetime', 'now()', false);
$this->db->insert('myTable');

 

 

 

 

마지막 id 알아내기

 

$this->db->insert_id();

이 함수를 사용하면 마지막으로 삽입한 id값을 가져올 수 있다.

 

 

 

 

Helper : redirect

 

helper 중에 redirect라는 함수가 있다.

이 함수는 말 그대로 현재 페이지에서 다른 페이지로 이동시켜주는(redirect) 역할을 한다.

 

이 redirect를 사용하려면 먼저 helper를 먼저 로드해줘야한다.

그 다음 redirect함수를 사용한다.

$this->load->helper('url'); // url 관련 헬퍼 로드
redirect('아이피주소/index.php 뺀 url');

 

 

 

 

form validation 총정리 예제

 

$this->load->library('form_validation');

$this->form_validation->set_rules('title', '제목', 'required|min_length[2]|max_length[20]');
$this->form_validation->set_rules('content', '내용', 'required');

if ($this->form_validation->run() == FALSE) {
    $this->load->view('add');
}
else {
    $language_id = $this->page->add($this->input->post('title'), $this->input->post('content'));
    $this->load->helper('url'); // url 관련 헬퍼 로드
    redirect('/page/category/'.$language_id);
}

 

 

 

 

url routing으로 요청하지 못하는 함수 만들기

 

controller내의 함수명 앞에 _를 적으면(_함수이름) url routing에 대해 private한 함수가 만들어진다.

즉, 사용자가 url에다가 controller명/함수명 이렇게 치고 들어와도 화면상에 표시가 되지 않는다.

 

ex)

_reduplication()
결과

url로 _reduplication()메서드를 치면 404error가 나는 것을 알 수 있다.

 

함수명 앞에 _를 지우고 해보면

reduplication()
결과

404 error가 나지 않는다.

 

 

 

 

 

 

 

출처 : 'CodeIgniter - 생활코딩' 변형 및 요약

반응형

'Framework > CodeIgniter' 카테고리의 다른 글

로그  (0) 2021.10.26
CodeIgniter 설정  (0) 2021.10.25
Helper  (0) 2021.10.13
URI 매핑 변경하기  (0) 2021.10.12
Bootstrap  (0) 2021.10.10
Comments