You are on page 1of 87

2010

n C S: Tm Hiu PHP Framework CodeIgniter

I HC K THUT CNG NGH THNH PH H CH MINH 4/1/2010

Mc lc
1. Gii thiu ...................................................................................................................................................... 5 1.1. 1.2. 1.3. 1.4. Tng quan............................................................................................................................................ 5 Nhng im ni bt ........................................................................................................................ 5 Nhng im hn ch ....................................................................................................................... 6 C{i t.................................................................................................................................................... 6

2. Tm hiu ........................................................................................................................................................ 7 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. 2.9. 2.10. 2.11. 2.12. 2.13. 2.14. M hnh Model-View-Controller ............................................................................................... 7 Cu trc CodeIgniter....................................................................................................................... 8 Dng chy d liu trong CodeIgniter ................................................................................... 10 CodeIgniter URL ............................................................................................................................ 11 Model .................................................................................................................................................. 13 View .................................................................................................................................................... 14 Controller ......................................................................................................................................... 16 C|c th vin ..................................................................................................................................... 18 Cc helper v plugin..................................................................................................................... 21 T ng khai bo ...................................................................................................................... 23 Qun l li .................................................................................................................................... 23 Lu tr b m .......................................................................................................................... 24 Debugging .................................................................................................................................... 25 Bo mt.......................................................................................................................................... 26

3. Nhng th vin chnh.......................................................................................................................... 26 3.1. Input and Security ........................................................................................................................ 26 C ch lc XSS......................................................................................................................... 27 Cc hm tin ch .................................................................................................................... 27

3.1.1. 3.1.2. 3.2.

Form Validation ............................................................................................................................. 28

|n c s: Tm hiu PHP framework CodeIgniter 3.2.1. 3.2.2. 3.2.3. 3.3. Thit lp c|c iu kin kim tra ......................................................................................29 X l li ......................................................................................................................................33 Cc hm tin ch .....................................................................................................................34

Database ............................................................................................................................................35 Thit lp thng tin c s d liu ....................................................................................35 Kt ni n c s d liu ...................................................................................................37 Truy vn d liu .....................................................................................................................37 Active Record ..........................................................................................................................42 Truy vn d liu .....................................................................................................................43 Thao tc d liu......................................................................................................................52 Lu tr truy vn trong Active Record .........................................................................56 Giao dch (transaction) trong CodeIgniter .................................................................57 Mt s phng thc tr gip ...........................................................................................58 Qun tr c s d liu vi Database Forge & Database Utility .....................62 B m c s d liu .......................................................................................................68

3.3.1. 3.3.2. 3.3.3. 3.3.4. 3.3.5. 3.3.6. 3.3.7. 3.3.8. 3.3.9. 3.3.10. 3.3.11. 3.4.

Email ....................................................................................................................................................70 Thit lp cc ty chn..........................................................................................................71 Thc hin gi email..............................................................................................................73 Wordwrap ................................................................................................................................73 C|c phng thc....................................................................................................................73

3.4.1. 3.4.2. 3.4.3. 3.4.4. 3.5.

Encryption ........................................................................................................................................76 Thit lp kha .........................................................................................................................77 C|c phng thc....................................................................................................................77

3.5.1. 3.5.2. 3.6.

Session ................................................................................................................................................79 Thit lp cc ty chn..........................................................................................................79 Trang 3

3.6.1.

|n c s: Tm hiu PHP framework CodeIgniter 3.6.2. 3.6.3. 3.6.4. Cch thc hot ng ............................................................................................................ 80 Flashdata .................................................................................................................................. 82 Lu session v{o c s d liu ......................................................................................... 82

4. Nhng helper hu ch ......................................................................................................................... 83 4.1. 4.2. Cookie ................................................................................................................................................. 83 File ....................................................................................................................................................... 84

5. Kt lun ...................................................................................................................................................... 86 6. Danh mc t vit tt ............................................................................................................................ 86 7. Ti liu tham kho ................................................................................................................................ 87

Trang 4

|n c s: Tm hiu PHP framework CodeIgniter

1. Gii thiu
1.1. Tng quan CodeIgniter l mt nn tng ng dng web ngun m c vit bng ngn ng PHP bi Rick Ellis (CEO ca EllisLab, Inc). Phin bn u tin c pht hnh ngy 28.02.2006, phin bn hin ti: 1.7.2 (pht hnh ngy 11.09.2009). tng xy dng CodeIgniter c da trn Ruby on Rails, mt nn tng ng dng web c vit bng ngn ng Ruby. Hin ti, CodeIgniter ang c pht trin bi ExpressionEngine Development Team thuc EllisLab, Inc. 1.2. Nhng im ni bt c thit k theo m hnh Model-View-Controller: M hnh MVC gip tch thnh phn hin th giao din (presentation) v x l (business logic) ca mt phn mm thnh nhng thnh phn c lp, t gip cho vic thit k, x l v bo tr m ngun d d{ng, ng thi tng kh nng m rng ca phn mm. CodeIgniter vn dng m hnh ny trong thit k, gip tch bit cc tp tin giao din vi cc tp tin x l d liu, nng cao kh nng qun l v d bo tr. Nh gn: Gi c{i t ch 404KB (khng bao gm phn User Guide). So vi cc PHP framework kh|c nh CakePHP (1.3MB), Symfony (5.08MB) hay Zend Framework (5.66MB)kch thc ca CodeIgniter gip gim thiu |ng k khng gian lu tr. Tc nhanh: CodeIgniter c |nh gi| l{ PHP framework c tc nhanh nht hin nay. Bng c ch lu ni dung vo b m (cache), kim tra b m trc khi tin hnh thc hin yu cu, CodeIgniter gim s ln truy cp v x l d liu, t ti u ha tc ti trang. Min ph: CodeIgniter c ph|t h{nh di giy php Apache/BSD m rng, cho php ngi dng t do thay i, pht trin v phn phi m ngun. H tr Search Engine Optimization: Cu trc URL ca CodeIgniter rt thn thin vi cc robot tm kim. H thng th vin phong ph: CodeIgniter cung cp c|c th vin phc v cho nhng tc v thng gp nht trong lp trnh web, chng hn nh truy cp c s d liu, gi email, kim tra d liu, qun l session, x l nhn nhng chc nng n}ng cao nh XML-RPC, m ha, bo mt Bo mt h thng: C ch kim tra d liu cht ch, ngn nga XSS v SQL Injection ca CodeIgniter gip gim thiu cc nguy c bo mt cho h thng. Trang 5

|n c s: Tm hiu PHP framework CodeIgniter 1.3. Nhng im hn ch Cha h tr Object-Relational Mapping: Object Relational Mapping (ORM) l mt k thut lp trnh, trong cc bng ca c s d liu c nh x th{nh c|c i tng trong chng trnh. K thut ny gip cho vic thc hin c|c thao t|c trong c s d liu (Create Read Update Delate CRUD) d dng, m ngun ngn gn hn. Hin ti, CodeIgniter vn cha h tr ORM. Cha h tr AJAX: AJAX (Asynchronous JavaScript and XML) ~ tr thnh mt phn khng th thiu trong bt k ng dng Web 2.0 no. AJAX gip n}ng cao tnh tng t|c gia ngi dng v h thng, gip cho ngi dng c cm gi|c nh ang s dng ng dng desktop v c|c thao t|c u din ra tc thi. Hin ti, CodeIgniter vn cha c th vin dng sn n{o h tr xy dng ng dng AJAX. Lp trnh vin phi s dng c|c th vin bn ngo{i, nh jQuery, Script.aculo.us, Prototype hay Mootools Cha h tr mt s module thng dng: So snh vi framework khc, CodeIgniter khng c cc module thc thi mt s tc v thng gp trong qu trnh xy dng ng dng web nh Chng thc ngi dng (User Authorization), Trnh phn tch RSS (RSS Parser) hay Trnh x l PDF Cha h tr Event-Driven Programming: Event-Driven Programming (EDP) l mt nguyn l lp trnh, trong cc lung x l ca h thng s da vo cc s kin, chng hn nh click chut, g b{n phm}y khng phi l mt khuyt im to ln ca CodeIgniter v hin ti, ch c mt s t framework h tr EDP, bao gm Prado, QPHP v Yii. 1.4. Ci t Yu cu h thng: CodeIgniter c th hot ng trn nhiu h iu hnh v server, yu cu c c{i t PHP phin bn 4.x hoc cao hn; h qun tr c s d liu: MySQL (4.1+), MySQLi, Mircrosoft SQL Server, Postgres, Oracle, SQLite, v ODBC. Hng dn c{i t: 1. Download b ngun CodeIgniter ti website http://codeigniter.com/, phin bn hin ti: 1.7.2. 2. M tp tin application/config/config.php bng mt chng trnh son tho, thay i gi tr $config['base_url']. }y l{ ng dn tuyt i n th mc CodeIgniter trn server. 3. Nu ng dng c tng t|c vi c s d liu, thit lp cc gi tr cn thit trong tp tin application/config/database.php. 4. Upload tt c th mc v tp tin ca CodeIgniter ln server. Trang 6

|n c s: Tm hiu PHP framework CodeIgniter nng cao tnh bo mt h thng, ngi dng c th i tn th mc system ca CodeIgniter. Sau khi i tn, ngi dng phi thay i gi tr bin $system_folder trong tp tin index.php.

2. Tm hiu
2.1. M hnh Model-View-Controller Model-View-Control (MVC) l mt kin trc phn mm, hin ang c xem l mt mu thit k trong cng ngh phn mm. M hnh MVC tch bit phn x l d liu ra khi phn giao din, cho php pht trin, kim tra v bo tr cc thnh phn mt cch c lp.

View

Model

Controller Hnh 1: Minh ha m hnh MVC Theo : Model th hin cc cu trc d liu. Cc lp thuc thnh phn Model thng thc hin cc tc v nh truy vn, thm, xa, cp nht d liu. Khi d liu trong Model thay i, thnh phn View s c cp nht li. View l thnh phn th hin d liu trong Model thnh cc giao din tng t|c vi ngi s dng. Mt Model c th c nhiu View ty thuc vo cc mc ch khc nhau. Controller ng vai tr trung gian gia Model v{ View. Thng tin ngi dng t View c gi cho Controller x l, sau Controller tng t|c vi Model ly d liu c yu cu, sau cng Controller tr d liu ny v cho View.

M hnh MVC thng c s dng trong cc ng dng web, v thnh phn View (m HTML/XHTML) c sinh ra t cc ngn ng lp trnh web. Thnh phn Controller s nhn cc d liu GET/POST, x l nhng d liu n{y, sau chuyn sang Model x l. Trang 7

|n c s: Tm hiu PHP framework CodeIgniter Model s tr d liu v pha Controller, sau Controller sinh m~ HTML/XHTML th hin trn View. 2.2. Cu trc CodeIgniter

Hnh 2: Cu trc CodeIgniter Tp tin index.php c xem nh controller u vo, tip nhn cc yu cu t pha client v chuyn cc yu cu ny cho h thng x l. Th mc system bao gm phn li ca CodeIgniter. Chng bao gm c|c th vin xy dng sn, cc tp tin ngn ng, ghi ch v h thng. Trong s , c|c th mc sau kh quan trng: Th mc application: Dnh cho lp trnh vin, cc tp tin c lp trnh cho ng dng s lu trong th mc ny. Th mc cache: B m ca h thng, cha c|c trang ~ c x l trc . Th mc helpers: Cha cc hm h tr cho lp trnh vin khi vit ng dng. Th mc libraries: Cha c|c th vin dng sn ca CodeIgniter. i vi lp trnh vin, cc tp tin ca ng dng s c lu trong th mc system/application. Trong : Trang 8

|n c s: Tm hiu PHP framework CodeIgniter Th mc config: Cha cc tp tin cu hnh h thng Th mc controllers: cha cc lp controller Th mc errors: cha cc tp tin li Th mc helpers: cha cc hm tin ch do ngi dng nh ngha Th mc hooks: cha cc tp tin m rng m ngun CodeIgniter Th mc language: cha cc tp tin ngn ng Th mc libraries: cha c|c th vin cho ngi dng dng nh ngha Th mc models: cha cc lp model Th mc views: cha cc lp view

Ta cng c th i tn ca th mc application th{nh tn ty . Sau khi i tn, cn thit lp tn mi cho bin $application_folder trong tp tin index.php. Ngoi ra, ta cng c th to nhiu ng dng trong cng mt b c{i t CodeIgniter bng cch to ra c|c th mc con bn trong system/application. C|c th mc ny c cng cu trc ging nh th mc application gc. Chng hn, ta c hai ng dng, foo v bar. Khi cu trc th mc s nh sau:
system/application/foo/ system/application/foo/config/ system/application/foo/controllers/ system/application/foo/errors/ system/application/foo/libraries/ system/application/foo/models/ system/application/foo/views/ system/application/bar/ system/application/bar/config/ system/application/bar/controllers/ system/application/bar/errors/ system/application/bar/libraries/ system/application/bar/models/ system/application/bar/views/

bit tp tin index.php s chy ng dng no, ta khai bo li gi tr ca bin $application_folder.


$application_folder = "application/foo";

Trang 9

|n c s: Tm hiu PHP framework CodeIgniter 2.3. Dng chy d liu trong CodeIgniter

Hnh 3: S th hin dng chy d liu trong CodeIgniter 1. Tp tin index.php ng vai tr l{m controller u vo, thit lp cc ti nguyn cn thit cho h thng. 2. Routing: Qu| trnh iu hng gip x|c nh cc yu cu v{ hng x l i vi chng. 3. Caching: Nu d liu c yu cu ~ c lu trong b m, CodeIgniter s tr d liu trong b m v pha client. Qu trnh x l kt thc. 4. Security: D liu trc khi c chuyn n cc Controller s c lc phng chng XXS hoc SQL Injection. 5. Application Controller: Controller x l d liu nhn c bng cch gi n cc Models, Libraries, Helpers, Pluginsc lin quan. 6. View: D liu c chuyn qua View hin th cho ngi dng. Nu chc nng caching c bt, d liu s c lu trong cache cho nhng ln yu cu tip theo. Trong thc t, i khi ta cn xen v{o c|c bc trong s trn. Chng hn, trc khi mt controller c gi, ta c th mun lu log xung tp tin trong h thng. CodeIgniter s dng c ch hook cho php ta thc hin vic n{y. kch hot hook, ta cn thay i gi tr ca bin $config['enable_hooks'] trong tp tin application/config/config.php:
$config['enable_hooks'] = TRUE;

C|c hook c khai bo trong tp tin application/config/hooks.php, c mu sau:


$hook['pre_controller'] = array( 'class' 'function' 'filename' 'filepath' 'params' ); => => => => => 'MyClass', 'Myfunction', 'Myclass.php', 'hooks', array('beer', 'wine', 'snacks')

Trang 10

|n c s: Tm hiu PHP framework CodeIgniter Trong :


class:

tn lp s c gi. Nu ch s dng mt hm th tc, ta c th b trng gi tr ny. function: tn h{m/phng thc s c gi. filename: tn tp tin cha lp/h{m . filepath: ng dn n tp tin hook. Nu tp tin nm trong th mc application/hooks, ta ch cn t gi tr ny bng hooks. Nu tp tin nm trong th mc application/hooks/utilities, ta t gi tr ny bng hooks/utilities. Lu , khng c du / cui. params: cc tham s c truyn vo cho hm.

Kha pre_controller cho bit thi im hook n{y c thc hin. CodeIgniter h tr cc thi im sau:
pre_system:

c gi khi h thng va khi ng. giai on ny ch c lp benchmark v{ c|c hook c kch hot. Cc tin trnh khc vn cha xy ra. pre_controller: c gi trc khi cc controller hot ng. Cc tin trnh routing v{ security ~ c thc hin. post_controller_constructor: c gi ngay sau khi hm to ca controller c thi hnh. Cc hm trong controller vn cha c gi. post_controller: c gi ngay sau khi controller thc hin x l yu cu. display_override: thc hin vic chng (override) hm __display() hon tt ni dung trang trc khi gi n trnh duyt ca ngi dng. Ni dung trang c th c ly bng cch gi $this->CI->output->get_output(). cache_override: thc hin vic chng hm _display_cache() ly trang trong b m. scaffolding_override: khng s dng t CodeIgniter 1.6. post_system: c gi sau khi h thng ~ thc hin xong mt yu cu.

2.4. CodeIgniter URL Theo mc nh, cu trc URL ca CodeIgniter c thit k da vo cc segment thay cho kiu query truyn thng. Cch tip cn ny gip URL tr nn ngn gn, c ngha, d ghi nh v thn thin vi cc b my tm kim. Mt URL trong CodeIgniter c dng:
domain.com/index.php/controller/method/param/

Trong : Segment controller l tn ca lp controller c gi. Trang 11

|n c s: Tm hiu PHP framework CodeIgniter Segment method l tn ca phng thc trong lp controller trn. Segment param l{ c|c i s ca phng thc Nh vy, URI domain.com/index.php/product/view/1 s mang ngha: Gi n phng thc view() thuc lp Product vi i s truyn vo bng 1. nh tuyn URI (URI Routing) Trong thc t, URI domain.com/index.php/product/view/1 li khng thn thin vi cc b my tm kim bng URI domain.com/index.php/product/view/appple-ipad-1. CodeIgniter cho php lp trnh vin c th thay i c ch x l URL mc nh thng qua chc nng nh hng URI bng cch thit lp cc quy lut trong tp tin application/config/routes.php. Tp tin ny cha mng $route, vi kha l URI mi v gi tr l{ URI c. Cc quy lut c c theo th t t trn xung, quy lut trc c u tin cao hn quy lut sau. CodeIgniter cho php s dng cc k t i din (wildcard) thay th. CodeIgniter ~ quy nh sn hai k t i din: V d:
$route['product/view/(:num)'] = "product/view/$1"; :num tng ng vi cc gi tr s. :any tng ng vi bt k gi tr no.

ngha: Gi n phng thc view() trong lp Product vi tham s truyn vo l gi tr kiu s.


$route['product/:any'] = "product/find_product";

ngha: Tt c cc yu cu bt u bng lp Product.

product

s gi n hm

find_product()

ca

Ta cng c th s dng biu thc chnh quy (Regular Expression) thit lp cc quy lut. Chng hn:
$route['product/([a-z]+)/(\d+)'] = "$1/id_$2";

Thm hu t vo URL Cc b my tm kim c xu hng thn thin hn vi cc tp tin HTML. Bng cch thay i gi tr bin $config['url_suffix'] trong tp tin system/application/config/config.php, ta c th thm hu t HTML hay bt c hu t no khc vo cho URL. V d, vi $config['url_suffix'] = '.html', URL ca ta s nh sau: Trang 12

|n c s: Tm hiu PHP framework CodeIgniter


domain.com/index.php/controller/method/param.html

Loi b chui index.php trong URL Theo mc nh, chui index.php c thm v{o URL. loi b chui ny, ta c th s dng mt tp tin .htaccess c ni dung nh sau:
Options +FollowSymLinks All -Indexes RewriteEngine On RewriteCond $1 !^(index\.php|resources|robots\.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L,QSA]

2.5. Model Model l nhng lp c xy dng nhm thc hin vic trao i thng tin vi c s d liu. Mt lp Model c th thc hin cc tc v truy vn, thm, xa, cp nht d liu. Trong CodeIgniter, vic khai bo cc lp model dnh cho mt thc th n{o l{ khng cn thit, v trong controller ca thc th , ta c th gi n th vin database thc hin cc thao tc vi c s d liu. Tuy nhin, tin cho vic qun l, xy dng lp model cho mt thc th c khuyn khch. Mt lp model chun trong CodeIgniter c cu trc nh sau:
class Example_model extends Model { /** * Hm to */ function __contruct() { parrent::__contruct(); } /** * M t hm * @param kiu d liu $param m t bin */ function exampleFunction($param) { // Do something here } }

Khi khai bo mt lp model, ta cn tun theo mt s quy tc: Tn lp c vit hoa ch u tin, phn cn li vit thng. V d: User_model, Blog_model, Article_model

Trang 13

|n c s: Tm hiu PHP framework CodeIgniter Tn tp tin c t nh tn lp, v{ c t trong th mc application/models/. C|c th mc c th c lu lng v{o nhau thun tin cho vic qun l. V d: application/models/user_model.php,
application/models/front_end/blog_model.php, application/models/back_end/article_model.php

Bt buc phi k tha t lp Model. Trong hm to ca lp con, phi gi n hm to ca lp cha. s dng model trong controller, ta s dng on m sau:
$this->load->model('model_name');

Trong , model_name l tn ca lp model. Nu lp model c lu trong mt th mc, ta cn ghi r ng dn n th mc . V d lp Blog_model c lu trong th mc application/models/front_end/blog_model.php. s dng lp ny, ta s dng on m sau:
$this->load->model('front_end/blog_model');

Sau khi load lp model, ta c th s dng lp n{y trong chng trnh bng cch gi
$this->model_name->method();

gn mt tn khc cho lp model khi s dng trong chng trnh, ta c th truyn vo tham s th hai nh sau:
$this->load->model('model_name', 'ModelName');

Khi , s dng c|c phng thc ca lp model, ta gi:


$this->ModelName->method();

2.6. View View l nhng tp tin HTML c xy dng nhm th hin d liu trong model thnh cc giao din tng t|c vi ngi dng. View c th l mt trang web hon chnh, hay ch l mt phn ca trang web (header, footer, sidebar). Ni dung ca tp tin view, ngoi m HTML cn c th cha m PHP. View khng bao gi c gi trc tip m phi thng qua controller. s dng view trong controller, ta s dng on m sau:
$this->load->view('view_name', $data);

Trong , view_name l tn ca view, $data cha cc d liu s c hin th trong view. Cng ging nh model, ta c th lu view trong c|c th mc tin cho vic qun l. Trang 14

|n c s: Tm hiu PHP framework CodeIgniter Khi s dng, ch cn khai b|o ng dn tng i n th mc cha view. V d tp tin header.tpl.php c lu trong th mc application/views/front_end. hin th view ny, ta s dng on m sau:
$this->load->view('front_end/header.tpl');

CodeIgniter cho php s dng nhiu view trong cng mt phng thc ca controller. D liu trong cc view s c kt hp li vi nhau. V d:
class Example extends Controller { function showExample() { // Loading multiple views $this->load->view('header.tpl'); $this->load->view('content.tpl'); $this->load->view('sidebar.tpl'); $this->load->view('footer.tpl'); } }

hin th d liu trong model ra view, ta c th truyn mt mng hoc i tng lm i s th hai khi load view. V d:
$data = array( 'name' => 'Maxwell Smart', 'email' => 'maxwell.smart@control.org', 'age' => '33' ); $this->load->view('employee_detail', $data);

Hoc
$objEmployee = new Employee(); $this->load->view('employee_detail', $objEmployee);

Khi , c|c kha ca mng hoc cc thuc tnh ca i tng s c chuyn thnh cc bin s dng trong tp tin view. Di }y l{ ni dung mu ca tp tin
employee_detail.php: <p>Name: <?php echo $name ?></p> <p>Email: <?php echo $email ?></p> <p>Age: <?php echo $age ?></p>

Ta cng c th s dng cc cu trc iu khin (if, else, switchcase), lp (for, while, dowhile)bn trong view hin th d liu. V d sau s hin th danh sch cc nhn vin:
// Employee Controller $data['employeeList'] = $this->EmployeeModel->getAllEmployee();

Trang 15

|n c s: Tm hiu PHP framework CodeIgniter


$this->load->view('employee_list', $data);

Tp tin employee_list.php
<ol> <?php foreach( $employeeList as $objEmployee ) : ?> <li> <p>Employee ID: <?php $objEmployee->employee_id ?></p> <p>Full-name: <?php $objEmployee->full_name ?></p> <p>D.O.B: <?php $objEmployee->dob ?></p> <p>Email: <?php $objEmployee->email ?></p> </li> <?php endforeach; ?> </ol>

CodeIgniter cn cho php lp trnh vin c th ly v ni dung ca view thay v xut trc tip trnh duyt, bng cch truyn true l{m i s th ba khi ti view.
$string = $this->load->view('myfile', '', true);

2.7. Controller Controller l nhng lp ng vai tr trung gian gia view v model. Controller nhn cc yu cu t pha ngi dng, kim tra chng trc khi chuyn qua cho model. Sau khi model x l yu cu v tr d liu v, controller chuyn sang view hin th d liu cho ngi dng. Trong CodeIgniter, cc lp controller c gn vo segment th nht trong URI. Mt lp controller chun trong CodeIgniter c mu:
class Example extends Controller { /** * Hm to */ function __contruct() { parrent::__contruct(); } /** * M t hm * @param kiu d liu $param m t bin */ function method($param) { // Do something here }

Trang 16

|n c s: Tm hiu PHP framework CodeIgniter


}

Khi khai bo mt lp controller, ta cn tun theo mt s quy tc: Tn lp c vit hoa ch u tin, phn cn li vit thng. V d: User, Blog, Article Tn tp tin c t nh tn lp, v{ c t trong th mc application/controllers/. C|c th mc c th c lu lng v{o nhau thun tin cho vic qun l. V d: application/controllers/user.php,
application/controllers/front_end/blog.php, application/controllers/back_end/article.php

Bt buc phi k tha t lp n hm to ca lp cha.

Controller.

Trong hm to ca lp con, phi gi

Segment th hai trong URI s gi n phng thc tng ng trong controller. Cc gi tr ca cc segment cn li trong URI chnh l cc tham s truyn v{o cho phng th ny. CodeIgniter quy nh mt phng thc c bit, index(). Phng thc ny c th xem nh u vo ca controller, s c t ng gi trong trng hp segment th hai ca URI b b trng. V d:
class Blog extends Controller { /** * Hm to */ function __contruct() { parrent::__contruct(); } /** * Hm u vo */ function index() { echo 'Welcome to my blog'; } /** * Hin th ni dung bi vit * @param int $entryId ID ca bi vit */ function view($entryId) { // Code hin th ni dung bi vit } }

Trang 17

|n c s: Tm hiu PHP framework CodeIgniter Khi truy xut n URI domain.com/index.php/blog, phng thc index() c gi, ta s thy chui Welcome to my blog. Tip theo, truy xut n URI domain.com/index.php/blog/view/1 s hin th ni dung ca bi vit c ID bng 1. Ngoi ra, CodeIgniter cho php lp trnh thay i c ch gi phng thc thng qua segment th hai bng hm _remap(). Hm ny s c quyt nh c th nhng phng thc no s c gi tng ng vi tng segment.
function _remap($method) { if ($method == 'foo') { $this->bar(); } else { $this->default_method(); } }

Lu : cc phng thc private trong controller c bt u bng k t gch di (_), v d: _remap(), _my_private_method()Cc hm ny khng th c gi bng segment th hai trong URI. 2.8. Cc th vin Sc mnh ca CodeIgniter nm c|c th vin xy dng sn. Hin ti, CodeIgniter h tr ngi dng 26 th vin sau: Tn th vin Benchmarking Calendar Cart Config Database Email Encryption Chc nng H tr |nh gi| hiu nng h thng H tr to lch t ng H tr chc nng gi h{ng trong c|c website thng mi in t Cho php thit lp h thng H tr thao t|c trn c s d liu H tr gi email H tr m ha v gii m thng tin

Trang 18

|n c s: Tm hiu PHP framework CodeIgniter File Uploading Form Validation FTP HTML Table Image Manipulation Input and Security Loader Language Output Pagination Session Trackback Template Parser Typography Unit Testing URI User Agent XML-RPC Zip Encoding H tr upload tp tin t ngi dng ln server Cho php kim tra d liu ngi dng H tr kt ni FTP H tr xy dng bng t ng H tr x l nh H tr x l d liu u vo v bo mt H tr ti cc thnh phn ca CodeIgniter H tr hin th a ngn ng H tr xut thng tin v pha trnh duyt ca ngi dng H tr phn trang t ng H tr x l session Cho php v nhn thng tin trackback Cho php xy dng v x l m gi trong cc tp tin view H tr nh dng vn bn H tr unit testing Cho php ly thng tin t URI Cho php x|c nh thng tin trnh duyt ca ngi dng, thit b di ng hay c|c robot ang truy cp website Cho php gi yu cu n mt XML-RPC hoc t xy dng mt XML-RPC cho h thng Cho php to tp tin ZIP

s dng mt th vin n{o , ta khai b|o nh sau:


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

Trang 19

|n c s: Tm hiu PHP framework CodeIgniter Trong , lib_name l tn ca th vin. V d, s dng th vin Form Validation, ta khai bo:
$this->load->library('form_validation');

Sau khi khai bo, ta c th truy xut n c|c phng thc ca th vin bng cch gi:
$this->lib_name->method();

Thm mt th vin mi CodeIgniter cho php lp trnh vin to c|c th vin mi, m rng hoc thay th cc th vin sn c. C|c th vin do lp trnh vin to ra s c lu trong th mc application/libraries. Lu : th vin Database v Loader khng th m rng hoc thay th. Khi khai bo mt lp th vin, cn tun theo cc quy tc sau: Tn tp tin phi c vit hoa, v d: Someclass.php Khi khai bo lp, tn lp phi c vit hoa k t u tin, v d: Someclass. Tn lp v tn tp tin phi trng nhau.

class

c th s dng c|c th vin, helper, plugin ca CodeIgniter trong th vin mi, ta khng th dng khai bo $this->load->xxx() v lp th vin mi l mt lp c lp v khng c thuc tnh load. gii quyt vn ny, ta s khai b|o nh sau:
$CI =& get_instance();

Sau khi ~ c i tng $CI, ta c th khai bo s dng ti nguyn ca CodeIgniter nh bnh thng.
$CI->load->helper('url'); $CI->load->library('session'); $CI->config->item('base_url');

Lu : khng s dng phng thc chy PHP4.

get_instance()

trong hm to nu server ang

}y l{ khai b|o mu mt th vin Someclass


<?php class Someclass { private $ci; function __construct() { $this->ci =& get_instance();

Trang 20

|n c s: Tm hiu PHP framework CodeIgniter


$this->ci->load->library('form_validation'); $this->ci->load->helper( array('url', 'date') ); $this->ci->load->database(); } function doSomething() { // Code goes here } }

Thay th mt th vin thay th mt th vin c sn ca CodeIgniter, ta khai bo mt lp mi trng tn vi lp th vin, sau lu lp n{y v{o th mc application/libraries. Chng hn, thay th lp Email, ta to tp tin application/libraries/Email.php v khai bo:
class CI_Email { }

Lu : Cc lp th vin ca CodeIgniter u c bt u bng tin t CI_. M rng mt th vin m rng mt th vin, ta khai bo lp mi k tha t lp th vin cn m rng, v t tn lp ny vi tin t MY_ (hoc gi tr ca bin $config['subclass_prefix'] trong tp tin application/config/config.php). V d, m rng lp Email, ta to mt tp tin application/libraries/MY_Email.php v khai bo:
class MY_Email extends CI_Email { }

Khi cn s dng th vin Email, ta dng:


$this->load->library('email'); // Khng c tin t MY_

2.9. Cc helper v plugin Helper l tp hp nhng hm tin ch c xy dng nhm h tr lp trnh vin thc hin mt s cng vic n{o . Chng hn, URL Helper gip to lin kt, Form Helper gip to form, Cookie Helper gip x l cookieC|c helper khng c xy dng thnh tng lp i tng, n gin chng l tp hp nhng hm th tc c phn thnh tng nhm ring bit, v chng khng ph thuc vo nhau. Cc helper ca CodeIgniter c lu trong th mc system/helpers. Lp trnh vin c th t xy dng ring cc helper cho mnh, hoc s dng helper c chia s trn Trang 21

|n c s: Tm hiu PHP framework CodeIgniter mng. c|c helper n{y c lu trong th mc system/application/helpers. Khi khai bo s dng mt helper n{o , trc tin CodeIgniter s tm trong th mc system/application/helpers, nu khng tm thy s chuyn sang tm trong th mc system/helpers. s dng mt helper, ta khai b|o nh sau:
$this->load->helper('helper_name');

Trong , helper_name l tn ca helper, b i phn .php hoc _helper. Chng hn s dng URL Helper, l tp tin c tn url_helper.php, ta khai bo:
$this->load->helper('url');

s dng nhiu helper cng lc, ta c th khai b|o nh sau


$this->load->helper( array('helper1', 'helper2', 'helper3') );

Mt helper c th c khai bo bt c }u, thm ch trong mt tp tin view. Nhng tt hn l{ nn khai b|o helper trong cc lp controller. Sau khi khai bo, ta c th s dng cc hm ca helper. CodeIgniter cho php lp trnh vin m rng cc helper sn c bng cch to mt tp tin trng tn vi tn ca helper cn m rng, v c thm tin t MY_. Tin t ny c th c thay i bng cch thit lp gi tr bin $config['subclass_prefix'] trong tp tin application/config/config.php. Lu : CI_ l tin t mc nh ca CodeIgniter, ta khng nn s dng. V d, thm mt s hm chc nng cho Array Helper, ta to tp tin MY_array_helper.php trong th mc system/application/helpers, sau khai b|o nh sau:
<?php // any_in_array() khng c trong Array Helper, khai bo ny s // to hm mi function any_in_array($needle, $haystack) { $needle = (is_array($needle)) ? $needle : array($needle); foreach ($needle as $item) { if (in_array($item, $haystack)) { return TRUE; } } return FALSE; } // random_element() l hm c sn trong Array Helper, khai bo ny s

Trang 22

|n c s: Tm hiu PHP framework CodeIgniter


// chng ln hm c function random_element($array) { shuffle($array); return array_pop($array); }

Plugin c chc nng tng t nh helper. im khc bit l{ plugin thng ch c duy nht mt hm, trong khi helper l tp hp cc hm cng thc hin mt loi tc v no . C|c plugin c lu trong th mc system/plugins, hoc system/application/plugins. Khi s dng plugin, CodeIgniter s tm trong th mc system/application/plugins trc, sau n th mc system/plugins. s dng plugin, ta khai b|o nh sau:
$this->load->plugin('plugin_name');

Trong , plugin_name l tn ca helper, b i phn .php hoc plugin. Chng hn s dng Captcha plugin, l tp tin c tn captcha_pi.php, ta khai bo:
$this->load->plugin('captcha');

Ta cng c th s dng nhiu plugin cng lc bng cch khai bo:


$this->load->plugin( array('plugin1', 'plugin2', 'plugin3') );

2.10. T ng khai bo CodeIgniter h tr chc nng cho php t ng khai bo s dng cc helper, plugin, library, model, cc tp tin ngn ng v cc tp tin cu hnh mi khi h thng hot ng. s dng chc nng n{y, ta thit lp trong tp tin system/application/config/autoload.php. V d, t ng s dng URL Helper, Form Helper, ta thit lp nh sau:
$autoload['helper'] = array('url', 'form');

2.11. Qun l li CodeIgniter cung cp mt s h{m qun l li xy ra trong h thng. Theo mc nh, CodeIgniter s hin th tt c cc li xy ra trong qu trnh h thng hot ng. thit lp tng loi li n{o c hin th, ta c th thay i tham s ca hm error_reporting() trong tp tin index.php. CodeIgniter cn c c ch cho php ghi li thnh tp tin vn bn thun tin cho vic lu tr cng nh sa li. CodeIgniter h tr c|c h{m sau x l li:

Trang 23

|n c s: Tm hiu PHP framework CodeIgniter


show_error($message [, int $status_code = 500 ] )

Hm

thng bo li vi mu l tp tin application/errors/error_general.php. Bin ty chn $status_code cho php thit lp m trng thi HTTP ca li ny, mc nh l 500 (Internal Server Error).
show_error() show_404($path)

hin

th

Hm show_404() s hin th thng bo khng tm thy ti nguyn yu cu vi mu l tp tin application/errors/error_404.php. $path cho bit ng dn ca ti nguyn. Hm ny s c t ng gi khi h thng khng tm thy controller.
log_message($level, $message)

Hm log_message() cho php lu cc thng bo xung tp tin vn bn. C 3 loi thng bo: 1. Thng bo li ($level = 'error'): }y l{ nhng li thc s xy ra trong h thng, c th l li ca PHP hoc ca ngi dng. 2. Thng bo g li ($level = 'debug'): }y l{ nhng thng bo h tr cho vic tm v sa li. Chng hn, khi mt lp c khi to, ta c th lu thng tin n{y li gip cho vic g li sau ny. 3. Thng bo chung ($level = 'info'): Cp thp nht, cung cp thng tin n gin, i khi mang tnh cht ghi ch. Lu : c th ghi xung tp tin vn bn, th mc system/logs phi c cho php ghi (writable). V d:
if ($some_var == "") { log_message('error', 'Some variable did not contain a value.'); } else { log_message('debug', 'Some variable was correctly set'); } log_message('info', 'The purpose of some variable is to provide some value.');

2.12. Lu tr b m Lu tr b m (caching) gip ti u ha hiu sut ca h thng. D cho tc x l ca CodeIgniter kh| nhanh, nhng khi thc hin cc thao tc truy xut d liu, CodeIgniter vn phi s dng cc ti nguyn ca h thng nh b nh, dung lng Trang 24

|n c s: Tm hiu PHP framework CodeIgniter aBng cch kch hot chc nng lu tr vo b m, tc ti trang ca CodeIgniter c th tng ng vi c|c trang web tnh. V cn bn, tt c cc trang u c lu trong b m. Lp trnh vin c th thit lp thi gian tn ti ca trang trong b m trc khi trang c ti to ni dung. Khi trang c ti ln u tin, ni dung ca trang c lu v{o th mc system/cache. Trong nhng ln ti sau, ni dung ca trang c ly ra v gi n trnh duyt ca ngi dng. Sau mt khong thi gian nh trc, ni dung n{y c xa v khi to li. bt chc nng lu tr b m cho mt trang, ta khai b|o nh sau trong controller ca trang :
$this->output->cache($n);

Vi $n l s pht trang s c lu trong b m. hy chc nng lu tr b m, ta ch cn xa on m trn. Cc ni dung ~ c lu trong b m trc s t ng xa sau khong thi gian $n. Lu : c th ghi vo b m, th mc (writable). 2.13. Debugging Tm v sa li l cng vic thng gp trong qu trnh xy dng h thng. CodeIgniter cung cp cho lp trnh vin lp Profiler, gip theo di d liu $_POST gi ln, cc cu truy vn cng nh c|c kt qu o lng v CPU, b nh. Lp Profiler c t ng kch hot khi h thng hot ng, nn ta khng cn phi khai bo khi to lp ny. bt profiler, ta s dng on m sau bt c }u trong controller:
$this->output->enable_profiler(TRUE); system/cache

phi c cho php ghi

Khi , thng tin profiler s c hin th cui trang. Profiler cung cp cho lp trnh vin thng tin v URI, controller v{ phng thc c gi, dung lng b nh s dng, thng tin kim chun, d liu GET, POST v cc cu truy vn. tt profiler, ta s dng on m sau:
$this->output->enable_profiler(FALSE);

Trang 25

|n c s: Tm hiu PHP framework CodeIgniter 2.14. Bo mt C ch bo mt cht ch ca CodeIgniter gip lp trnh vin c th yn tm khi xy dng ng dng. phng nga c|c phng thc tn cng ph bin nh XSS hay SQL Injection, CodeIgniter ch cho php cc k t sau xut hin trong URI: D liu kiu s v ch Du ng ~, du chm (.), du hai chm (:), du gch ngang (-), du gch di (_) Bng c|ch n{y, c|c m~ c khng th c truyn trc tip vo h thng. Mc nh, CodeIgniter khng chp nhn d liu GET v cu trc URL ca CodeIgniter da trn segment thay cho dng query truyn thng. Trong qu trnh khi ng h thng, tt c cc bin ton cc ca h thng u b hy, ngoi tr $_POST v $_COOKIE. Cng trong qu| trnh n{y, gi| tr magic_quotes_runtime trong tp tin php.ini cng c gn gi tr off. iu ny gip cho lp trnh vin khng phi lc cc k t escape khi c thng tin t c s d liu. Nguyn tc lp trnh: Trc khi a bt k d liu no vo x l trong h thng, d cho l{ thng tin c gi t pha ngi dng, cookie, gi tr URI, d liu XML-RPC hay thm ch l gi tr ca bin $_SERVER, lp trnh vin c khuyn khch thc hin cc nguyn tc sau: 1. Lp trnh vin cn quan nim All Input Data Is Evil, d liu cn phi c lc trc khi x l. CodeIgniter cung cp th vin Input and Security lc d liu. 2. Kim tra tnh ton vn ca d liu (kiu d liu, kch thc, d{i). i khi qu| trnh n{y c thay th bi bc 1. CodeIgniter cung cp th vin Form Validation gip cho vic kim tra d liu ngi dng. 3. Escape d liu trc khi a v{o lu tr trong c s d liu.

3. Nhng th vin chnh


3.1. Input and Security Th vin Input and Security c xy dng vi mc ch: Tin x l d liu h thng (cc bin $_POST, $_SERVER, $_COOKIE) nhm loi b c|c m~ c nh km. Cung cp mt s hm helper thu thp d liu nhp vo v x l chng.

Trang 26

|n c s: Tm hiu PHP framework CodeIgniter Lp Input and Security c khi to mt cch t ng khi h thng hot ng, do lp trnh vin khng cn phi khai bo khi to lp ny. Mi khi mt controller c gi, lp Input thc hin c|c h{nh ng sau: Hy bin $_GET. Hy tt c cc bin ton cc ca h thng trong trng hp register_globals = on. Lc kha ca cc bin $_POST, $_COOKIE, ch cho php kha l cc k t s, ch v mt s k t khc. Lc XSS. Chun ha k t xung dng thnh \n. 3.1.1. C ch lc XSS Cross Site Scripting (XSS) l mt k thut tn cng thng dng bng cch chn JavaScript hoc cc ngn ng khc vo d liu gi ln h thng, nhm mc ch |nh cp cookie hay thc hin cc hnh vi nguy hi khc. CodeIgniter cung cp c ch lc d liu nhm loi b c|c on m ny. Nu pht hin m~ c, CodeIgniter s chuyn chng thnh cc thc th k t (character entities). Lp trnh vin c th kch hot c ch ny hot ng trn ton h thng hoc ch p dng trong tng trng hp c th. Theo mc nh, chc nng n{y c tt trn ton h thng v n tiu tn nhiu ti nguyn khi thc hin. Nu mun kch hot, ta thay i gi tr ca bin $config['global_xss_filtering'] trong tp tin application/config/config.php.
$config['global_xss_filtering'] = TRUE;

Lp trnh vin c khuyn khch s dng chc nng n{y trong tng trng hp c th bng cch gi hm:
$this->input->xss_clean(mixed $var [, boolean $isImage])

Trong , $var l bin cn c lc XSS. Bin ty chn $isImage c s dng trong trng hp ngi dng upload mt tp tin ln h thng. Khi , h{m xss_clean() s kim tra tp tin c upload c b nhng m~ c khng. Hm tr v TRUE nu tp tin an to{n, ngc li tr v FALSE. 3.1.2. Cc hm tin ch Lp Input and Security cung cp mt s hm tin ch, gip lp trnh vin c th ly d liu t pha ngi dng an ton.
$this->input->post(string $key [, boolean $xssFilter])

Trang 27

|n c s: Tm hiu PHP framework CodeIgniter Hm s ly d liu POST t pha ngi dng, tng t nh s dng bin $_POST[$key]. Tuy nhin, hm ny s tr v FALSE nu d liu cn ly khng tn ti. Bin ty chn $xssFilter khi c truyn vo TRUE s kch hot chc nng lc XSS cho d liu ny.
post() $this->input->get(string $key [, boolean $xssFilter])

Tng t, hm get() s ly d liu GET t pha ngi dng. Hm tr v FALSE nu d liu khng tn ti.
$this->input->get_post(string $key [, boolean $xssFilter])

Hm get_post() s tm d liu trong mng $_POST trc, nu khng tm thy s chuyn sang tm trong mng $_GET. Hm tr v FALSE nu khng tm thy d liu.
$this->input->cookie(string $key [, boolean $xssFilter])

Hm cookie() s ly d liu t mng $_COOKIE. Hm tr v FALSE nu d liu khng tn ti.


$this->input->server(string $key [, boolean $xssFilter])

Hm server() s ly d liu t mng $_SERVER. Hm tr v FALSE nu d liu khng tn ti.


$this->input->ip_address()

Hm ip_address() s tr v a ch IP ca ngi s dng. Nu a ch IP khng hp l, hm s tr v chui 0.0.0.0


$this->input->valid_ip(string $ip)

Kim tra a ch IP truyn vo c hp l khng, tr v TRUE nu a ch hp l, ngc li hm tr v FALSE.


$this->input->user_agent()

Tr v thng tin trnh duyt ca ngi s dng. Nu thng tin ny khng c, hm tr v FALSE. 3.2. Form Validation Th vin Form Validation ca CodeIgniter gip lp trnh vin kim tra d liu c gi ln t pha ngi dng. Trong th vin Form Validation ~ x}y dng sn mt s rng buc d liu thng gp, ta c th p dng vo lp trnh mt cch d dng. s dng th vin ny, ta khai b|o nh sau: Trang 28

|n c s: Tm hiu PHP framework CodeIgniter


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

Sau khi khai bo, ta c th s dng c|c phng thc ca th vin ny bng cch s dng i tng $this->form_validation. 3.2.1. Thit lp cc iu kin kim tra Bng cch kt hp c|c iu kin c sn v cc hm t nh ngha, th vin Form Validation gip lp trnh vin c th kim tra d liu nhp vo t pha ngi dng. s dng c|c iu kin ny, ta khai b|o nh sau:
$this->form_validation->set_rules(string $field, string $label, string $rules);

Trong : l tn ca trng HTML c p dng iu kin ny, thng thng l gi tr thuc tnh name ca tag INPUT, TEXTAREA, SELECTLu : Nu s dng mng lm tn trng (thng gp i vi checkbox, list), v d chkColor[], ta phi truyn chnh x|c tn trng, k c k t []. $label l tn ca trng . Gi tr ca bin ny s c s dng trong cc thng bo li. $rules l chui cha cc iu kin kim tra. Cc iu kin ny c th c xy dng sn bi CodeIgniter, hoc l cc hm nhn mt i s ca PHP hay cc hm callback do lp trnh vin t nh ngha. C|c iu kin cch nhau bi k t gch ng |.
$field

Xt v d sau:
$this->form_validation->set_rules('txtUsername', 'Username', 'trim|required|min_length[5]|max_length[12]|xss_clean');

iu kin trn c ngha l{, trng txtUsername l{ trng bt buc (required), gi tr ca trng c chiu di ti thiu l 5 k t (min_length[5]), chiu di ti a l{ 12 k t (max_length[12]), d liu ny s c loi b khong trng hai u (trim) v lc XSS (xss_clean). C|c iu kin c sn trong th vin Form Validation: Tn lut
required matches

M t Tr v FALSE nu trng rng Tr v FALSE nu gi tr ca trng khng trng vi gi tr ca trng c

V d

matches[txtPassword]

Trang 29

|n c s: Tm hiu PHP framework CodeIgniter truyn vo


min_length

Tr v FALSE nu chiu di gi tr ca trng t hn s k t quy nh Tr v FALSE nu chiu di gi tr ca trng nhiu hn s k t quy nh Tr v FALSE nu chiu di gi tr ca trng khng ng bng s k t quy nh Ch cho php gi tr ca trng cha cc k t ch Ch cho php gi tr ca trng cha cc k t ch v s Ch cho php gi tr ca trng cha cc k t ch, s, du gch ngang (-) v du gch di (_) Ch cho php gi tr ca trng cha cc k t s Ch cho php trng cha gi tr s nguyn Ch cho php trng cha gi tr s t nhin Ch cho php trng cha gi tr s t nhin, b s 0 Tr v FALSE nu gi tr ca trng khng phi l mt a ch email hp l Tr v FALSE nu gi tr ca trng khng phi l mt tp hp c|c a ch email hp l, ngn c|ch bi du phy (,) Tr v FALSE nu gi tr ca trng khng phi l mt a ch IP hp l Tr v FALSE nu gi tr ca trng cha cc k t khng phi l cc k t ca m ha Base 64

min_length[5]

max_length

max_length[12]

exact_length

exact_length[8]

alpha

alpha_numeric

alpha_dash

numeric

integer

is_natural

is_natural_no_zero

valid_email

valid_emails

valid_ip

valid_base64

Trang 30

|n c s: Tm hiu PHP framework CodeIgniter Cc hm x l d liu trong th vin Form Validation: Tn hm


xss_clean prep_for_form

M t Lc XSS t d liu gi ln Chuyn i m HTML thnh cc thc th k t (character entites) hin th chnh x|c trn c|c tag nh INPUT, TEXTAREA Thm chui http:// vo URL nu khng c Lc ly a ch URL ca hnh trong tag IMG Chuyn tag ca PHP thnh cc thc th k t

prep_url strip_image_tags encode_php_tags

Th vin Form Validation cn cho php thit lp iu kin kim tra bng cch truyn vo hm set_rules() mt mng hai chiu c dng:
$config = array( array( 'field' 'label' 'rules' ), array( 'field' 'label' 'rules' ), array( 'field' 'label' 'rules' ), array( 'field' 'label' 'rules' ) ); $this->form_validation->set_rules($config); => 'txtEmail', => 'Email', => 'required' => 'txtPassConf', => 'Password Confirmation', => 'required|matches[txtPassword]' => 'txtPassword', => 'Password', => 'required' => 'txtUsername', => 'Username', => 'required'

Ta cng c th s dng cc hm mt i s ca PHP nh trim(), htmlspecialchars(), md5() thit lp iu kin. Ngoi ra, CodeIgniter cn cho php lp trnh vin s dng cc hm callback t nh ngha thit lp lut kim tra ca ring mnh, chng hn nh kim tra tn ng nhp ~ c trong c s d liu chaC|c h{m callback c bt u bng tin t callback_ v phi tr v gi tr boolean. V d:

Trang 31

|n c s: Tm hiu PHP framework CodeIgniter


$this->form_validation->set_rules('txtUsername', 'Username', 'callback_check_username'); function check_username($str) { if( $this->UserModel->usernamExists() == TRUE) return FALSE; else return TRUE; }

Sau khi thit lp c|c iu kin, ta s dng phng thc run() kim tra d liu u vo. Nu kt qu tr v l TRUE, tc l d liu tha m~n c|c iu kin a ra, ngc li hm tr v FALSE.
$this->form_validation->run();

Mt chc nng hu ch khc ca th vin CodeIgniter l{ cho php ta lu c|c iu kin kim tra d liu vo mt tp tin thit lp. C|c iu kin ny c th c sp xp vo tng nhm. Cc nhm ny c th c gi mt cch t ng hay thng qua li gi ca lp trnh vin. s dng chc nng n{y, ta to mt tp tin form_validation.php trong th mc application/config. Bn trong tp tin ny, ta khai bo mng $config cha c|c iu kin kim tra nh ~ trnh b{y, vi tn ca kha cng l{ tn nhm. V d, to hai nhm iu kin c tn l signup v email:
$config = array( 'signup' => array( array( 'field' => 'username', 'label' => 'Username', 'rules' => 'required' ), array( 'field' => 'password', 'label' => 'Password', 'rules' => 'required' ), 'email' => array( array( 'field' => 'name', 'label' => 'Name', 'rules' => 'required|alpha' ), array( 'field' => 'title', 'label' => 'Title', 'rules' => 'required' ), array( 'field' => 'message', 'label' => 'MessageBody',

Trang 32

|n c s: Tm hiu PHP framework CodeIgniter


'rules' => 'required' ) ) );

Khi , kim tra d liu cho mt nhm, ta gi phng thc truyn vo l tn ca nhm iu kin:
$this->form_validation->run('group_name');

run()

vi tham s

Lp Form Validation cn cho php gn nhm iu kin vi tng phng thc trong controller. Khi d liu c gi v{o phng thc ny, lp Form Validation s t ng kim tra c|c iu kin ~ c nh sn. V d, thit lp iu kin kim tra d liu cho phng thc signup() ca lp controller Member, ta khai bo:
$config = array( 'member/signup' => array( array( 'field' => 'username', 'label' => 'Username', 'rules' => 'required' ), array( 'field' => 'password', 'label' => 'Password', 'rules' => 'required' ), array( 'field' => 'passconf', 'label' => 'PasswordConfirmation', 'rules' => 'required' ), array( 'field' => 'email', 'label' => 'Email', 'rules' => 'required' ) ) );

3.2.2. X l li Th vin Form Validation cung cp hm validation_errors() hin th tt c li kim tra d liu trong cc tp tin view. Cc thng bo s hin th c quy nh trong tp tin system/language/english/form_validation_lang.php. Ta cng c th thay i cc thng bo ny bng cch s dng hm set_message().
$this->form_validation->set_message('rule', 'Error Message');

Trang 33

|n c s: Tm hiu PHP framework CodeIgniter Vi rule l tn iu kin dng sn ca th vin Form Validation v Error Message l thng bo s c hin th. Nu trong Error Message c cha %s, gi tr label s c thay th v{o .
$this->form_validation->set_message(required', 'Field %s must not be empty!');

thit lp thng bo cho cc hm callback, ta ch cn a tn h{m l{m i s u tin. Chng hn:


$this->form_validation->set_message('check_username', 'This username is used. Please choose another one!');

hin th li cho ring tng trng, ta c th s dng hm form_error() nh sau:


<?php echo form_error($fieldName); ?> // Vi $fieldName l tn ca trng

Theo mc nh, cc thng bo li s c t trong tag P. Ta c th thit lp li cch hin th ny cho ph hp vi giao din website. CodeIgniter cho php thit lp ton cc, p dng vi tt c cc ln gi hm validation_errors(), v cc b, p dng vi tng ln gi hm ring bit. thit lp ton cc, ta s dng hm sau:
$this->form_validation->set_error_delimiters(string $startTag, string $endTag);

Chng hn, on m~ di }y s thit lp cc thng bo li c t trong tag DIV.


$this->form_validation->set_error_delimiters('<div class="error">', '</div>');

thit lp ring cho tng ln gi hm, ta s dng:


<?php echo form_error('field name', '<div class="error">', '</div>'); ?>

Hoc
<?php echo validation_errors('<div class="error">', '</div>'); ?>

3.2.3. Cc hm tin ch
form_error(string $fieldName[, string $errorStartTag[, string $errorEndTag]])

Hm form_error() s hin th li ca trng c truyn vo.


set_value(string $fieldName[, mixed $defaultValue])

Hm set_value() s hin th li nhng d liu do ngi dng nhp v{o, trong trng hp trng hp xy ra li. H{m n{y c p dng vi cc textfield (tag INPUT) hay textarea (tag TEXTAREA). Hm nhn tn trng l{m i s th nht. i s th hai (ty chn) s hin th gi tr mc nh ca trng khi c ti ln u. Trang 34

|n c s: Tm hiu PHP framework CodeIgniter


set_select(string $fieldName[, mixed $defaultValue[, boolean $isSelected]])

Hm set_select() s hin th li gi tr ~ chn ca ngi dng trong combo box, trong trng hp xy ra li. H{m c p dng cho cc tag OPTION. Hm nhn tn trng lm i s th nht. i s th hai (ty chn) s hin th gi tr mc nh ca ty chn ny. i s th ba (ty chn) s |nh du la chn ny lm la chn mc nh.
set_checkbox(string $fieldName, mixed $defaultValue[, boolean $isSelected])

Hm set_checbox() s chn nhng checkbox ~ chn ca ngi dng, trong trng hp xy ra li. H{m c p dng cho cc tag INPUT vi type="checkbox". Hm nhn tn trng l{m i s th nht. i s th hai l gi tr ca checkbox. i s th ba (ty chn) s |nh du checkbox n{y c chn.
set_radio(string $fieldName, mixed $defaultValue[, boolean $isSelected])

Hm set_radio() s chn nhng radio button ~ c chn ca ngi dng, trong trng hp xy ra li. H{m n{y c p dng cho nhng tag INPUT c type="radio". Hm nhn tn trng l{m i s th nht. i s th hai l gi tr ca checkbox. i s th ba (ty chn) s |nh du chn cho radio button ny. 3.3. Database Th vin Database l mt th vin quan trng trong CodeIgniter. Th vin ny gip cho lp trnh vin thc hin cc thao tc vi c s d liu, theo hai hng tip cn: th tc truyn thng v Active Record. s dng th vin Database, ta s dng on m sau:
$this->load->database();

Sau khi khai bo s dng th vin, ta c th truy xut n c|c phng thc ca th vin bng i tng $this->db. 3.3.1. Thit lp thng tin c s d liu Thng liu ca h thng c lu trong tp tin application/config/database.php. C|c thng tin n{y c lu trong mt mng hai chiu $db theo mu:
$db['default']['hostname'] $db['default']['username'] $db['default']['password'] $db['default']['database'] $db['default']['dbdriver'] $db['default']['dbprefix'] $db['default']['pconnect'] = = = = = = = "localhost"; "root"; ""; "database_name"; "mysql"; ""; TRUE;

tin

Trang 35

|n c s: Tm hiu PHP framework CodeIgniter


$db['default']['db_debug'] $db['default']['cache_on'] $db['default']['cachedir'] $db['default']['char_set'] $db['default']['dbcollat'] = = = = = FALSE; FALSE; ""; "utf8"; "utf8_general_ci";

Trong Kha
hostname username password database dbdriver dbprefix pconnect

M t Tn ca my ch cha c s d liu, v d: localhost Tn ti khon truy cp Mt khu truy cp Tn c s d liu cn kt ni Loi c s d liu, chng hn: mysql, postgres, odbc Tip u ng ca c s d liu, chng hn nh tbl_ Gi tr boolean cho bit c s dng kt ni bn (persistent connection) hay khng. Kt ni bn gip cho h thng lun ch m mt kt ni duy nht n c s d liu. Gi tr boolean cho bit c hin th li ca c s d liu hay khng Gi tr boolean cho bit cc truy vn c c lu trong b m hay khng ng dn tuyt i n th mc m lu c|c truy vn Character set c s dng giao tip vi c s d liu Character collation c s dng giao tip vi c s d liu Cng kt ni, s dng trong trng hp kt ni n c s d liu Postgres SQL.

db_debug cache_on

cache_dir char_set dbcollat port

C|c thng tin trn c thit lp ty thuc vo loi c s d liu cn kt ni. chng hn nh nu s dng SQLite, ta khng cn username v password, v database s l{ ng dn n tp tin c s d liu. Bng cch s dng mng hai chiu lu thng tin, CodeIgniter cho php ta thit lp nhiu c s d liu trong cng mt ng dng (mi c s d liu s c gi l mt nhm). Khi cn kt ni n c s d liu no, ta ch cn s dng cc thng s ca c s

Trang 36

|n c s: Tm hiu PHP framework CodeIgniter d liu . CodeIgniter s chn c s d liu mc nh bng gi tr ca bin $active_group. 3.3.2. Kt ni n c s d liu Ta c th cho CodeIgniter t ng kt ni n c s d liu mi khi h thng khi ng bng c|ch thm th vin Database vo tp tin Autoloading. Cch lm ny c th gy lng ph ti nguyn h thng v i khi mt s trang c thng tin tnh khng cn n x l c s d liu. CodeIgniter cho php ta thc hin kt ni bng tay. Khi , c s d liu s ch c gi khi cn thit. V d:
// Kt ni n c s d liu mc nh $this->load->database(); // Kt ni n mt nhm c quy nh trong tp tin cu hnh c s d liu $this->load->database('groupName'); // Kt ni n c s d liu bt k $config['hostname'] = "localhost"; $config['username'] = "myusername"; $config['password'] = "mypassword"; $config['database'] = "mydatabase"; $config['dbdriver'] = "mysql"; $config['dbprefix'] = ""; $config['pconnect'] = FALSE; $config['db_debug'] = TRUE; $config['cache_on'] = FALSE; $config['cachedir'] = ""; $config['char_set'] = "utf8"; $config['dbcollat'] = "utf8_general_ci"; $this->load->database($config); // Hoc s dng Data Source Name $dsn = 'dbdriver://username:password@hostname/database?char_set=utf8&dbcollat=utf8_gene ral_ci&cache_on=true&cachedir=/path/to/cache'; $this->load->database($dsn);

Trong cc ng dng phc tp, ta thng thao tc vi nhiu c s d liu cng lc. Th vin Database cho php thc hin yu cu ny, bng cch truyn gi tr TRUE l{m i s th hai khi gi n phng thc kt ni:
$fDb = $this->load->database('group_one', TRUE); $sDb = $this->load->database('group_two', TRUE);

3.3.3. Truy vn d liu thc hin mt cu truy vn n{o , ta c th s dng phng thc sau: Trang 37

|n c s: Tm hiu PHP framework CodeIgniter


$this->db->query(string $sql);

Phng thc query() tr v mt i tng resource khi thc hin cu lnh SELECT, v tr v gi tr boolean khi thc hin cu lnh INSERT, UPDATE, DELETE cho bit truy vn c c x l thnh cng khng. Truy vn khi s dng phng thc query() s khng c t ng escape, iu ny c th lm xut hin l hng cho SQL Injection. Th vin Database cung cp 3 phng thc escape d liu trc khi a v{o phng thc query():
$this->db->escape();

Phng thc escape() s t ng nhn dng kiu d liu truyn vo. Nu l{ d liu kiu chui, phng thc escape() s t ng thm du nh|y n v{o chui.
$this->db->escape_str();

Phng thc escape_str() s t ng thm du nh|y n v{o d liu cn escape, bt k l{ kiu d liu g.
$this->db->escape_like_str();

Phng thc escape_like_str() s escape cc k t c bit trong t kha tm kim (nh %, _) a v{o c}u lnh LIKE. Mt cch thc an to{n hn thc hin truy vn d liu l s dng binding, tc l gi tr ca bin s c thay th cho k t i din (wildcard). Th vin Database trong CodeIgniter s dng du ? lm k t i din. V d:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; $this->db->query($sql, array(3, 'live', 'Rick'));

Tng phn t ca mng s c ln lt thay th cc du ? tng ng. D liu ny s c t ng escape, gip cho cu truy vn tr nn an to{n hn. Sau khi thc hin truy vn, phng thc query() s tr v mt i tng resource cha cc kt qu. CodeIgniter cung cp cho chng ta mt s phng thc x l i tng ny: result() C php
$query->result()

Trang 38

|n c s: Tm hiu PHP framework CodeIgniter Phng thc result() gip ta truy cp cc kt qu tr v ca truy vn. Phng thc ny cha mt mng c|c i tng kt qu nu truy vn thnh cng, ngc li tr v mt mng rng. Phng thc result() tng ng vi phng thc result_object(). V d:
$query = $this->db->query($sql); foreach { echo echo echo } ($query->result() as $row) $row->title; $row->name; $row->body;

result_array() C php
$query->result_array()

Phng thc result_array() c chc nng nh phng thc result(), nhng mi mu tin c lu trong mng. Kt qu tr v l mt mng cc mu tin. V d:
$query = $this->db->query($sql); foreach { echo echo echo } ($query->result_array() as $row) $row['title']; $row['name']; $row['body'];

row() C php
$query->row([int $index])

Phng thc row() ch tr v mt mu tin duy nht. Nu kt qu c nhiu mu tin, mu tin u tin s c chn. Kt qu tr v s l mt i tng.
$query = $this->db->query($sql); if ($query->num_rows() > 0) { $row = $query->row(); echo $row->title; echo $row->name;

Trang 39

|n c s: Tm hiu PHP framework CodeIgniter


echo $row->body; }

Ta c th chn mt mu tin c th bng cch truyn vo th t ca mu tin l{m i s th nht.


$row = $query->row(3);

row_array() C php
$query->row_array([int $index])

Phng thc row_array() c chc nng ging nh phng thc row(), nhng mu tin tr v s l mt mng, thay v mt i tng. V d:
$query = $this->db->query($sql); if ($query->num_rows() > 0) { $row = $query->row_array(); echo $row['title']; echo $row['name']; echo $row['body']; }

CodeIgniter cn cung cp mt s phng thc di chuyn trong tp kt qu tr v, bao gm:


// Ly mu tin u tin $row = $query->first_row() // Ly mu tin cui cng $row = $query->last_row() // Ly mu tin tip theo $row = $query->next_row() // Ly mu tin pha trc $row = $query->previous_row()

Theo mc nh, nhng phng thc ny tr v mt i tng kt qu. nhn c mt mng gi tr, ta truyn chui 'array' l{m i s th nht.
$row $row $row $row = = = = $query->first_row('array') $query->last_row('array') $query->next_row('array') $query->previous_row('array')

Trang 40

|n c s: Tm hiu PHP framework CodeIgniter Mt s phng thc h tr num_rows() C php


$query->num_rows()

Phng thc num_rows() tr v s mu tin trong mt tp kt qu. V d:


$query = $this->db->query("YOUR QUERY"); if ($query->num_rows() > 0) { $row = $query->row(); echo $row->title; echo $row->name; echo $row->body; }

num_fields() C php
$query->num_fields()

Phng thc num_fields() tr v s trng d liu trong truy vn. V d:


$query = $this->db->query('SELECT * FROM my_table'); echo $query->num_fields();

free_result() C php
$query->free_result()

Phng thc free_result() s gii phng vng b nh ang cha kt qu. Thng thng, PHP s t ng gii phng b nh sau khi thc hin xong cc lnh. Trong mt s trng hp phi x l nhiu truy vn, ta cn gii phng b nh nng cao hiu nng chng trnh. V d:
$query = $this->db->query('SELECT title FROM my_table'); foreach ($query->result() as $row)

Trang 41

|n c s: Tm hiu PHP framework CodeIgniter


{ echo $row->title; } $query->free_result(); // Bin $query c gii phng $query2 = $this->db->query('SELECT name FROM some_table'); $row = $query2->row(); echo $row->name; $query2->free_result(); // Bin $query2 c gii phng

3.3.4. Active Record Trong cng ngh phn mm, Active Record l mt mu thit k c s dng trong cc ng dng c lin quan n c s d liu. Active Record xy dng mt giao din (interface) c c|c phng thc nh select(), insert(), update(), delete()v{ thuc tnh t nhiu tng ng vi cc ct trong bng d liu. Active Record l mt hng tip cn truy xut d liu. Mt bng d liu hay mt khung nhn (view) c nh x thnh mt lp. Khi , mt i tng ca lp tng ng vi mt dng trong bng. Nu mt i tng c cp nht thng tin th c s d liu cng c cp nht. Active Record trong CodeIgniter c xy dng nhm h tr lp trnh vin thc hin cc thao tc vi c s d liu nhanh chng, n gin v an ton hn. Cc cu truy vn c xy dng mt cch t ng, ty thuc vo loi c s d liu ta ang thao t|c. D liu c a v{o cng khng cn phi escape, Active Record s t ng thc hin vic ny. V d:
$this->db->get('tblName'); // Tng ng vi cu lnh SQL: // SELECT * FROM `tblName` $this->db->select('username, password') $this->db->from('user'); // Tng ng vi cu lnh SQL: // SELECT `username`, `password` FROM `tbl_user`

Lu : Nu s dng PHP5, ta c th lin kt c|c c}u phng thc li vi nhau (method chaining) nh trong v d sau:
$this->db->select('username, password')->from('user');

Active Record c kch hot bng cch thit lp gi tr trong tp tin application/config/database.php.
$active_record = TRUE;

Trang 42

|n c s: Tm hiu PHP framework CodeIgniter 3.3.5. Truy vn d liu Th vin Database h tr xy dng cc cu lnh SELECT bng nhng phng thc sau: get() C php:
$this->db->get([string $tableName[, int $limit, int $offset]]);

Hm get() s tr v mt i tng resource cha kt qu ca cu truy vn. Nu i s th nht c truyn vo, hm s ly tt c cc dng trong bng d liu.
$this->db->get('data'); // Tng ng vi cu truy vn: SELECT * FROM `tbl_data`

i s th hai v th ba cho php gii hn s kt qu tr v.


$this->db->get('data', 10, 20); // Tng ng vi cu truy vn: SELECT * FROM `tbl_data` LIMIT 10, 20

Trong trng hp khng c i s n{o c truyn vo, hm get() s thc hin truy vn vi cu lnh c xy dng bi c|c phng thc select(), from(), where() V d:
$this->db->select('username, password'); $this->db->from('member'); $this->db->where(array('user_id' => 1)); $query = $this->db->get(); // Tng ng vi truy vn: // SELECT `username`, `password` FROM `tbl_member` WHERE `user_id` = 1

get_where() C php:
$this->db->get([string $tableName[, array $condtions, [, int $limit, int $offset]]]);

Hm get_where() tng t nh h{m get(). im khc bit nm i s th hai ca h{m. i s ny nhn mt mng lm gi tr, gip xy dng mnh WHERE, thay v phi s dng hm $this->db->where(). V d:
$query = $this->db->get_where('member', array('user_id' => 1)); // Tng ng vi truy vn: // SELECT * FROM `tbl_member` WHERE `user_id` = 1

Trang 43

|n c s: Tm hiu PHP framework CodeIgniter select() C php


$this->db->select([string $fields = '*'[, boolean $isProtected = TRUE]]);

Hm select() gip ta chn nhng trng cn thit trong bng d liu bng cch truyn vo chui cha tn trng l{m i s th nht, cc trng cch nhau bi du phy (,). Nu khng c i s truyn vo, mc nh s ly tt c (tng ng vi SELECT *).
$this->db->select('title, content, date'); $query = $this->db->get('mytable'); // Tng ng: SELECT `title`, `content`, `date` FROM `mytable`

i s th hai cho bit CodeIgniter c bo v tn trng v tn bng trong truy vn bng k t backtick (`) hay khng.
$this->db->select('(SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid', FALSE); $query = $this->db->get('mytable');

select_max() C php:
$this->db->select_max(string $fieldName[, string $alias])

Phng thc select_max() cho php ta s dng hm MAX() trn mt thuc tnh trong bng d liu. i s th hai (ty chn) cho php ta to tn thay th (alias) cho kt qu tr v. V d:
$this->db->select_max('age', 'member_age'); $query = $this->db->get('members'); // Tng ng: SELECT MAX(age) as member_age FROM members

select_min() C php
$this->db->select_min (string $fieldName[, string $alias])

Tng t nh select_max(), phng thc select_min() cho php ta s dng hm MIN() trn mt thuc tnh trong bng d liu. i s th hai (ty chn) cho php to tn thay th cho kt qu tr v. Trang 44

|n c s: Tm hiu PHP framework CodeIgniter V d:


$this->db->select_min('age'); $query = $this->db->get('members'); // Tng ng: SELECT MIN(age) AS age FROM members

select_avg() C php
$this->db->select_avg(string $fieldName[, string $alias])

Phng thc select_avg() cho php ta s dng hm AVG() trn mt thuc tnh trong bng d liu. i s th hai (ty chn) cho php to tn thay th cho kt qu tr v. V d:
$this->db->select_avg('age'); $query = $this->db->get('members'); // Tng ng: SELECT AVG(age) as age FROM members

select_sum() C php
$this->db->select_sum(string $fieldName[, string $alias])

Phng thc select_sum() cho php ta s dng hm SUM() trn mt thuc tnh trong bng d liu. i s th hai (ty chn) cho php to tn thay th cho kt qu tr v. V d:
$this->db->select_sum('age'); $query = $this->db->get('members'); // Tng ng: SELECT SUM(age) AS age FROM members

from() C php
$this->db->from(string $tableName)

Phng thc from() xy dng cu lnh FROM, cho php ta chn nhng bng d liu truy vn.
$this->db->select('title, content, date'); $this->db->from('mytable'); $query = $this->db->get();

Trang 45

|n c s: Tm hiu PHP framework CodeIgniter


// Tng ng: SELECT title, content, date FROM mytable

Ta cng c th s dng phng thc get() chn bng d liu trong truy vn. join() C php
$this->db->join(string $tableName, string $condition[, string $nature])

Phng thc join() xy dng cu lnh JOIN, cho php kt hp cc bng d liu vi nhau. Phng thc nhn tn bng cn kt hp l{m i s th nht v{ iu kin lin kt l{m i s th hai.
$this->db->select(); $this->db->from('blogs'); $this->db->join('comments', 'comments.id = blogs.id'); $query = $this->db->get(); // Tng ng: // SELECT * FROM blogs // JOIN comments ON comments.id = blogs.id

c th thc hin php kt vi nhiu bng d liu, ta gi phng thc join() nhiu ln. i s th ba (ty chn) trong phng thc cho php ta thit lp kiu lin kt, bao gm: left, right, outer, inner, left outer, and right outer.
$this->db->join('comments', 'comments.id = blogs.id', 'left'); // Tng ng: LEFT JOIN comments ON comments.id = blogs.id

where() Th vin Database ca CodeIgniter cung cp 4 cch xy dng iu kin WHERE cho truy vn. D liu c truyn v{o phng thc ny s c t ng escape, gip cho cu truy vn an to{n hn. 1. So snh mt thuc tnh C php
$this->db->where(string $field, string $value)

Phng thc nhn tn ca thuc tnh l{m i s th nht v gi tr ca thuc tnh lm i s th hai. Nu phng thc c gi nhiu ln, c|c iu kin s c lin kt vi nhau bng ton t AND.
$this->db->where('name', $name);

Trang 46

|n c s: Tm hiu PHP framework CodeIgniter


// Tng ng: WHERE name = 'Joe' $this->db->where('name', $name); $this->db->where('title', $title); $this->db->where('status', $status); // Tng ng: WHERE name 'Joe' AND title = 'boss' AND status = 'active'

Ta c th chn cc ton t khc thay cho ton t so snh bng (=) vo gi tr trong i s th nht.
$this->db->where('name !=', $name); $this->db->where('id <', $id); // Tng ng: WHERE name != 'Joe' AND id < 45

2. S dng mng C php


$this->db->where(array $conditions)

Ta c th thit lp nhiu iu kin cng lc bng cch s dng mng mt chiu l{m i s th nht cho phng thc where().
$array = array('name' => $name, 'title' => $title, 'status' => $status); $this->db->where($array); // Tng ng: WHERE name = 'Joe' AND title = 'boss' AND status = 'active'

Cng nh c|ch 1, ta cng c th chn cc ton t so snh khc ton t bng.


$array = array('name !=' => $name, 'id <' => $id, 'date >' => $date); $this->db->where($array);

3. S dng chui
$where = "name='Joe' AND status='boss' OR status='active'"; $this->db->where($where);

Phng thc where() chp nhn mt i s th 3 (ty chn). Nu i s n{y c thit lp bng TRUE, CodeIgniter s khng bo v tn cc thuc tnh v bng d liu bng k t backtick (`). V d:
$this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE);

or_where() Phng thc or_where() ging nh phng thc lin kt vi nhau bng ton t OR.
where()

nhng c|c iu kin c Trang 47

|n c s: Tm hiu PHP framework CodeIgniter V d:


$this->db->where('name !=', $name); $this->db->or_where('id >', $id); // Tng ng: WHERE name != 'Joe' OR id > 50

where_in() Phng thc where_in() s to cc truy vn dng WHEREIN Nu phng thc ny c gi nhiu ln, c|c iu kin s c lin kt vi nhau bng lnh AND. V d:
$names = array('Frank', 'Todd', 'James'); $this->db->where_in('username', $names); // Tng ng: WHERE username IN ('Frank', 'Todd', 'James')

or_where_in() Phng thc or_where_in() c chc nng ging nh phng thc where_in(), ch khc ch, c|c iu kin s c lin kt vi nhau bng lnh OR nu phng thc c gi nhiu ln. V d:
$names = array('Frank', 'Todd', 'James'); $this->db->or_where_in('username', $names); // Tng ng: OR username IN ('Frank', 'Todd', 'James')

where_not_in() Phng thc where_not_in() s to cc truy vn dng WHERENOT INNu phng thc n{y c gi nhiu ln, c|c iu kin s c lin kt vi nhau bng lnh AND. V d:
$names = array('Frank', 'Todd', 'James'); $this->db->where_not_in('username', $names); // Produces: WHERE username NOT IN ('Frank', 'Todd', 'James')

or_where_not_in() Phng thc or_where_not_in() c chc nng ging phng thc nhng c|c iu kin s c lin kt vi nhau bng lnh OR. V d:
$names = array('Frank', 'Todd', 'James'); $this->db->or_where_not_in('username', $names); where_not_in(),

Trang 48

|n c s: Tm hiu PHP framework CodeIgniter


// Produces: OR username NOT IN ('Frank', 'Todd', 'James')

like() Phng thc like() gip xy dng cu lnh LIKE trong truy vn. CodeIgniter cho php ta s dng phng thc ny theo hai cch: 1. S dng gi tr C php
$this->db->like(string $field, mixed $value[, string $wildcardPlace]);

Phng thc like() nhn tn trng cn so s|nh l{m i s th nht v gi tr cn so s|nh l{m i s th hai. i s th ba (ty chn) cho php ta t v tr ca k t % trong gi tr so s|nh. i s ny c 3 gi tr: before (du % s c t trc gi tr), after (du % s c t sau gi tr) v both (du % s c t c hai u). Nu phng thc n{y c gi nhiu ln, c|c iu kin s c lin kt vi nhau bng lnh AND. V d:
$this->db->like('title', 'match'); $this->db->like('body', 'match', 'before'); // Tng ng: WHERE title LIKE '%match%' AND body LIKE '%match'

2. S dng mng Ta cng c th s dng mng mt chiu xy dng phng thc. Mng ny c kha l tn ca trng cn so snh v gi tr l t kha cn tm. V d:
$array = array('title' => $match, 'page1' => $match, 'page2' => $match); $this->db->like($array); // Tng ng: WHERE title LIKE '%match%' AND page1 LIKE '%match%' AND page2 LIKE '%match%'

or_like() Phng thc or_like() ging nh phng thc lin kt vi nhau bng lnh OR. V d: Trang 49
like(),

nhng c|c iu kin s c

|n c s: Tm hiu PHP framework CodeIgniter


$this->db->like('title', 'match'); $this->db->or_like('body', $match); // Tng ng: WHERE title LIKE '%match%' OR body LIKE '%match%'

not_like() Phng thc not_like() gip xy dng cu lnh NOT LIKE trong truy vn. Khi phng thc n{y c gi nhiu ln, c|c iu kin s c lin kt vi nhau bng lnh AND. Cch s dng phng thc ny ging nh phng thc like(). V d:
$this->db->not_like('title', 'match'); // WHERE title NOT LIKE '%match%

or_not_like() Phng thc or_not_like() cng ging nh phng thc kin s c lin kt vi nhau bng lnh OR. V d:
$this->db->like('title', 'match'); $this->db->or_not_like('body', 'match'); // Tng ng: WHERE title LIKE '%match% OR body NOT LIKE '%match%' not_like(),

nhng c|c iu

group_by() Cho php xy dng cu lnh GROUP BY. Phng thc ny nhn tn ca trng cn nhm li l{m i s th nht. Trong trng hp cn nhm nhiu trng, ta c th truyn vo mt mng cha tn c|c trng. V d:
$this->db->group_by('title'); // Tng ng: GROUP BY title $this->db->group_by(array('title', 'date')); // Tng ng: GROUP BY title, date

having() Phng thc having() cho php thm c|c iu kin chn nhm trong truy vn. Phng thc ny nhn tn trng l{m i s th nht, iu kin chn l{m i s th 2. Hoc ta c th truyn mt mng cha c|c iu kin v{o l{m i s th nht.

Trang 50

|n c s: Tm hiu PHP framework CodeIgniter V d:


$this->db->having('user_id = 45'); // Tng ng: HAVING user_id = 45 $this->db->having('user_id', 45); // Tng ng: HAVING user_id = 45 $this->db->having(array('title =' => 'My Title', 'id <' => $id)); // Tng ng: HAVING title = 'My Title', id < 45

CodeIgniter t ng bo v tn c|c trng v bng d liu bng k t backtick (`). Nu khng mun thc hin u ny, ta truyn gi tr FALSE v{o l{m i s th ba ca phng thc. V d:
$this->db->having('user_id', 45); // Tng ng: HAVING `user_id` = 45 $this->db->having('user_id', 45, FALSE); // Tng ng: HAVING user_id = 45

or_having() Phng thc ny ging nh phng thc kt vi nhau bng lnh OR. distint() Phng thc distint() s thm t kha DISTINT vo cu truy vn. V d:
$this->db->distinct(); $this->db->get('table'); // Tng ng: SELECT DISTINCT * FROM table having(),

nhng c|c iu kin s c lin

order_by() Phng thc order_by() gip xy dng cu lnh ORDER BY trong truy vn, nhm sp xp cc gi tr tr v. Phng thc ny nhn tn trng cn sp xp l{m i s th nht. i s th hai s quyt nh cch thc sp xp, c 3 gi tr mc nh: asc (t trn xung mc nh), desc (t di ln) v random (ngu nhin). V d:
$this->db->order_by("title", "desc"); // Tng ng: ORDER BY title DESC

Trang 51

|n c s: Tm hiu PHP framework CodeIgniter


$this->db->order_by('title desc, name asc'); // Tng ng: ORDER BY title DESC, name ASC $this->db->order_by("title", "desc"); $this->db->order_by("name", "asc"); // Tng ng: ORDER BY title DESC, name ASC

limit() Phng thc limit() gip xy dng cu lnh LIMIT, nhm gii hn s lng kt qu tr v. Phng thc ny nhn s kt qu tr v l{m i s th nht, i s th hai th hin ct mc ly kt qu. V d:
$this->db->limit(10); // Tng ng: LIMIT 10 $this->db->limit(10, 20); // Tng ng: LIMIT 20, 10

count_all_results() Phng thc count_all_results() tr v s kt qu ca mt cu truy vn. V d:


$this->db->like('title', 'match'); $this->db->from('my_table'); echo $this->db->count_all_results(); // Tr v mt s nguyn, v d 17

count_all() Phng thc count_all() tr v s mu tin trong mt bng d liu. Phng thc ny nhn tn bng l{m i s th nht. V d:
echo $this->db->count_all('my_table'); // Tr v s mu tin trong bng d liu my_table

3.3.6. Thao tc d liu thc hin cc thao tc thm, xa, sa d liu, th vin Database trong CodeIgniter cung cp cho nhng phng thc sau: insert()

Trang 52

|n c s: Tm hiu PHP framework CodeIgniter C php


$this->db->insert(string $table, array/object $values);

Phng thc insert() gip chn mt dng mi vo bng d liu. Phng thc ny nhn tn ca bng l{m i s th nht. i s th hai l mt mng c kha l tn trng v gi tr ca kha cng l{ gi| tr cn chn vo. V d:
$data = array( 'title' => 'My title' , 'name' => 'My Name' , 'date' => 'My date' ); $this->db->insert('mytable', $data); // Tng ng: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')

Ta cng c th truyn vo mt i tng l{m i s th hai. Trong , c|c thuc tnh ca i tng l{ tn trng, v gi tr ca cc thuc tnh n{y cng l{ gi| tr cn thm vo. V d:
/* class Myclass { var $title = 'My Title'; var $content = 'My Content'; var $date = 'My Date'; } */ $object = new Myclass; $this->db->insert('mytable', $object); // Tng ng: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')

Tt c gi tr s c escape, gip cho truy vn an to{n hn. update() C php


$this->db->update(string $table, array/object $data[, array $conditions])

Trang 53

|n c s: Tm hiu PHP framework CodeIgniter Phng thc update() gip cp nht d liu trong bng. Phng thc ny nhn tn bng l{m i s th nht, cc d liu cn cp nht l{m i s th hai, i s th ba (ty chn) cho php thit lp iu kin cp nht d liu. V d:
$data = array( 'product_name' => 'Nike AirMax+ 2009', 'product_price' => 160 ); $this->db->update('product', $data, array('product_id' => $id)); // Tng ng // UPDATE `tbl_product` SET `product_name` = 'Nike AirMax+ 2009', // `product_price` = 160 WHERE `product_id` = {$id}

set() C php:
$this->db->set(string $field, string $value[, boolean $isEscaped]);

Thay v truyn vo mt mng hay i tng cha d liu khi thc hin thm/cp nht d liu, ta c th s dng phng thc set() gn gi tr cho mt trng c th. Phng thc ny nhn tn trng l{m i s th nht, gi tr ca trng l{m i s th hai. V d:
$this->db->set('name', $name); $this->db->set('title', $title); $this->db->set('status', $status); $this->db->insert('mytable'); // Tng ng: INSERT INTO `tbl_mytable` (name, title, status) VALUES ($name, $title, $status)

i s th ba (ty chn) cho bit d liu ca trng c c escape hay khng. Mc nh l TRUE, ta c th thay i bng cch truyn vo gi tr FALSE. V d:
$this->db->set('field', 'field+1', FALSE); $this->db->insert('mytable'); // Tng ng INSERT INTO mytable (field) VALUES (field+1) $this->db->set('field', 'field+1'); $this->db->insert('mytable'); // Tng ng INSERT INTO mytable (field) VALUES ('field+1')

Trang 54

|n c s: Tm hiu PHP framework CodeIgniter Ta cng c th truyn vo mt mng/i tng thit lp gi tr cho nhiu trng cng lc. V d:
$array = array('name' => $name, 'title' => $title, 'status' => $status); $this->db->set($array); $this->db->insert('mytable'); /* class Myclass { var $title = 'My Title'; var $content = 'My Content'; var $date = 'My Date'; } */ $object = new Myclass; $this->db->set($object); $this->db->insert('mytable');

delete() C php
$this->db->delete(string $table, array $conditions)

Phng thc delete() gip xa d liu trong bng. Phng thc ny nhn tn bng l{m i s th nht. i s th hai gip x|c nh iu kin nhng mu tin no s c xa. V d:
$this->db->delete('mytable', array('id' => $id)); // Tng ng: DELETE FROM `mytable` WHERE `id` = $id

Nu mt mng cc tn bng c truyn v{o, phng thc ny s thc hin xa d liu trn nhiu bng. V d:
$tables = array('table1', 'table2', 'table3'); $this->db->where('id', '5'); $this->db->delete($tables);

empty_table() C php Trang 55

|n c s: Tm hiu PHP framework CodeIgniter


$this->db->empty_table(string $table)

Phng thc empty_table() gip xa tt c mu tin trong mt bng d liu bng cch s dng cu lnh DELETE FROM. Phng thc ny nhn tn bng l{m i s duy nht. V d:
$this->db->empty_table('mytable'); // Tng ng: DELETE FROM mytable

truncate() C php
$this->db->truncate(string $table)

Phng thc truncate() cng gip xa tt c mu tin trong bng d liu. im khc bit vi phng thc empty_table() l truncate() khng th c thc hin nu bng cn xa lm kha ngoi bng khc. Bng sau khi c xa s khi ng li ch mc. Phng thc n{y cng nhn tn bng l{m i s duy nht. Trong trng hp cu lnh TRUNCATE khng c php thc hin, phng thc ny s s dng DELETE FROM. V d:
$this->db->from('mytable'); $this->db->truncate(); // hoc $this->db->truncate('mytable'); // Tng ng: // TRUNCATE mytable

3.3.7. Lu tr truy vn trong Active Record Thng thng, sau khi thc hin mt truy vn, th vin Database s thit lp li gi tr cc bin cho ln truy vn tip theo. Bng c|ch lu li cc thng tin ny (caching), lp trnh vin c th ngn chn vic ti thit lp gi tr cc bin v s dng li chng mt cch d dng. CodeIgniter h tr caching cho cc cu lnh sau: SELECT, FROM, JOIN, WHERE, LIKE, GROUP_BY, HAVING, ORDER_BY, SET. Di }y l{ c|c phng thc h tr lu tr truy vn: start_cache() Phng thc ny s c gi khi bt u caching. Tt c cc cu lnh trong danh sch h tr s c lu li. stop_cache() Trang 56

|n c s: Tm hiu PHP framework CodeIgniter Phng thc ny s ngng vic lu tr cc truy vn li. flush_cache() Tt c truy vn ang c lu tr s b xa. V d:
$this->db->start_cache(); $this->db->select('field1'); $this->db->stop_cache(); $this->db->get('tablename'); // Tng ng: SELECT `field1` FROM (`tablename`) $this->db->select('field2'); $this->db->get('tablename'); // Tng ng: SELECT `field1`, `field2` FROM (`tablename`) $this->db->flush_cache(); $this->db->select('field2'); $this->db->get('tablename'); // Tng ng: SELECT `field2` FROM (`tablename`)

3.3.8. Giao dch (transaction) trong CodeIgniter Th vin Database ca CodeIgniter cho php thc hin giao dch (transaction) trn cc h qun tr c s d liu c h tr. i vi h qun tr MySQL, ta cn chn kiu lu tr bng l InnoDB hoc BDB thay v kiu MyISAM thng dng c th thc hin giao dch. Cch tip cn ca CodeIgniter khi thc hin giao dch tng i ging vi th vin ADODB. Bng c|ch , lp trnh vin c th n gin ha vic lp trnh. Trong hu ht c|c trng hp, ch cn hai dng lnh l c th thc hin giao dch. V cn bn, thc hin giao dch s cn kh nhiu t{i nguyn c{i t v n s theo di cc truy vn. Nu truy vn thnh cng, giao dch s xc nhn (commit). Ngc li, tt c nhng truy vn trc s b hy, tnh trng ca c s d liu s c quay v trng th|i ban u (rollback). Mc nh, th vin Database thc hin cc giao dch theo ch nghim ngt (strict mode). Nu thc hin nhiu nhm giao dch, v xy ra mt nhm b li, th tt c cc nhm khc s c rollback. Trong trng hp ch nghim ngt b v hiu ha, cc nhm giao dch s c thc hin c lp vi nhau. bt/tt ch ny, ta s dng hm trans_strict() nh sau: Trang 57

|n c s: Tm hiu PHP framework CodeIgniter


$this->db->trans_strict(FALSE);

thc hin giao dch, ta s dng hai phng thc trans_start() v trans_complete() nh sau:
$this->db->trans_start(); $this->db->query('AN SQL QUERY...'); $this->db->query('ANOTHER QUERY...'); $this->db->query('AND YET ANOTHER QUERY...'); $this->db->trans_complete();

S truy vn bn trong thn ca hai phng thc ny l khng gii hn. H thng s t ng commit hay rollback da vo kt qu ca cu truy vn. Ngay sau khi khai b|o phng thc trans_start(), h thng s t ng thc hin giao dch. Nu khng mun thc hin giao dch, ta c th s dng phng thc trans_off(). Khi c|c c}u truy vn bn trong cp hm trans_start() v trans_complete() vn c thc hin m khng c h tr giao dch. Th vin Database cn cho php thc hin giao dch theo ch kim tra (test mode). Ngha l{ sau khi thc hin giao dch, h thng s c rollback bt k cc truy vn thnh cng hay khng. bt ch kim tra, ta truyn gi tr TRUE vo hm trans_start() nh sau:
$this->db->trans_start(TRUE); // Query will be rolled back $this->db->query('AN SQL QUERY...'); $this->db->trans_complete();

Theo mc nh, nu xy ra li khi thc hin giao dch, h thng s t ng rollback. Ta c th iu khin qu trnh ny bng cch s dng phng thc trans_begin(). Phng thc ny thng bo cho CodeIgniter thc hin giao dch bng tay (manually).
$this->db->trans_begin(); $this->db->query('AN SQL QUERY...'); $this->db->query('ANOTHER QUERY...'); $this->db->query('AND YET ANOTHER QUERY...'); if ($this->db->trans_status() === FALSE) { $this->db->trans_rollback(); } else { $this->db->trans_commit(); }

3.3.9. insert_id()

Mt s phng thc tr gip

Trang 58

|n c s: Tm hiu PHP framework CodeIgniter C php:


$this->db->insert_id()

Phng thc ny tr v s ID khi chn mt dng mi v{o c s d liu. affected_rows() C php


$this->db->affected_rows()

Phng thc affected_rows() tr v s dng d liu c t|c ng khi thc hin cc cu lnh INSERT, UPDATE, DELETE. Trong MySQL, khi thc hin truy vn DELETE FROM TABLE, s dng tr v lun bng 0. Tuy nhin, th vin Database trong CodeIgniter c th tr v ng s dng ~ c xa. count_all() C php
$this->db->count_all(string $tableName)

Phng thc count_all() tr v s dng d liu ang c ca mt bng. platform() C php


$this->db->platform()

Phng thc platform() tr v tn h qun tr c s d liu ang c s dng (MySQL, MSSQL, Postgres SQL). version() C php
$this->db->version()

Phng thc version() tr v phin bn h qun tr c s d liu ang s dng. last_query() C php
$this->db->last_query()

Trang 59

|n c s: Tm hiu PHP framework CodeIgniter Phng thc last_query() tr v cu truy vn va c thc hin. insert_string() C php
$this->db->insert_string(string $tableName, array $data)

Phng thc insert_string() s to ra cu lnh INSERT. Phng thc ny nhn tn bng s thm d liu l{m i s th nht, v mng cha d liu cn thm l{m i s th hai. V d:
$data = array('name' => $name, 'email' => $email, 'url' => $url); $str = $this->db->insert_string('table_name', $data); // Kt qu INSERT INTO table_name (name, email, url) VALUES ('Rick', 'rick@example.com', 'example.com')

update_string() C php
$this->db->update_string(string $tableName, array $data, array $where)

Phng thc insert_string() s to ra cu lnh UPDATE. Phng thc ny nhn tn bng s thm d liu l{m i s th nht, mng cha d liu cn thm l{m i s th hai v mng cha c|c iu kin cp nht l{m i s th ba. V d:
$data = array('name' => $name, 'email' => $email, 'url' => $url); $where = "author_id = 1 AND status = 'active'"; $str = $this->db->update_string('table_name', $data, $where); // Kt qu UPDATE table_name SET name = 'Rick', email = 'rick@example.com', url = 'example.com' WHERE author_id = 1 AND status = 'active'

Hai phng thc insert_string() v update_string() c dng to ra chui truy vn, gip to cu lnh nhanh chng. D liu c truyn v{o hai phng thc n{y u c escape, gip cho truy vn an to{n hn. list_tables() C php
$this->db->list_tables()

Trang 60

|n c s: Tm hiu PHP framework CodeIgniter Phng thc list_tables() tr v mt mng cha cc tn cc bng ca c s d liu ang kt ni. table_exists() C php
$this->db->table_exits(string $tableName)

Phng thc table_exists() gip kim tra mt bng c tn ti trong c s d liu ang kt ni hay khng. list_fields() C php
$this->db->list_fields(string $tableName)

Phng thc list_fields() tr v mt mng cha tn c|c trng ca bng truyn vo. Ngo{i ra, phng thc n{y cng c th c s dng ly c|c trng c tr v trong mt truy vn, chng hn:
$query = $this->db->query('SELECT * FROM some_table'); foreach ($query->list_fields() as $field) { echo $field; }

field_exists() C php
$this->db->field_exits(string $fieldName, string $tableName)

Phng thc field_exists() gip kim tra mt trng c tn ti trong mt bng no khng. field_data() C php
$this->db->field_data(string $tableName)

Phng thc field_date() tr v mt mng c|c i tng cha thng tin v c|c trng trong mt bng n{o .

Trang 61

|n c s: Tm hiu PHP framework CodeIgniter


$fields = $this->db->field_data('table_name'); foreach { echo echo echo echo } ($fields as $field) $field->name; $field->type; $field->max_length; $field->primary_key;

Trong :
name: tn trng max_length: chiu di d liu ti a ca trng primary_key: c gi tr

l 1 nu trng ny l kha chnh type: kiu d liu ca trng

call_function() C php
$this->db->call_function(string $functionName[, mixed $param1, mixed $param2])

Phng thc call_function() cho php ta s dng mt hm dng sn ca PHP nhng khng c h tr trong CodeIgniter. V d, sa dng hm mysql_get_client_info() vn khng c h tr trong CodeIgniter, ta thc hin:
$this->db->call_function('get_client_info');

Khi s dng phng thc call_function(), ta khng cn thit phi truyn tin t mysql_. Cc tin t ny s c t ng thm vo, da vo h qun tr c s d liu ang kt ni. iu ny gip nng cao kh nng m rng ca chng trnh. 3.3.10. Qun tr c s d liu vi Database Forge & Database Utility Th vin Database Forge & Database Utility c xy dng nhm gip lp trnh vin thc hin c|c thao t|c lin quan n vic qun tr c s d liu, chng hn nh thm/xa/sa c s d liu, thay i thng tin bng Khai bo s dng Database Forge & Database Utility Cng ging nh s dng c|c th vin khc ca CodeIgniter, s dng th vin Database Forge, ta s dng phng thc load() nh sau:
$this->load->dbforge(); $this->load->dbutil();

Trang 62

|n c s: Tm hiu PHP framework CodeIgniter Sau khi c khi to, ta c th s dng c|c phng thc ca th vin ny bng cch gi:
$this->dbforge->some_function(); $this->dbutil->some_function();

To c s d liu mi to mt c s d liu mi, ta s dng phng thc create_database() nh sau:


$this->dbforge->create_database(string $databaseName)

Phng thc tr v TRUE nu to c s d liu th{nh cng, ngc li tr v FALSE. Xa c s d liu xa mt c s d liu, ta s dng phng thc drop_database() nh sau:
$this->dbforge->drop_database(string $databaseName)

Phng thc tr v TRUE nu xa c s d liu th{nh cng, ngc li tr v FALSE. Lit k cc c s d liu lit k c|c c s d liu hin c trn my ch, ta s dng phng thc list_databases() nh sau:
$this->dbforge->list_databases()

Phng thc tr v mng cha tn c|c c s d liu. Ti u ha bng d liu thc hin ti u ha bng d liu, ta s dng phng thc sau:
$this->dbutil->optimize_table(string $tableName) optimize_table()

nh

Phng thc tr v TRUE nu thc hin th{nh cng, ngc li tr v FALSE. Lu , chc nng n{y ch dnh cho h qun tr c s d liu MySQL/MySQLi. Sa cha bng d liu thc hin sa cha bng d liu, ta s dng phng thc repair_table() nh sau:
$this->dbutil->optimize_table(string $tableName)

Trang 63

|n c s: Tm hiu PHP framework CodeIgniter Phng thc tr v TRUE nu thc hin th{nh cng, ngc li tr v FALSE. Lu , chc nng n{y ch dnh cho h qun tr c s d liu MySQL/MySQLi. Ti u ha c s d liu thc hin ti u ha tt c c s d liu hin c trn my ch, ta s dng phng thc optimize_database() nh sau:
$this->dbutil->optimize_database()

Phng thc tr v mng cha cc thng bo trng th|i c s d liu nu thc hin th{nh cng, ngc li tr v FALSE. Lu , chc nng n{y ch dnh cho h qun tr c s d liu MySQL/MySQLi. Thm bng mi thm mt bng mi, ta s dng phng thc create_table() nh sau:
$this->dbforge->create_table(string $tableName[, boolean $ifNotExists])

Bin ty chn $ifNotExists s thm vo lnh IF NOT EXISTS khi to bng. Phng thc tr v TRUE nu thm bng th{nh cng, ngc li tr v FALSE. Xa bng xa mt bng, ta s dng phng thc drop_table() nh sau:
$this->dbforge->drop_table(string $tableName)

i tn bng i tn bng, ta s dng phng thc rename_table() nh sau:


$this->dbforge->rename_table('old_table_name', 'new_table_name');

Thm trng mi vo bng thm trng mi vo bng, ta s dng phng thc phng thc create_table().
$this->dbforge->add_field(array $fields); add_field()

ngay sau khi gi

C|c trng ca mt bng c to thng qua mt mng quy c, trong kha ca mng l{ tn trng. Mi trng li l mt mng c cc kha sau:
unsigned: Nu c gi tr TRUE, trng ny c thuc tnh UNSIGNED type: Kiu d liu ca trng, chng hn nh INT, VARCHAR, DATE

Trang 64

|n c s: Tm hiu PHP framework CodeIgniter Mt s kiu d liu, chng hn nh VARCHAR, yu cu phi cung cp chiu di d liu. default: Gi tr mc nh ca trng null: Nu c gi tr TRUE, trng cho php d liu NULL, ngc li l NOT NULL auto_increment: Nu c gi tr TRUE, d liu ca trng s c t ng tng. V d:
$fields = array( 'blog_id' => array( 'type' => 'INT', 'constraint' => 5, 'unsigned' => TRUE, 'auto_increment' => TRUE ), 'blog_title' => array( 'type' => 'VARCHAR', 'constraint' => '100', ), 'blog_author' => array( 'type' =>'VARCHAR', 'constraint' => '100', 'default' => 'King of Town', ), 'blog_description' => array( 'type' => 'TEXT', 'null' => TRUE, ), ); constraint:

Ngo{i ra, ta cng c th thm c|c trng bng cch truyn trc tip cu lnh SQL lm i s cho hm add_field() nh sau:
$this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");

Th vin Database Forge cn cho php to trng ID mt cch t ng bng cch gi:
$this->dbforge->add_field('id'); // Kt qu: id INT(9) NOT NULL AUTO_INCREMENT

Thm kha vo bng thm kha vo bng, ta s dng phng thc add_key() nh sau:
$this->dbforge->add_key(string $field, boolean $isPrimaryKey);

Phng thc add_key() phi c gi ngay sau phng thc create_table().

Trang 65

|n c s: Tm hiu PHP framework CodeIgniter


$this->dbforge->add_key('blog_name'); // Kt qu: KEY `blog_name` (`blog_name`) $this->dbforge->add_key(array('blog_name', 'blog_label')); // Kt qu: KEY `blog_name_blog_label` (`blog_name`, `blog_label`)

Bin ty chn $isPrimaryKey cho php thm kha chnh v{o trng c chn. chn hai trng lm kha chnh, ta thc hin gi phng thc add_key() hai ln.
$this->dbforge->add_key('blog_id', TRUE); // Kt qu: PRIMARY KEY `blog_id` (`blog_id`) $this->dbforge->add_key('blog_id', TRUE); $this->dbforge->add_key('site_id', TRUE); // Kt qu: PRIMARY KEY `blog_id_site_id` (`blog_id`, `site_id`)

Thm trng vo bng tn ti thm trng vo bng ~ tn ti, ta s dng phng thc add_column() nh sau:
$this->dbforge->add_column(string $tableName, array $fields);

Trong , mng $fields l mng kt hp ging trong phng thc add_field(). Xa trng trong bng tn ti xa trng trong mt bng ~ tn ti, ta s dng phng thc drop_column() nh sau:
$this->dbforge->drop_column(string $tableName, string $field);

Sa thng tin trng sa thng tin trng trong mt bng ~ tn ti, ta s dng phng thc modify_column() nh sau:
$this->dbforge->modify_column(string $tableName, array $modifiedField)

Cch s dng phng thc ny ging nh phng thc add_field(), ngoi tr vic phng thc ny s thay i thng tin trng thay v thm mi. Mng cha thng tin ca trng phi cha kha name. V d:
$fields = array( 'old_name' => array( 'name' => 'new_name', 'type' => 'TEXT', ), ); $this->dbforge->modify_column('table_name', $fields); // Kt qu: ALTER TABLE table_name CHANGE old_name new_name TEXT

Trang 66

|n c s: Tm hiu PHP framework CodeIgniter To CSV t kt qu truy vn xut kt qu truy vn di dng CSV, ta s dng phng thc ca th vin Database Utility nh sau:
csv_from_result()

$this->dbutil->csv_from_result($db_result, $delimiter, $newline);

Trong , $db_result l bin kt qu tr v sau khi thc hin SELECT, $delimiter quy nh k t c s dng phn tch c|c trng gi tr, $newline quy nh k t xung dng. Theo mc nh, CodeIgniter s dng tab phn tch v k t \n xung dng. To XML t kt qu truy vn xut kt qu truy vn di dng XML, ta s dng phng thc ca th vin Database Utility nh sau:
$this->dbutil->xml_from_result($db_result, array $config) xml_from_result()

Trong $db_result l bin cha kt qu tr v t cu lnh bao gm cc thit lp xut tp tin XML.
$this->load->dbutil(); $query = $this->db->query("SELECT * FROM mytable"); $config = array ( 'root' => 'root', 'element' => 'element', 'newline' => "\n", 'tab' => "\t" ); echo $this->dbutil->xml_from_result($query, $config);

SELECT, $config

l mng

Theo , root l tn ca tag gc, element l tn ca cc tag thnh phn, newline l k t c s dng khi xung dng, tab l k t c s dng canh l cc tag. Sao lu c s d liu Th vin Database Utility cho php sao lu tt c cc bng trong c s d liu hoc tng bng ring bit. Tp tin c sao lu nh dng Zip hoc Gzip. Lu , chc nng ny ch d{nh cho c s d liu MySQL. Do s gii hn v thi gian thc thi v b nh cp pht ca PHP, sao lu c s d liu dung lng ln c th khng thc hin c. i vi nhng c s d liu nh vy, ta cn s dng cng c sao lu t dng lnh hoc yu cu ngi qun tr my ch thc hin.

Trang 67

|n c s: Tm hiu PHP framework CodeIgniter


// Load th vin Database Utility $this->load->dbutil(); // Sao lu ton b c s d liu v gn vo bin $backup =& $this->dbutil->backup(); // Load File helper thc hin ghi file $this->load->helper('file'); write_file('/path/to/mybackup.gz', $backup); // S dng Download helper gi tp tin download v pha ngi dng $this->load->helper('download'); force_download('mybackup.gz', $backup);

Ta c th thit lp cc ty chn cho vic sao lu bng cch truyn vo mt mng thit lp.
$prefs = array( 'tables' 'ignore' 'format' 'filename' 'add_drop' 'add_insert' 'newline' ); $this->dbutil->backup($prefs); => => => => => => => array('table1', 'table2'), array(), 'txt', 'mybackup.sql', TRUE, TRUE, "\n"

Trong :
tables: tn

nhng bng s c sao lu. Nu mng ny rng, h thng s sao lu

tt c bng. ignore: tn nhng bng s c b qua. format: nh dng tp tin s sao lu. Database Utility h tr sao lu gzip, zip hoc txt. Mc nh l gzip. filename: tn tp tin sao lu. Mc nh l ngy gi hin ti. add_drop: cho bit c thm cu lnh DROP TABLE vo tp tin sao lu khng. add_insert: cho bit c thm cu lnh INSERT vo tp tin sao lu khng. newline: k t s c s dng khi xung dng. H tr \n, \r, \r\n. 3.3.11. B m c s d liu

Lp Database Caching cho php lu tr cc truy vn di dng tp tin vn bn nhm gim ti cho my ch. Lp n{y c khi to mt cch t ng khi chc nng caching c kch hot. Bng cch s dng b m, ta c th gim thiu s ln truy xut trc tip v{o c s d liu, nh n}ng cao hiu nng h thng. Tuy nhin i vi c|c c s

Trang 68

|n c s: Tm hiu PHP framework CodeIgniter d liu nh vi lu lng truy xut d liu thp, s ci thin tc s kh nhn thy hn. Tuy vy, trong mt s mi trng, v d nh c|c m|y ch chia s (shared hosting), vic lu b m c th lm gim tc ti trang, v ghi tp tin tn kh nhiu ti nguyn. Do , chc nng n{y hot ng tt, h thng cn c c{i t trn mt my ch ring. Kch hot b m kch hot chc nng n{y, ta thc hin theo ba bc sau: 1. To mt th mc cho php ghi trn my ch lu tr cc tp tin m. 2. Khai b|o ng dn n th mc ny trong tp tin application/config/database.php. 3. Kch hot chc nng lu b m trn ton h thng trong tp tin application/config/database.php. Sau khi c kch hot, b m s t ng vn hnh khi ti mt trang c truy vn d liu. Cch thc hot ng H thng lu b m truy vn ca CodeIgniter t vn h{nh khi trang c ti. Trong ln ti u tin, i tng cha cc kt qu truy vn s c tun t ha (serialize) v c lu tr thnh tp tin vn bn trn my ch. Trong nhng ln truy cp tip theo, h thng s ly d liu t i tng trong tp tin vn bn ny thay v truy vn trc tip v{o c s d liu. Phng thc ny gip vic truy vn c s d liu c th c gim xung mc ti a. Ch duy nht cu lnh SELECT mi c lu trong b m. Cc cu lnh INSERT, UPDATE, DELETEs khng c lu m v chng khng tr v cc kt qu truy vn. ng thi, kt qu ca c|c phng thc sau cng khng c lu: num_fields(), field_names(), field_data(), free_result(). Nhng tp tin m ny s c lu tr V THI HN. Bt k truy vn no cng s c lu trong b m cho n khi ta xa chng. CodeIgniter cho php ta thc hin dn b m i vi tng trang c th, hoc dn dp tt c trong b m. CodeIgniter s lu tr cc tp tin m ny v{o c|c th mc, vi tn th mc l tn controller v hm tng ng. V d: Kt qu truy vn ca trang http://www.example.com/blog/comments s c lu v{o th mc blog+comments. Qun l cc tp tin m Trang 69

|n c s: Tm hiu PHP framework CodeIgniter V cc tp tin m c lu tr v thi hn, ta cn xy dng cc quy trnh dn dp chng. Chng hn, khi ngi dng thm mt sn phm mi vo h thng bn hng, ta s gi b m tin h{nh lu tp tin mi v xa cc tp tin c. CodeIgniter h tr cc phng thc sau x l vi b m. cache_on() / cache_off() C php
$this->db->cache_on(); $this->db->cache_off();

Cho php bt/tt chc nng lu tr b m, nh trong v d sau:


// Bt lu tr b m $this->db->cache_on(); $query = $this->db->query("SELECT * FROM mytable"); // Tt b m, khng lu tr truy vn ny $this->db->cache_off(); $query = $this->db->query("SELECT * FROM members WHERE member_id = '$current_user'"); // Bt li lu tr b m $this->db->cache_on(); $query = $this->db->query("SELECT * FROM another_table");

cache_delete() C php
$this->db->cache_delete($controller, $method);

Phng thc cache_delete() cho php xa tp tin m ti mt trang n{o . Phng thc nhn tn ca controller v{ method x|c nh th mc n{o c xa. cache_delete_all() C php
$this->db->cache_delete_all();

Phng thc cache_delete_all() s xa tt c tp tin trong b m. 3.4. Email Gi email l mt thao t|c thng gp khi xy dng mt ng dng web. Bn thn PHP c h tr hm mail() thc hin gi email. Nhng thc hin nhng chc nng cao

Trang 70

|n c s: Tm hiu PHP framework CodeIgniter cp hn, ta c th s dng th vin Email ca CodeIgniter. Th vin Email h tr nhng chc nng sau: G email bng nhiu giao thc: Mail, Sendmail v SMTP C th gi cho nhiu ngi cng lc CC (carbon copy) v BCC (blind carbon copy) Gi email di dng HTML hoc thun vn bn nh km tp tin Thit lp u tin H tr wordwrap BCC Batch Mode, cho php chia nhng danh sch email ln thnh nhng danh sch nh hn. H tr cng c tm li Khai bo s dng th vin Email Cng ging s dng c|c th vin khc ca CodeIgniter, s dng th vin Email, ta s dng phng thc load() nh sau:
$this->load->library('email');

3.4.1. Thit lp cc ty chn s dng th vin Email, ta cn thit lp cc ty chn gi email, chng hn nh giao thc, thng s ca my ch SMTPC|c thit lp n{y c lu v{o mt mng, v truyn v{o phng thc initialize() tin hnh khi to. Chng hn:
$config['protocol'] = 'sendmail'; $config['mailpath'] = '/usr/sbin/sendmail'; $config['charset'] = 'iso-8859-1'; $config['wordwrap'] = TRUE; $this->email->initialize($config);

Ngo{i ra, ta cng c th lu c|c thit lp vo mng $config trong tp tin application/config/email.php. Khi c|c thit lp ny s c gi mt cch t ng khi th vin Email c khai bo s dng, ta khng cn thit phi gi hm initialize(). Danh sch cc ty chn: Thit lp
useragent

Gi tr mc nh CodeIgniter

Ty chn Khng c

M t Cho bit chng trnh Trang 71

|n c s: Tm hiu PHP framework CodeIgniter c s dng gi mail


protocol

mail

mail, sendmail hoc smtp Khng c

Giao thc c s dng gi mail ng dn n th mc c{i t Sendmail trn my ch a ch ca my ch SMTP Tn ti khon s dng my ch SMTP Mt khu ca ti khon Cng truy cp my ch SMTP Thi gian tr tm ngng khi truy cp my ch SMTP (tnh bng giy) Cho php s dng wordwrap hay khng S k t trn mt dng khi s dng wordwrap

mailpath

/usr/bin/sendmail

smtp_host

Khng c Khng c Khng c 25

Khng c Khng c Khng c Khng c

smtp_user smtp_pass smtp_port

smtp_timeout

Khng c

wordwrap

TRUE 76 Text utf8 FALSE

TRUE/FALSE

wrapchars mailtype charset validate

text hoc html

nh dng ca email Bng m~ c s dng

TRUE/FALSE

C kim tra tnh hp l ca a ch email khng u tin ca email vi 1 l cao nht, 3 l bnh thng v 5 l thp nht. K t xung dng (s dng \r\n theo RFC 822) K t xung dng (s dng \r\n theo RFC 822) C s dng BCC Batch Trang 72

priority

1, 2, 3, 4, 5

crlf

\n \n FALSE

\n, \r hoc \r\n \n, \r hoc \r\n TRUE/FALSE

newline bcc_batch_mode

|n c s: Tm hiu PHP framework CodeIgniter Mode hay khng


bcc_batch_size

200

S a ch email mi nhm khi s dng BCC Batch Mode

3.4.2. Thc hin gi email Sau khi khai bo s dng th vin Email v thit lp cc ty chn cn thit, ta c th thc hin gi email nh trong on m sau:
$this->load->library('email'); $this->email->from('your@example.com', 'Your Name'); $this->email->to('someone@example.com'); $this->email->cc('another@another-example.com'); $this->email->bcc('them@their-example.com'); $this->email->subject('Email Test'); $this->email->message('Testing the email class.'); $this->email->send(); echo $this->email->print_debugger();

3.4.3. Wordwrap Ch wordwrap cho php hin th vn bn trong mt khung nht nh, gip cho vn bn khng trn ra khi khung mn hnh v thun tin cho ngi c. Theo RFC 822, ch wordwrap nn c kch hot. Th vin Email cho php thc hin wordwrap trong ni dung email. Sau n k t (mc nh l 76, c th c thit lp bng gi tr wrapchars), vn bn s c a sang mt hng mi. Tuy nhin, i vi nhng lin kt qu di, khi thc hin wordwrap s lm cho chng b ngt qung, khng th click c. tr|nh iu n{y, th vin Email s dng hai tag {unwrap} {/unwrap} thng b|o cho chng trnh bit on vn bn no s khng c thc hin wordwrap. V d
The text of your email that gets wrapped normally. {unwrap}http://example.com/a_long_link_that_should_not_be_wrapped.html{/unwrap} More text that will be wrapped normally.

3.4.4. Cc phng thc from()

Trang 73

|n c s: Tm hiu PHP framework CodeIgniter C php


$this->email->from(string $email, string $name)

Phng thc from() cho php thit lp a ch email v tn ca ngi gi. reply_to() C php
$this->email->reply_to(string $email, string $name)

Phng thc reply_to() cho php thit lp a ch email s nhn tr li. Nu phng thc n{y khng c s dng, h thng s t nhn a ch email trong phng thc from() l{m a ch nhn tr li. to() C php
$this->email->to(string/array $emailAddresses)

Phng thc to() cho php thit lp nhng a ch email s c gi. C|c a ch ny c cch nhau bi du phy (,) hoc c lu trong mt mng. V d:
$this->email->to('one@example.com, two@example.com, three@example.com'); $list = array('one@example.com', 'two@example.com', 'three@example.com'); $this->email->to($list);

cc() C php
$this->email->cc(string/array $emailAddresses)

Phng thc cc() cho php thit lp nhng a ch email s c nhn bn sao khi gi email (carbon copy). Ngi nhn s thy nhng a ch c thit lp bng phng thc cc(). Cng ging nh phng thc to(), ta c th truyn v{o danh s|ch c|c a ch email hoc mt mng. bcc() C php
$this->email->bcc(string/array $emailAddresses)

Trang 74

|n c s: Tm hiu PHP framework CodeIgniter Phng thc bcc() cho php thit lp nhng a ch email s c nhn bn sao khi gi email, tuy nhin ngi nhn s khng thy nhng email c thit lp trong phng thc to(), cc() v bcc() (blind carbon copy). Cng ging nh phng thc to(), ta c th truyn v{o danh s|ch c|c a ch email hoc mt mng. subject() C php
$this->email->subject(string $subject)

Phng thc subject() cho php thit lp tiu ca email. message() C php
$this->email->message(string $message)

Phng thc message() cho php thit lp ni dung ca email. set_alt_message() C php
$this->email->set_alt_message(string $message)

Phng thc set_alt_message() cho php thit lp ni dung thay th ca email. Nu email c gi c dng HTML nhng ngi nhn khng mun hin th HTML v l do bo mt, ni dung thay th ny s c hin th. Nu phng thc n{y khng c s dng, CodeIgniter s t ng tch b cc tag HTML trong phn ni dung email lm ni dung thay th. clear() C php
$this->email->clear([boolean $clearAttachment])

Phng thc clear() s xa tt c gi tr ~ c thit lp bi c|c phng thc from(), reply_to(), to(), cc(), bcc(), subject(), message(). Phng thc n{y thng c s dng bn trong vng lp, gip khi ng li cc gi tr sau mi ln lp. V d:
foreach ($list as $name => $address) { $this->email->clear();

Trang 75

|n c s: Tm hiu PHP framework CodeIgniter


$this->email->to($address); $this->email->from('your@example.com'); $this->email->subject('Here is your info '.$name); $this->email->message('Hi '.$name.' Here is the info you requested.'); $this->email->send(); }

Nu bin ty chn $clearAttachment c gi tr TRUE, tt c tp tin nh km cng b xa. send() C php


$this->email->send()

Phng thc send() s thc hin vic gi email. Phng thc ny tr v TRUE nu gi email th{nh cng, ngc li tr v FALSE. attach() C php
$this->email->attach(string $filePath)

Phng thc attach() s nh km tp tin v{o email. Phng thc ny nhn ng dn tng i n tp tin trn my ch l{m i s th nht. Nu mun nh km nhiu tp tin, ta gi phng thc ny nhiu ln. print_debugger() C php
$this->email->print_debugger()

Phng thc print_debugger() s hin th nhng thng tin tr v t pha server, email header cng nh ni dung email. Thng c s dng cho vic g li. V d:
if ( $this->email->send() == FALSE ) { $this->email->print_debugger(); }

3.5. Encryption Trong mt ng dng web, vic bo mt thng tin ca ngi s dng l iu bt buc. i vi cc ng dng thng mi in t, vic m ha thng tin khch hng, chng hn nh s th tn dng, in thoi, a ch, emailquyt nh s sng cn ca website.

Trang 76

|n c s: Tm hiu PHP framework CodeIgniter Th vin Encryption ca CodeIgniter c xy dng nhm h tr lp trnh vin thc hin m ha/gii m mt c|ch n gin v hiu qu. Th vin Encryption s dng c ch m ha i xng. Thng ip cn m ha s c tin x l bng cch thc hin php XOR vi mt on hash ngu nhin. Sau , kt qu thu c s c m ha mt ln na bi th vin Mcrypt. Nu phin bn PHP c c{i t khng kch hot th vin Mcrypt, kt qu m ha vn cung cp mt mc bo mt chp nhn c cho cc ng dng nh. Trong trng hp s dng th vin Mcrypt, mc bo mt c nng cao rt nhiu. s dng th vin Encryption, ta khai b|o phng thc load() nh sau:
$this->load->library('encrypt');

Sau khi khai bo, ta c th s dng c|c phng thc ca th vin Encryption bng cch gi:
$this->encrypt->some_function();

Lu : Thng ip sau khi m ha s c chiu di gp khong 2.6 ln chiu di ca vn bn gc. Do , cn lu chn kiu d liu lu tr ph hp. i vi h qun tr c s d liu MySQL, ta c th dng kiu TEXT lu tr thng ip ~ m~ ha. 3.5.1. Thit lp kha Mt kha l mt on thng tin c s dng trong qu trnh m ha/gii m. gii m mt thng ip, ta phi s dng kha c dng m~ ha thng ip . Do vy, cn la chn kha mt cch thn trng. Nu thay i kha s dn n khng th gii m nhng thng ip ~ tn ti. Kha nn c chiu di 32 k t (128 bit), kt hp ngu nhin gia s, ch thng v ch hoa. Gi tr ca kha c thit lp gi tr $config['encryption_key'] trong tp tin application/config/config.php, hoc ta cng c th a kha v{o khi gi hm m ha. 3.5.2. Cc phng thc encode() C php
$this->encrypt->encode(string $message[, string $key])

Trang 77

|n c s: Tm hiu PHP framework CodeIgniter Phng thc encode() s m~ ha thng ip truyn vo, s dng kha mc nh c thit lp trong tp tin application/config/config.php. Hoc ta cng c th chn mt kha khc v truyn vo lm i s th hai. V d:
$msg = 'My secret message'; $key = 'super-secret-key'; $encrypted_string = $this->encrypt->encode($msg, $key);

decode() C php
$this->encrypt->decode(string $message)

Phng thc encode() s gii m~ thng ip truyn vo, s dng kha mc nh c thit lp trong tp tin application/config/config.php. set_cipher() C php
$this->encrypt->set_cipher(string $cipher)

Phng thc set_cipher() cho php ta chn thut ton s c s dng m ha thng tin. Gi tr mc nh l MCRYPT_RIJNDAEL_256 (thut ton Rijndael 256 bits). Danh sch cc thut ton m ha c th xem trang http://vn2.php.net/manual/en/mcrypt.ciphers.php. set_mode() C php
$this->encrypt->set_mode(string $mode)

Phng thc set_mode() cho php thit lp ch hot ng ca th vin Mcrypt. Gi tr mc nh l MCRYPT_MODE_ECB. Danh sch cc ch hot ng khc c th xem trang http://vn2.php.net/manual/en/function.mcrypt-cfb.php. sha1() C php
$this->encrypt->sha1(string $msg)

Trang 78

|n c s: Tm hiu PHP framework CodeIgniter Phng thc sha1() cho php m~ ha thng ip theo thut ton SHA1. Kt qu tr v l thng ip m ha 160 bit. Cng ging nh MD5, SHA1 l m ha bt i xng, thng ip m ha khng th gii m~ c. 3.6. Session Th vin Session ca CodeIgniter gip qun l trng thi ca ngi dng khi h truy cp website. C|c thng tin n{y c lu tr (v m ha) trong mt tp tin cookie. Hoc ta cng c th thit lp lu tr session trong c s d liu nng cao tnh bo mt. Lu , kh|i nim session }y khng lin quan n session ca PHP. CodeIgniter to ra d liu session ca ring n, nhm cung cp mt cch thc qun l linh ng hn. s dng th vin Session, ta khai b|o nh sau:
$this->load->library('session');

Sau khi khai bo, ta c th s dng c|c phng thc ca th vin Session bng cch gi:
$this->session->some_function();

3.6.1. Thit lp cc ty chn Cc th vin Session c application/config/config.php, bao gm cc gi tr sau: Thit lp


sess_cookie_name

ty

chn

ca

lu

trong

tp

tin

Gi tr mc nh
ci_session

Ty chn Khng c

M t Tn ca cookie s cha session Thi hn tn ti ca session n{y, c tnh bng giy. Mc nh l 2 gi. Nu c gi tr 0, session s khng bao gi ht hn.

sess_expiration

7200

sess_encrypt_cookie

FALSE

TRUE/FALSE

Cho bit c m ha d liu trong session hay khng Cho bit c lu d liu session v{o c s d liu hay khng Tn ca bng s c lu Trang 79

Sess_use_database

FALSE

TRUE/FALSE

sess_table_name

ci_sessions

|n c s: Tm hiu PHP framework CodeIgniter session


sess_time_to_update 300

Thi gian (tnh bng giy) session s c ti to Cho bit c so s|nh a ch IP khi c d liu session hay khng. i vi IP ng, nn cho ty chn ny l FALSE. Cho bit c so snh thng tin trnh duyt khi c d liu session hay khng.

sess_match_ip

FALSE

TRUE/FALSE

sess_match_useragent

FALSE

TRUE/FALSE

3.6.2. Cch thc hot ng Khi mt trang c ti v, CodeIgniter s kim tra c d liu session hp l trong cookie ca ngi dng hay khng. Nu session khng tn ti hoc ~ ht hn, mt session mi s c to ra v{ lu v{o cookie ca ngi dng. Nu session tn ti, thng tin bn trong session s c cp nht v mt session_id s c to ra. Thng tin session l mt mng cha cc gi tr sau: Mt Session ID l mt hash vi tinh khit cao, c m ha bng thut ton MD5 m{ c cp nht sau mi 5 pht. Ta c th thay i thi gian cp nht ny bng cch thit lp gi tr bin $config['time_to_update'] trong tp tin system/config/config.php. ip_address: a ch IP ca ngi dng user_agent: User Agent: 50 k t u tin v thng tin trnh duyt ca ngi dng last_activity: Timestamp cha hot ng cui ca ngi dng Cc thng tin ny s c m ha nhm nng cao tnh bo mt, gip ngn chn ngi kh|c thay i hay c session. Ly thng tin t session ly thng tin t session, ta s dng phng thc userdata() nh sau:
$this->session->userdata(string $item); session_id:

Vi $item l kha ca mng cha thng tin session. Chng hn, ly a ch IP ca ngi dng, ta s dng: Trang 80

|n c s: Tm hiu PHP framework CodeIgniter


$this->session->userdata('ip_address');

Nu kha khng tn ti, phng thc tr v FALSE. Thm thng tin vo session thm mt thng tin vo session hin ti, ta s dng phng thc nh sau:
$this->session->set_userdata(array $data); set_userdata()

Trong mng $data c kha l tn ca thng tin v gi tr tng ng ca thng tin . V d:


$newdata = array( 'username' => 'johndoe', 'email' => 'johndoe@some-site.com', 'logged_in' => TRUE ); $this->session->set_userdata($newdata);

Hoc ta cng c th thm thng tin theo cch sau:


$this->session->set_userdata(string $item, string $value);

Xa thng tin trong session xa thng tin trong session, ta s dng phng thc unset_userdata() nh sau:
$this->session->unset_userdata(string $item);

Hoc
$this->session->unset_userdata(array $items);

Trong trng hp s dng mng, ta khai bo mng nh sau:


$array_items = array('username' => '', 'email' => ''); $this->session->unset_userdata($array_items);

Xa tt c session xa tt c session, ta s dng phng thc sess_destroy() nh sau:


$this->session->sess_destroy();

Trang 81

|n c s: Tm hiu PHP framework CodeIgniter 3.6.3. Flashdata CodeIgniter h tr flashdata, l{ nhng session ch c s dng mt ln v s c xa t ng. Flashdata c phn bit vi d liu thng bi tin t flash_. thm mt flashdata, ta s dng phng thc set_flashdata() nh sau:
$this->session->set_flashdata(string $item, string $value);

Hoc ta cng c th truyn vo mt mng nh i vi phng thc set_userdata(). ly thng tin flashdata, ta s dng phng thc flashdata() nh sau:
$this->session->flashdata('item');

gi li mt flashdata, ta dng phng thc keep_flashdata()


$this->session->keep_flashdata('item');

3.6.4. Lu session vo c s d liu Session c lu trong cookie ca ngi dng cha mt Session ID. Ta khng c cch no tnh xc thc ca Session ID ny. Bng c|ch lu session v{o c s d liu, mi khi CodeIgniter pht hin c thng tin v session trong cookie ca ngi dng, mt truy vn s c thc hin. Nu Session ID ca ngi dng v{ trong c s d liu khng trng khp, session s b hy. Khi Session ID s khng c cp nht, n ch c to ra khi c session mi. kch hot chc nng lu session v{o c s d liu, ta thit lp bin $config['sess_use_database'] c gi tr TRUE v bin $config['sess_table_name'] trong tp tin application/config/config.php. Thng tin session c lu trong mt bng c cu trc nh sau:
CREATE TABLE IF NOT EXISTS `ci_sessions` ( session_id varchar(40) DEFAULT '0' NOT NULL, ip_address varchar(16) DEFAULT '0' NOT NULL, user_agent varchar(50) NOT NULL, last_activity int(10) unsigned DEFAULT 0 NOT NULL, user_data text NOT NULL, PRIMARY KEY (session_id) );

Trang 82

|n c s: Tm hiu PHP framework CodeIgniter

4. Nhng helper hu ch
4.1. Cookie Cookie helper gip ta thao tc vi d liu cookie trn m|y ngi dng, bao gm cc hm sau: set_cookie() C php
set_cookie(array $data)

Cho php thit lp d liu cookie trn m|y ngi dng. Mng d liu truyn vo c dng nh sau:
$cookie = array( 'name' 'value' 'expire' 'domain' 'path' 'prefix' ); set_cookie($cookie); => => => => => => 'The Cookie Name', 'The Value', '86500', '.some-domain.com', '/', 'myprefix_',

Trong :
name: tn ca cookie value: gi tr ca cookie ny expire:

thi gian tn ti ca cookie tnh t thi im hin ti. Nu thi gian ny bng 0, cookie s c xa. domain: domain ca cookie path: ng dn ca cookie, thng khng cn thit v h{m ~ thit lp ng dn gc. prefix: tin t, nhm phn bit vi cc cookie trng tn khc. Hoc ta cng c th thit lp cookie theo c php sau:
set_cookie($name, $value, $expire, $domain, $path, $prefix);

get_cookie() C php
get_cookie(string $cookieName[, boolean $xssFilter])

Trang 83

|n c s: Tm hiu PHP framework CodeIgniter Ly d liu cookie t m|y ngi dng. Hm nhn tn cookie (bao gm c phn tin t) l{m i s u tin. Nu i s th hai c gi tr TRUE, hm s thc hin loi b XSS gi tr c c. Hm tr v FALSE nu cookie khng tn ti. delete_cookie() C php
delete_cookie(string $cookieName)

Hm delete_cookie() gip xa cookie trong m|y ngi dng. H{m n{y tng ng vi hm set_cookie() vi expiration bng 0. Ta cng c th truyn gi hm ny theo c php:
delete_cookie($name, $domain, $path, $prefix)

4.2. File File helper gip ta thao tc vi cc tp tin, bao gm cc hm sau: read_file() C php
read_file(string $path)

Hm nhn ng dn n tp tin l{m i s th nht. ng dn ny c th l{ ng dn tng i hoc tuyt i. Hm tr v FALSE trong trng hp tht bi. write_file() C php
write_file(string $path, string $data[, string $writeMode])

Hm write_file() gip ghi d liu xung tp tin. Nu tp tin khng tn ti, CodeIgniter s t ng to tp tin mi. Ta cng c th chn ch ghi tp tin bng cch truyn vo i s th ba. Thng tin v cc ch ghi tp tin c th xem trang http://vn2.php.net/manual/en/function.fopen.php. Ch ghi mc nh l wb. hm c th hot ng, yu cu tp tin phi c php ghi (CHMOD 666, 777) v th mc cha tp tin cng phi c php ghi. delete_files() C php

Trang 84

|n c s: Tm hiu PHP framework CodeIgniter


delete_files(string $path[, boolean $deleteDir])

Hm delete_files() gip xa tt c tp tin trong th mc c truyn vo. Nu i s th hai c gi tr TRUE, tt c th mc bn trong ng dn c truyn v{o cng s b xa. get_filenames() C php
get_filenames(string $path[, boolean $includePath])

Hm get_filenames() tr v mt mng cha tn ca tt c cc tp tin trong th mc c truyn vo. Nu i s th hai c gi tr TRUE, ng dn $path s c thm vo tn tp tin. get_dir_file_info() C php
get_dir_file_info(string $path)

Hm get_dir_file_info() c thng tin th mc c truyn v{o, sau tr v mng cha tn tp tin, kch thc tp tin, ng{y thay i v phn quyn. Thng tin v c|c th mc con cng c c. get _file_info() C php
get_file_info(string $path[, string $fileInformation])

Hm get_file_info() c thng tin t tp tin c truyn vo v tr v tn tp tin, kch thc, ng dn, ng{y thay i. i s th hai cho php la chn thng tin no s c tr v, bao gm: name (tn tp tin), server_path (ng dn n tp tin), size (kch thc tp tin), date (ng{y thay i), readable (tp tin c quyn c hay khng), writable (tp tin c quyn ghi hay khng), executable (tp tin c quyn thc thi hay khng), fileperms (phn quyn ca tp tin). Nu tp tin khng tm thy, hm tr v FALSE. symbolic_permissions() C php
symbolic_permissions(string $perms)

Trang 85

|n c s: Tm hiu PHP framework CodeIgniter Hm symbolic_permissions() nhn phn quyn kiu s (644, 777kt qu tr v t hm fileperms()) v hin th di dng k t. V d:
echo symbolic_permissions(fileperms('./index.php')); // -rw-r--r--

octal_permissions() C php
octal_permissions(string $perms)

Hm octal_permissions() nhn phn quyn kiu k t v hin th di dng s. V d:


echo octal_permissions(fileperms('./index.php')); // 644

5. Kt lun
Qua nhng tm hiu trn, ta thy CodeIgniter l mt nn tng mnh, cung cp y nhng th vin v chc nng cn thit xy dng mt ng dng web vi tc nhanh m vn m bo hiu nng h thng. So vi cc nn tng khc, CodeIgniter khng qu cng knh, khng lm lp trnh vin gim i hng th khi s dng. Ngoi ra, cng ng ngi s dng CodeIgniter rt ln, khng ngng a ra nhng plugin, helper h tr vic lp trnh. D cho CodeIgniter vn cn mt s im hn ch, nhng v c bn, c th ni CodeIgniter ang ng{y c{ng nhn c s ng h t pha cc lp trnh vin PHP. Phin bn 2.0 ca CodeIgniter ang trong giai on pht trin beta, ha hn s em n nhng chc nng mi hu ch v th v.

6. Danh mc t vit tt
CRUD: Create Read Update Delete CSV: Comma Separated Values CRLF: Carriage Return [and] Line Feed EDP: Event-Driven Programming MVC: Model-View-Controller Trang 86

|n c s: Tm hiu PHP framework CodeIgniter ORM: Object-Relational Mapping URI: Uniform Resource Identifier URL: Uniform Resource Location XML: Extensible Markup Language XSS: Cross Site Scripting

7. Ti liu tham kho


CodeIgniter User Guide
http://codeigniter.com/user_guide/

Wikipedia The Free Encyclopedia


http://en.wikipedia.org/wiki/Modelviewcontroller http://en.wikipedia.org/wiki/Object-relational_mapping http://en.wikipedia.org/wiki/Event-driven_programming http://en.wikipedia.org/wiki/Active_record_pattern

Trang 87

You might also like