You are on page 1of 87

n C S: Tm

Hiu PHP
Framework
CodeIgniter




2010

I HC K THUT CNG NGH THNH PH H CH MINH
4/1/2010
Mc lc
1. Gii thiu ...................................................................................................................................................... 5
1.1. Tng quan ............................................................................................................................................ 5
1.2. Nhng im ni bt ........................................................................................................................ 5
1.3. Nhng im hn ch ....................................................................................................................... 6
1.4. C{i t .................................................................................................................................................... 6
2. Tm hiu ........................................................................................................................................................ 7
2.1. M hnh Model-View-Controller ............................................................................................... 7
2.2. Cu trc CodeIgniter ....................................................................................................................... 8
2.3. Dng chy d liu trong CodeIgniter ................................................................................... 10
2.4. CodeIgniter URL ............................................................................................................................ 11
2.5. Model .................................................................................................................................................. 13
2.6. View .................................................................................................................................................... 14
2.7. Controller ......................................................................................................................................... 16
2.8. C|c th vin ..................................................................................................................................... 18
2.9. Cc helper v plugin..................................................................................................................... 21
2.10. T ng khai bo ...................................................................................................................... 23
2.11. Qun l li .................................................................................................................................... 23
2.12. Lu tr b m .......................................................................................................................... 24
2.13. Debugging .................................................................................................................................... 25
2.14. Bo mt .......................................................................................................................................... 26
3. Nhng th vin chnh .......................................................................................................................... 26
3.1. Input and Security ........................................................................................................................ 26
3.1.1. C ch lc XSS ......................................................................................................................... 27
3.1.2. Cc hm tin ch .................................................................................................................... 27
3.2. Form Validation ............................................................................................................................. 28
|n c s: Tm hiu PHP framework CodeIgniter

Trang 3

3.2.1. Thit lp c|c iu kin kim tra ...................................................................................... 29
3.2.2. X l li ...................................................................................................................................... 33
3.2.3. Cc hm tin ch ..................................................................................................................... 34
3.3. Database ............................................................................................................................................ 35
3.3.1. Thit lp thng tin c s d liu .................................................................................... 35
3.3.2. Kt ni n c s d liu ................................................................................................... 37
3.3.3. Truy vn d liu ..................................................................................................................... 37
3.3.4. Active Record .......................................................................................................................... 42
3.3.5. Truy vn d liu ..................................................................................................................... 43
3.3.6. Thao tc d liu ...................................................................................................................... 52
3.3.7. Lu tr truy vn trong Active Record ......................................................................... 56
3.3.8. Giao dch (transaction) trong CodeIgniter ................................................................. 57
3.3.9. Mt s phng thc tr gip ........................................................................................... 58
3.3.10. Qun tr c s d liu vi Database Forge & Database Utility ..................... 62
3.3.11. B m c s d liu ....................................................................................................... 68
3.4. Email .................................................................................................................................................... 70
3.4.1. Thit lp cc ty chn .......................................................................................................... 71
3.4.2. Thc hin gi email.............................................................................................................. 73
3.4.3. Wordwrap ................................................................................................................................ 73
3.4.4. C|c phng thc .................................................................................................................... 73
3.5. Encryption ........................................................................................................................................ 76
3.5.1. Thit lp kha ......................................................................................................................... 77
3.5.2. C|c phng thc .................................................................................................................... 77
3.6. Session ................................................................................................................................................ 79
3.6.1. Thit lp cc ty chn .......................................................................................................... 79
|n c s: Tm hiu PHP framework CodeIgniter

Trang 4

3.6.2. Cch thc hot ng ............................................................................................................ 80
3.6.3. Flashdata .................................................................................................................................. 82
3.6.4. Lu session v{o c s d liu ......................................................................................... 82
4. Nhng helper hu ch ......................................................................................................................... 83
4.1. Cookie ................................................................................................................................................. 83
4.2. File ....................................................................................................................................................... 84
5. Kt lun ...................................................................................................................................................... 86
6. Danh mc t vit tt ............................................................................................................................ 86
7. Ti liu tham kho ................................................................................................................................ 87


|n c s: Tm hiu PHP framework CodeIgniter

Trang 5

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.
|n c s: Tm hiu PHP framework CodeIgniter

Trang 6

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.
|n c s: Tm hiu PHP framework CodeIgniter

Trang 7

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.

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.
Controller
View Model
|n c s: Tm hiu PHP framework CodeIgniter

Trang 8

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 :
|n c s: Tm hiu PHP framework CodeIgniter

Trang 9

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";
|n c s: Tm hiu PHP framework CodeIgniter

Trang 10

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' => 'MyClass',
'function' => 'Myfunction',
'filename' => 'Myclass.php',
'filepath' => 'hooks',
'params' => array('beer', 'wine', 'snacks')
);
|n c s: Tm hiu PHP framework CodeIgniter

Trang 11

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.
|n c s: Tm hiu PHP framework CodeIgniter

Trang 12

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:
:num tng ng vi cc gi tr s.
:any tng ng vi bt k gi tr no.
V d:
$route['product/view/(:num)'] = "product/view/$1";
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 product s gi n hm find_product() ca
lp Product.
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:
|n c s: Tm hiu PHP framework CodeIgniter

Trang 13

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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 14

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.
|n c s: Tm hiu PHP framework CodeIgniter

Trang 15

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();
|n c s: Tm hiu PHP framework CodeIgniter

Trang 16


$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
}

