반응형

* 입력된 폼 값을 DB에 insert 하기


- controllers/topic.php

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function add() {

    $this->head();


    $this->load->library('form_validation');  //form_validation 라이브러리를 사용하겠음.


    //title 과 content는 반드시 입력해라.

    $this->form_validation->set_rules('title','Errors_title','required');

    $this->form_validation->set_rules('content','Errors_content','required');


    if($this->form_validation->run() == FALSE){

        $this->load->view('add');  //입력 값이 FALSE이면 다시 add 페이지를 뿌려줘라.

    } else {

//       $this->load->model('add_model');  => 앞서 공통적으로 선언을 했기 때문에 생략


//인자값을 가져와 add 메소드를 사용하자

       $this->add_model->add($this->input->post('title'), $this->input->post('content'));


        echo "Perfect!";  //TRUE 이면 Perfect라는 문구를 출력하라.

    }


    $this->load->view('footer');


- models/topic_model.php

public function add($title,$content) {

    //insert array 문에 함수를 그냥 사용하게 되면 문자로 인식하여 입력이 되지 않아, 아래처럼 해야함.

    $this->db->set('date','NOW()',false);  //date 폴더에 now() 함수를 쓰고, 이것은 문자가아니가(false)

    return $this->db->insert('tablename',array('title'=>$title,'content'=>$content));


//    $this->db->last_query();  => 실행된 쿼리를 확인.

}


반응형

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

index.php  (0) 2015.09.08
/application/config 파일  (0) 2015.09.08
Library & form_validation, set_rules  (0) 2015.09.08
helper  (0) 2015.09.07
URI Routing  (0) 2015.09.07
반응형

리스트를 누르고 해당 정보를 보는 페이지마다 다시 리스트를 넣으려고 한다.


controller/topic.php

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.

    $this->load->view('main',array('topics'=>$data));

}


function get($id) {

    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.


views/main.php

This is Main page.

<?

    foreach($topics as $entry) {

?>

    <li><a href="index.php/topic/get/<?=$entry->id?>"><?=$entry->id?></a></li>

<?

    }

?> 


메인페이지에 리스트를 뿌려주는 view 파일을 각각 리스트 정보안에서도 활용 하기 때문에 중복이 된다.

위 빨간색 표시 부분을 잘라내기 하여 topic_list.php 파일로 변경하고 controller 파일에서 불러옴.


views/main.php

 This is Main page.


views/topic_list.php

<?

    foreach($topics as $entry) {

?>

    <li><a href="index.php/topic/get/<?=$entry->id?>"><?=$entry->id?></a></li>

<?

    }

?>


controller/topic.php

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $topic_list=$this->topic_model->gets();  //전체 리스트를 디비에서 가져옴.

    $this->load->view('main'); //main 페이지는 더이상 받을 인자가 없다.

    $this->load->view('topic_list',array('topics'=>$topic_list)); //전체 리스트를 뿌려줌.

}


function get($id) {  //전체 리스트에서 선택된 정보값을 출력해주는 부분(이곳에 전체리스트를 다시 가져옴.)

    $topic_list=$this->topic_model->gets();  //전체 리스트를 디비에서 가져옴.

    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.

    $this->load->view('topic_list',array('topics'=>$topic_list));

// 정보를 보여준 후 전체 리스트를 뿌려준다.

}


반응형

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

URI Routing  (0) 2015.09.07
Bootstrap 라이브러리  (0) 2015.09.07
Model(3/5) - 소스 중복제거  (0) 2015.09.07
Model(2/5) - 리스트와 각 리스트 정보 구현  (0) 2015.09.04
Model(1/5) - 설정 및 사용  (0) 2015.09.04
반응형

* Controller 파일의 중복소스 제거


1. __construct()

 - controller/topic.php (아래 소스의 빨간색 글씨로 되어 있는 부분이 중복되고 있다.)

