====== 개요 ====== * CodeIgniter를 이용하여 간단하게 조회,입력,수정,삭제가 가능한 페이지를 만들어 보겠습니다. CodeIgniter에서 지원하는 MVC 패턴을 따르도록 하겠습니다. ====== 설치 ====== * 설치 파일 다운로드 : CI는 현재(2011년 08월) V2.0.2 버전 까지 나와 있으며 http://codeigniter.com/downloads/ 사이트에서 다운로드 가능합니다. 이전 버전들도 다운 가능합니다. * CodeIgniter_2.0.2.zip 파일을 다운 받으셨으면 웹서버 저장 경로에 압축을 풀고 저장하시면 됩니다. * 코드이그나이터는 독립적이라 다른 프로그램 설치가 필요 없이 PHP 웹서버 안에 압축을 풀어 주시면 됩니다. * 제대로 설치 하시고 웹에 접을 했을 때 아래와 같은 화면이 뜹니다. {{:software:1-1.jpg?200 |}} ====== 설정 ====== * 아래 설정 중 필 수 적인 것은 없습니다. 상황과 편의를 위해서 한 것이기 때문에 자신에게 맞게 더 설정하거나 변경하셔야 합니다. ===== DATABASE 설정 ===== * database.php 파일을 설정합니다. * application\config 폴더 안에 있습니다. * $db['default']['hostname'] = 'localhost'; * hostname을 입력합니다. 웹서버와 DB가 같은 서버에 있으면 localhost를 입력합니다. * $db['default']['username'] = 'bearcho'; * DB 계정 명을 입력합니다. * $db['default']['password'] = 'password'; * DB 계정 암호를 입력합니다. * $db['default']['database'] = 'bearchodb'; * 사용되는 database를 입력합니다. * $db['default']['dbdriver'] = 'mysql'; * DB driver를 선택합니다. * $db['default']['char_set'] = 'utf8'; * DB 케릭터셋을 선택합니다. * $db['default']['dbcollat'] = 'utf8_general_ci'; * DB 콜레션을 선택합니다. ===== AUTOLOAD 설정 ===== * autoload.php 파일은 application\config 있습니다. * $autoload['libraries'] = array() 를 $autoload['libraries'] = array('database') 로 바꿔 줍니다. * 위와 같이 설정을 하게 되면 페이지 마다 db connection을 할 필요가 없이 자동으로 연결이 됩니다. ===== CONFIG 설정 ===== * config.php 파일은 application/config 있습니다. * $config['index_page'] = 'index.php' 를 $config['index_page'] = '' 로 바꾸어 줍니다. * 위 index_page 설정은 controller가 페이지 이동할 때도 컨트롤러 앞에 자동으로 index.php 페이지를 붙여 준다는 것입니다. * 주소창에 index.php 항상보이면 보기 안좋기 때문에 뺍니다. 대신 .htaccess로 index.php 를 주소창에 보이지 않지만 가장 먼저 접근 하는 페이지로 설정 할 겁니다. ===== INDEX 설정 ===== * index.php 파일은 웹서버 가장 상위에 있습니다. * INDEX 파일은 CodeIgniter의 동작 중 가장 기초인 routing을 합니다. * $routing['controller'] = '' 를 $routing['controller'] = 'blog' 로 변경합니다. * 위에 작업은 index.php 페이지가 가장 먼저 routing 할 컨트롤러를 선택하는 설정입니다. ===== .htaccess 설정 ===== * .htaccess 파일을 상위에 생성 해줍니다. * rewriteEngine on * RewriteCond $1 !^(index\.php|images|robots\.txt) * RewriteRule ^(.*)$ /index.php/$1 [L] * 위 내용을 쓰고 저장합니다. 위 설정은 주소로 접을 했을 때 가장 먼저 index.php 파일을 읽는 다는 것이고 주소창에는 index.php가 보이지 않습니다. * config 설정과 .htaccess 설정은 주소창을 깔끔하게 보이기 위한 것이지 꼭 필요한 설정은 아닙니다. ====== 활용 ====== 테스트에서 DB는 Mysql을 사용했고 test란 테이블을 하나 만들었습니다. 테이블에 Id int(11)autoincrease, title varchar(255), contents text란 컬럼이있습니다. 이제 test 테이블에 데이터를 쓰고, 읽고 , 수정, 삭제 하는 간단한 프로그램을 만들어 보도록 하겠습니다. ===== 단계1 ===== * blog.php 를 application\controllers 에 생성하고 아래와 같은 소스를 넣습니다. class Blog extends CI_Controller { public function index() { echo "hello codeigniter"; } } * 그렇게 작성하고 웹페이지 접근하면 아래와 같은 페이지가 나옵니다. (ex: http://127.0.0.1) {{:software:3-1.jpg?nolink&200|}} * 위는 컨트롤러를 설정한 것으로 index()는 기본적으로 가장 먼저 실행되는 함수 입니다. * 이제 컨트롤러 안에 아래와 같은 내용을 삽입합니다. load->helper('url'); /*url helper 입니다. form기능을 좀더 쉽게 만들어 줍니다.*/ $this->load->helper('form'); } /*index 메소드 입니다. 특정 메소드가 없으면 호출되는 함수 입니다.*/ public function index() { /* models 폴더에서 test.php 모델을 호출합니다. */ $this->load->model('test'); /* data 배열의 query란 이름으로 test 모델에서 가져온 엔트리 값을 넣어 줍니다*/ $data['query'] = $this->test->all_entries(); /*main이라는 뷰 즉 main.php를 views 폴더에서 호출합니다. $data 배열도 같이 보냅니다.*/ $this->load->view('main',$data); } /* wirte 메소드 입니다. write 메소드는 글을 입력 할때 사용하는 메소드입니다.*/ public function write() { /*views 폴더에 write.php 페이지를 호출합니다.*/ $this->load->view('write'); } /* update 입니다. 글을 수정을 할때 사용하는 페이지 입니다.*/ public function update() { /* get_where 함수와 3번째 세그번트 값을 이용하여 test 테이블의 특정 id 데이터만 가지고 옵니다. 간단한 데이터를 위처럼 모델을 사용하지 않고 바로 호출하는게 더 간단 할 수 있습니다.*/ $data['query'] = $this->db->get_where('test',array('id' => $this->uri->segment(3))); /* views 폴더의 update.php 파일을 호출합니다. */ $this->load->view('update',$data); } /* delete 입니다. 특정 id 번호를 삭제 합니다.*/ public function delete() { /*실제로 파일을 삭제 하는 부분입니다. delete를 이용하여 3번째 세그번트의 id 값을 삭제 합니다.*/ $this->db->delete('test',array('id' => $this->uri->segment(3))); /*삭제 후에 자동으로 가는 페이지 입니다.*/ redirect('blog/index/'); } /* 글을 쓴 data를 insert합니다. write.php 에서 데이터를 보내면 데이터를 입력합니다.*/ public function data_insert() { /* models 폴더에서 test.php 모델을 호출합니다. */ $this->load->model('test'); /* test 모델을 insert_entry() 메소드를 실행합니다. */ $this->test->insert_entry(); } /* data를 update합니다. write.php 에서 데이터를 보내면 데이터를 입력합니다.*/ public function data_update() { /* models 폴더에서 test.php 모델을 호출합니다. */ $this->load->model('test'); /* update_entry 메소드를 호출합니다. */ $this->test->update_entry(); } } ?> ===== 단계2 ===== 컨트롤러에서 호출했던 모델을 만들어 보겠습니다. 모델은 내부적으로 돌아 가는 비지니스 로직 또는 데이터 입력,수정,삭제,조회 같은 기능을 합니다. * 모델 이름은 test라고 하겠습니다. application/models 폴더에 test.php 란 파일을 생성합니다. db->get('test'); return $query; } /* data를 insert 하는 함수 입니다. 특정 sql을 이용하지 않고 CI에서 제공하는 insert 함수를 사용합니다. 배열안의 데이터 이름과 컬럼 명이 같으면 자동으로 insert 됩니다.*/ function insert_entry() { /*이렇게 직접 컬럼 값을 $_POST를 이용하여 설정 하셔도 되고 아니면 아래 사용한 것 처럼 $_POST로 바로 데이터를 보내셔도 됩니다. 아래와 같이 사용할 경우 form안에 엘레먼트 id 가 db 필드 명과 같아야 합니다.*/ //$this->title = $_POST['title']; //$this->contents = $_POST['contents']; /*post로 받은 폼 값을 바로 넘기겠습니다.*/ $this->db->insert('test', $_POST); /* redirect로 index페이지로 넘어 갑니다.*/ redirect('blog/index/'); } /* data를 update 하는 메소드 입니다.*/ function update_entry() { /*전역 변수로 선언한 변수에 post 넘어온 데이터를 넣습니다.*/ $this->title = $_POST['title']; $this->contents = $_POST['contents']; /* 3번째 세그먼트(세그먼트는 주소 창에 /로 구분되어 있는 데이터 입니다.) ID를 기준하여 update 합니다.*/ $this->db->update('test', $_POST, array('Id' => $_POST['Id'])); redirect('blog/index/'); } /* 데이터를 delete 하는 메소드 입니다. 사용되지는 않습니다. 간단하기에 controller에 바로 넣었습니다.*/ function delete_entry() { $this->db->delete('mytable', array('Id' => $Id)); redirect('blog/index/'); } } ?> ===== 단계3 ===== View 를 만들어 보겠습니다. View는 클라이언트에게 보여지는 화면입니다. 이번 sample에는 View는 main, update, write 페이지로 나뉩니다. View 파일은 전부 apllication/Views 폴더에 넣어 주시면 됩니다. ==== main.php ==== * main 페이지 소스 입니다. main 페이지는 가장 먼저 화면에 보여지는 부분으로 데이터를 보여주고 입력, 수정, 삭제를 할 수 있습니다. 테그가 빠져있습니다. 참고 하십시요. tea-gyu ==== write.php ==== * write.php는 데이터를 입력하는 view 입니다. 태그가 빠져있습니다. tea-gyu

==== update.php ==== * update View는 데이터를 udate 할 때 사용하는 view 입니다. write.php 와 거의 동일합니다. 태그가 빠져 있습니다. tea-gyu num_rows() > 0) { $item = $query->row(); } ?> uri->segment(3))?>

===== 단계4 ===== * main.php 화면입니다. {{:software:main.jpg?nolink&200|}} * write.php 화면입니다. {{:software:write.jpg?nolink&200|}} * update.php 화면입니다. {{:software:update.jpg?nolink&200|}}
result() as $item){ ?>

title?>

contents?>


Id,'수정')?> Id,'삭제')?>