|n c s: Tm hiu PHP framework CodeIgniter

Trang 17

}
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 Controller. Trong hm to ca lp con, phi gi
n hm to ca lp cha.
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
}
}
|n c s: Tm hiu PHP framework CodeIgniter

Trang 18

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 Chc nng
Benchmarking H tr |nh gi| hiu nng h thng
Calendar H tr to lch t ng
Cart H tr chc nng gi h{ng trong c|c website thng mi in
t
Config Cho php thit lp h thng
Database H tr thao t|c trn c s d liu
Email H tr gi email
Encryption H tr m ha v gii m thng tin
|n c s: Tm hiu PHP framework CodeIgniter

Trang 19

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

Trang 20

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: class
Someclass. Tn lp v tn tp tin phi trng nhau.
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 get_instance() trong hm to nu server ang
chy PHP4.
}y l{ khai b|o mu mt th vin Someclass
<?php
class Someclass {
private $ci;

function __construct()
{
$this->ci =& get_instance();

|n c s: Tm hiu PHP framework CodeIgniter

Trang 21

$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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 22

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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 23

// 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:
|n c s: Tm hiu PHP framework CodeIgniter

Trang 24

show_error($message [, int $status_code = 500 ] )
Hm show_error() s hin th 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_404($path)
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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 25

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 system/cache phi c cho php ghi
(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);
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);
|n c s: Tm hiu PHP framework CodeIgniter

Trang 26

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.
|n c s: Tm hiu PHP framework CodeIgniter

Trang 27

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])
|n c s: Tm hiu PHP framework CodeIgniter

Trang 28

Hm post() 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.
$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:
|n c s: Tm hiu PHP framework CodeIgniter

Trang 29

$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 :
$field 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 |.
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 M t V d
required
Tr v FALSE nu trng rng
matches
Tr v FALSE nu gi tr ca trng
khng trng vi gi tr ca trng c
matches[txtPassword]
|n c s: Tm hiu PHP framework CodeIgniter

Trang 30

truyn vo
min_length
Tr v FALSE nu chiu di gi tr ca
trng t hn s k t quy nh
min_length[5]
max_length
Tr v FALSE nu chiu di gi tr ca
trng nhiu hn s k t quy nh
max_length[12]
exact_length
Tr v FALSE nu chiu di gi tr ca
trng khng ng bng s k t quy
nh
exact_length[8]
alpha
Ch cho php gi tr ca trng cha cc
k t ch