function index() {

    $this->load->database();

    $this->load->model('topic_model');  //topic_model.php 파일을 불러오겠다.

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.

    $this->load->view('main',array('topics'=>$data));

}


function get($id) {

    $this->load->database();

    $this->load->model('topic_model');

    $topic=$this->topic_model->get($id);


    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.

}


 - 중복제거

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.

    $this->load->view('main',array('topics'=>$data));

}


function get($id) {

    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.

}


2. function

 - controller/topic.php (아래 소스의 빨간색 글씨로 되어 있는 부분이 중복되고 있다.)

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $this->load->view('head');

    $data=$this->topic_model->gets();

    $this->load->view('topic_list',array('topics'=>$topics));


    $this->load->view('main');


    $this->load->view('footer');

}


function get($id) {

    $this->load->view('head');

    $data=$this->topic_model->gets();

    $this->load->view('topic_list',array('topics'=>$topics));


    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));


    $this->load->view('footer');

}


 - 중복제거

function __construct() {

    parent::__construct();

    $this->load->database();

    $this->load->model('topic_model');

}


function index() {

    $this->head();


    $this->load->view('main');


    $this->load->view('footer');

}


function get($id) {

    $this->head();


    $topic=$this->topic_model->get($id);

    $this->load->view('get',array('topic'=>$topic));


    $this->load->view('footer');

}


function head(){

    $this->load->view('head');

    $data=$this->topic_model->gets();

    $this->load->view('topic_list',array('topics'=>$topics));

}


반응형
반응형

- 리스트를 보여주고 각 리스트에 대한 정보를 보여준다.


* models/topic_model.php

class Tablename_model extends CI_Model {

    function __construct() {   //method 를 초기화

        parent::__construct();

    }


   public function gets() {

       return $this->db->query('SELECT id,name from tablename')->result();

   }


   public function get($topic_id) {

        return $this->db->get_where('tablename',array('id'=>$topic_id))->row();

//    get_where는 active record라는 방식이라 함. 아래 쿼리와 동일하다고 함.

//    get_where 의 첫번째 인자는 테이블명, 두번째 인자의 id는 컬럼명임.

//    return $this->db->query('SELECT * from tablename where id = $topic_id')->row();

//    active record 방식의 장점은 DB의 인식성이 좋음.

   }


active record 방식을 사용하였을 때 특정 컬럼만 가져오고 싶다면, 아래와 같이 기술하면 된다.

$this->db->select('id');

$this->db->select('name');

$this->db->select(substr('chardate',1,4) chardate);

return $this->db_get_where('tablename',array('id'=>$topic_id))->row();



* controller/topic.php

function index() {

    $this->load->database();

    $this->load->model('topic_model');  //topic_model.php 파일을 불러오겠다.

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.


    $this->load->view('main',array('topics'=>$data));

}


function get($id) {

    $this->load->database();

    $this->load->model('topic_model');

    $topic=$this->topic_model->get($id);


    $this->load->view('get',array('topic'=>$topic));  //기존 $id에서 $topic 값을 가져오는 것으로 수정.


}


* views/get.php

 This is get page.

<article>

    <h1><?=$topic->id?></h1>

    <div><?=$topic->name?></div>

</article>



다음에는 현재 구현한 소스를 가지고 간결화 하는 작업을 할 것이다.

model 수업을 들으면서 머리가 많이 복잡해지기 시작했다.


어떤 흐름인지는 알겠는데, 정리가 되지 않는 찝찝함?

동영상 강의를 반복적으로 듣다가 잊지 않기 위해 블로그에 글을 적어본다.

담주에 보게 되면 또 기억할 수 있을지가 의문이네 ㅠㅠ

반응형

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

Model(4/5) - 각 리스트 정보 페이지마다 전체리스트 생성 구현  (0) 2015.09.07
Model(3/5) - 소스 중복제거  (0) 2015.09.07
Model(1/5) - 설정 및 사용  (0) 2015.09.04
View  (0) 2015.09.04
Controller  (0) 2015.09.04
반응형

* 데이터와 관련된 일을 한다. 즉, 데이터 베이스와 연관된 일을 하는 곳이다.

* CI에서 model 기능이 제대로 작동하려면 CI_Model 를 반드시 상속 받아야 한다.


* 실습을 위해서는 반드시 데이터 베이스와 연동이 되어 있어야 한다.

* 설정은 application/config/database.php 에서 설정을 할 수 있다.

