처음부터 차근차근
Form Validation 본문
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)
url로 _reduplication()메서드를 치면 404error가 나는 것을 알 수 있다.
함수명 앞에 _를 지우고 해보면
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 |