alpha_numeric
Ch cho php gi tr ca trng cha cc
k t ch v s

alpha_dash
Ch cho php gi tr ca trng cha cc
k t ch, s, du gch ngang (-) v du
gch di (_)

numeric
Ch cho php gi tr ca trng cha cc
k t s

integer
Ch cho php trng cha gi tr s
nguyn

is_natural
Ch cho php trng cha gi tr s t
nhin

is_natural_no_zero
Ch cho php trng cha gi tr s t
nhin, b s 0

valid_email
Tr v FALSE nu gi tr ca trng
khng phi l mt a ch email hp l

valid_emails
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 (,)

valid_ip
Tr v FALSE nu gi tr ca trng
khng phi l mt a ch IP hp l

valid_base64
Tr v FALSE nu gi tr ca trng cha
cc k t khng phi l cc k t ca m
ha Base 64

|n c s: Tm hiu PHP framework CodeIgniter

Trang 31

Cc hm x l d liu trong th vin Form Validation:
Tn hm M t
xss_clean
Lc XSS t d liu gi ln
prep_for_form
Chuyn i m HTML thnh cc thc th k t (character
entites) hin th chnh x|c trn c|c tag nh INPUT,
TEXTAREA
prep_url
Thm chui http:// vo URL nu khng c
strip_image_tags
Lc ly a ch URL ca hnh trong tag IMG
encode_php_tags
Chuyn tag ca PHP thnh cc thc th k t
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' => 'txtUsername',
'label' => 'Username',
'rules' => 'required'
),
array(
'field' => 'txtPassword',
'label' => 'Password',
'rules' => 'required'
),
array(
'field' => 'txtPassConf',
'label' => 'Password Confirmation',
'rules' => 'required|matches[txtPassword]'
),
array(
'field' => 'txtEmail',
'label' => 'Email',
'rules' => 'required'
)
);

$this->form_validation->set_rules($config);
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:
|n c s: Tm hiu PHP framework CodeIgniter

Trang 32

$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',
|n c s: Tm hiu PHP framework CodeIgniter

Trang 33

'rules' => 'required'
)
)
);
Khi , kim tra d liu cho mt nhm, ta gi phng thc run() vi tham s
truyn vo l tn ca nhm iu kin:
$this->form_validation->run('group_name');
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');
|n c s: Tm hiu PHP framework CodeIgniter

Trang 34

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.
|n c s: Tm hiu PHP framework CodeIgniter

Trang 35

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 tin c s d 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'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
|n c s: Tm hiu PHP framework CodeIgniter

Trang 36

$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
Trong
Kha M t
hostname
Tn ca my ch cha c s d liu, v d: localhost
username
Tn ti khon truy cp
password
Mt khu truy cp
database
Tn c s d liu cn kt ni
dbdriver
Loi c s d liu, chng hn: mysql, postgres, odbc
dbprefix
Tip u ng ca c s d liu, chng hn nh tbl_
pconnect
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.
db_debug
Gi tr boolean cho bit c hin th li ca c s d liu hay khng
cache_on
Gi tr boolean cho bit cc truy vn c c lu trong b m hay
khng
cache_dir
ng dn tuyt i n th mc m lu c|c truy vn
char_set
Character set c s dng giao tip vi c s d liu
dbcollat
Character collation c s dng giao tip vi c s d liu
port
Cng kt ni, s dng trong trng hp kt ni n c s d liu
Postgres SQL.
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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 37

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:
|n c s: Tm hiu PHP framework CodeIgniter

Trang 38

$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()
|n c s: Tm hiu PHP framework CodeIgniter