 - 기본적으로 설정되어야 할 값

$db['default']['hostname'] = 'localhost'; // IP 또는 hostname

$db['default']['username'] = 'scott';

$db['default']['password'] = 'tiger';

$db['default']['database'] = 'PROD';

$db['default']['dbdriver'] = 'odbc'; 

 - 설정 해주는 라인 위쪽으로 올라가보면 주석처리로 어떤 것들이 지원이 되고 어떤 이름을 넣어야 하는지도 나와 있음.

    system/database/drivers 경로에 보면 지원하고 있는 dbdriver 파일들이 있음.

 - database.php 파일은 보안상으로 많은 문제를 발생 시킬 수 있기 때문에, 파일에 대한 권한을 좀 더 신경을 써야 함.

    git 같은 소스관리 툴을 사용할 때는 ignore가 되도록 해야하며, 여러모로 주의를 기울여야하는 파일임.


* 데이터베이스를 불러오는 방법.

1. application/config/autoload.php 파일에서 $autoload['libraries'] = array('database') 라고 설정.

   - 이럴경우 계속적으로 데이터베이스를 불러옴.(테스트는 안해봄)

   - 더이상 데이터베이스를 불러오지 않아 편할지는 모르겠으나, DB를 많이 사용하지 않는 페이지이거나, 전혀 사용되지 않        는 페이지들이 DB 사용률 보다 페이지가 더 많이 불러오게 되는 경우는 안좋을 수 있다.

     즉, 사용 할 때마나 DB에 접속하는 방법이 좋다. 매번 DB에 접속하는 것보다 사용 할 때만 접속하는 것이 속도에 좋고

         DB의 부담도 줄어 들 것이다.


2. 사용 할 때마나 DB에 접속.

   - application/models/ 폴더에 ***_model.php를 생성하고 controller 파일에서 제어를 하는 방법.

   - 일반적으로 모델 파일명 규칙은 사용될 데이터베이스의 테이블 이름을 사용하고 _model이라고 반드시 붙여준다.


* models/Tablename_model.php

class Tablename_model extends CI_Model {

    function __construct() {   //method 를 초기화

        parent::__construct();

       // 매번 초기화를 해야하는 method가 있으면 이곳에 추가를 해주면 됨.

    }


   public function gets() {

       //$this->db->query()->result(); 문법.

       return $this->db->query('SELECT id,name from tablename')->result();

       //객체 - result(), 배열 - result_array(), 값이 하나 일 경우 - row()

   }

 


* controller/topic.php

function index() {

    $this->load->database();

    $this->load->model('topic_model');  //topic_model.php 파일을 불러오겠다.

    $data=$this->topic_model->gets();  //topic_model.php 의 gets라는 method를 사용하여 $data에 넣겠다.


    $this->load->view('main',array('topics'=>$data));

}


function get($id) {


    $this->load->view('get',array('id'=>$id));


}


* views/main.php

<?

    foreach($topics as $entry) {

?>

    <li><a href="index.php/topic/get/<?=$entry->id?>"><?=$entry->id?></a></li>

<?

    }

?>


* views/get.php

 This is get page.<?=$id?>


반응형

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

Model(3/5) - 소스 중복제거  (0) 2015.09.07
Model(2/5) - 리스트와 각 리스트 정보 구현  (0) 2015.09.04
View  (0) 2015.09.04
Controller  (0) 2015.09.04
CodeIgniter와의 규칙?  (0) 2015.09.04

+ Recent posts