Trang 39

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 ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $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 ($query->result_array() as $row)
{
echo $row['title'];
echo $row['name'];
echo $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;
|n c s: Tm hiu PHP framework CodeIgniter

Trang 40

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 = $query->first_row('array')
$row = $query->last_row('array')
$row = $query->next_row('array')
$row = $query->previous_row('array')
|n c s: Tm hiu PHP framework CodeIgniter

Trang 41

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)
|n c s: Tm hiu PHP framework CodeIgniter

Trang 42

{
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;
|n c s: Tm hiu PHP framework CodeIgniter

Trang 43

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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 44

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.
|n c s: Tm hiu PHP framework CodeIgniter

Trang 45

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();

|n c s: Tm hiu PHP framework CodeIgniter

Trang 46

// 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);
|n c s: Tm hiu PHP framework CodeIgniter

Trang 47

// 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 where() nhng c|c iu kin c
lin kt vi nhau bng ton t OR.
|n c s: Tm hiu PHP framework CodeIgniter

Trang 48

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 where_not_in(),
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);
|n c s: Tm hiu PHP framework CodeIgniter

Trang 49

// 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 like(), nhng c|c iu kin s c
lin kt vi nhau bng lnh OR.
V d:
|n c s: Tm hiu PHP framework CodeIgniter

Trang 50

$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 not_like(), nhng c|c iu
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%'
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.
|n c s: Tm hiu PHP framework CodeIgniter

Trang 51

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 having(), nhng c|c iu kin s c lin
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
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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 52


$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()
|n c s: Tm hiu PHP framework CodeIgniter

Trang 53

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])
|n c s: Tm hiu PHP framework CodeIgniter

Trang 54

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')
|n c s: Tm hiu PHP framework CodeIgniter

Trang 55

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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 56

$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()
|n c s: Tm hiu PHP framework CodeIgniter

Trang 57

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:
|n c s: Tm hiu PHP framework CodeIgniter

Trang 58

$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. Mt s phng thc tr gip
insert_id()
|n c s: Tm hiu PHP framework CodeIgniter

Trang 59

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()
|n c s: Tm hiu PHP framework CodeIgniter

Trang 60

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()
|n c s: Tm hiu PHP framework CodeIgniter

Trang 61

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 .
|n c s: Tm hiu PHP framework CodeIgniter

Trang 62

$fields = $this->db->field_data('table_name');

foreach ($fields as $field)
{
echo $field->name;
echo $field->type;
echo $field->max_length;
echo $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();
|n c s: Tm hiu PHP framework CodeIgniter

Trang 63

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 optimize_table() nh
sau:
$this->dbutil->optimize_table(string $tableName)
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)
|n c s: Tm hiu PHP framework CodeIgniter

Trang 64

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 add_field() ngay sau khi gi
phng thc create_table().
$this->dbforge->add_field(array $fields);
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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 65

constraint: 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,
),
);
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().
|n c s: Tm hiu PHP framework CodeIgniter

Trang 66

$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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 67

To CSV t kt qu truy vn
xut kt qu truy vn di dng CSV, ta s dng phng thc csv_from_result()
ca th vin Database Utility nh sau:
$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 xml_from_result()
ca th vin Database Utility nh sau:
$this->dbutil->xml_from_result($db_result, array $config)
Trong $db_result l bin cha kt qu tr v t cu lnh SELECT, $config l mng
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);
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.
|n c s: Tm hiu PHP framework CodeIgniter

Trang 68

// 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' => array('table1', 'table2'),
'ignore' => array(),
'format' => 'txt',
'filename' => 'mybackup.sql',
'add_drop' => TRUE,
'add_insert' => TRUE,
'newline' => "\n"
);

$this->dbutil->backup($prefs);
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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 69

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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 70

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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 71

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 Gi tr mc nh Ty chn M t
useragent
CodeIgniter Khng c Cho bit chng trnh
|n c s: Tm hiu PHP framework CodeIgniter

Trang 72

c s dng gi mail
protocol
mail
mail, sendmail
hoc smtp
Giao thc c s dng
gi mail
mailpath /usr/bin/sendmail
Khng c
ng dn n th mc
c{i t Sendmail trn my
ch
smtp_host
Khng c Khng c
a ch ca my ch
SMTP
smtp_user
Khng c Khng c
Tn ti khon s dng
my ch SMTP
smtp_pass
Khng c Khng c Mt khu ca ti khon
smtp_port
25 Khng c
Cng truy cp my ch
SMTP
smtp_timeout
5 Khng c
Thi gian tr tm ngng
khi truy cp my ch
SMTP (tnh bng giy)
wordwrap
TRUE TRUE/FALSE
Cho php s dng
wordwrap hay khng
wrapchars
76
S k t trn mt dng
khi s dng wordwrap
mailtype
Text text hoc html nh dng ca email
charset
utf8 Bng m~ c s dng
validate
FALSE TRUE/FALSE
C kim tra tnh hp l
ca a ch email khng
priority
3 1, 2, 3, 4, 5
u tin ca email vi
1 l cao nht, 3 l bnh
thng v 5 l thp nht.
crlf
\n \n, \r hoc \r\n
K t xung dng (s
dng \r\n theo RFC 822)
newline
\n \n, \r hoc \r\n
K t xung dng (s
dng \r\n theo RFC 822)
bcc_batch_mode
FALSE TRUE/FALSE C s dng BCC Batch
|n c s: Tm hiu PHP framework CodeIgniter

Trang 73

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()
|n c s: Tm hiu PHP framework CodeIgniter

Trang 74

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)
|n c s: Tm hiu PHP framework CodeIgniter

Trang 75

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();

|n c s: Tm hiu PHP framework CodeIgniter

Trang 76

$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.
|n c s: Tm hiu PHP framework CodeIgniter

Trang 77

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])
|n c s: Tm hiu PHP framework CodeIgniter

Trang 78

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)
|n c s: Tm hiu PHP framework CodeIgniter

Trang 79

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 ty chn ca th vin Session c lu trong tp tin
application/config/config.php, bao gm cc gi tr sau:
Thit lp Gi tr mc nh Ty chn M t
sess_cookie_name ci_session
Khng c
Tn ca cookie s cha
session
sess_expiration 7200

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_encrypt_cookie FALSE TRUE/FALSE
Cho bit c m ha d liu
trong session hay khng
Sess_use_database FALSE TRUE/FALSE
Cho bit c lu d liu
session v{o c s d liu
hay khng
sess_table_name ci_sessions
Tn ca bng s c lu
|n c s: Tm hiu PHP framework CodeIgniter

Trang 80

session
sess_time_to_update 300
Thi gian (tnh bng giy)
session s c ti to
sess_match_ip FALSE TRUE/FALSE
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.
sess_match_useragent FALSE TRUE/FALSE
Cho bit c so snh thng
tin trnh duyt khi c d
liu session hay khng.
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:
session_id: 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);
Vi $item l kha ca mng cha thng tin session. Chng hn, ly a ch IP ca
ngi dng, ta s dng:
|n c s: Tm hiu PHP framework CodeIgniter

Trang 81

$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 set_userdata()
nh sau:
$this->session->set_userdata(array $data);
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();
|n c s: Tm hiu PHP framework CodeIgniter

Trang 82

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)
);
|n c s: Tm hiu PHP framework CodeIgniter

Trang 83

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' => 'The Cookie Name',
'value' => 'The Value',
'expire' => '86500',
'domain' => '.some-domain.com',
'path' => '/',
'prefix' => 'myprefix_',
);

set_cookie($cookie);
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])
|n c s: Tm hiu PHP framework CodeIgniter

Trang 84

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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 85

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)
|n c s: Tm hiu PHP framework CodeIgniter

Trang 86

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
|n c s: Tm hiu PHP framework CodeIgniter

Trang 87

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

You might also like