You are on page 1of 256

BEGINNING PHP5.APACHE.

MYSQL WEB DEVELOPMENT

-1-

MC LC BEGINNING PHP5.APACHE.MYSQL WEB DEVELOPMENT...........................................................1


Chng 1: S LC V APACHE, PHP, MYSQL V CCH CI T............................3 Chng 2: TO NHNG TRANG PHP S DNG PHP5......................................................8 Chng 3: S DNG PHP VI MYSQL...............................................................................54 Chng 4: S DNG BNG TRNH BY D LIU....................................................74 Chng 5: NHNG THNH PHN CA FORM: CHO PHP NGI DNG LM VIC VI D LIU.........................................................................................................................100 Chng 6: CHO PHP NGI S DNG SON THO C S D LIU....................131 Chng 7: THAO TC V TO HNH NH VI PHP.....................................................163 Chng 8: NGI DNG NHP C HIU LC..............................................................200 Chng 9: IU KHIN V TRNH NHNG LI..........................................................233

-2-

Chng 1:

S LC V APACHE, PHP, MYSQL V CCH CI T

1.1. Tm tt s lc v Apache, PHP, MySQL:


Apache, PHP, MySQL l cc phn ca chng trnh phn mm m ngun m. Phn mm ny l s hp tc ca nhng lp trnh vin c u c.Bng vic thay i trn nhng m ngun c sn, cc lp trnh vin trn th gii tip tc hon thin v pht trin n ngy cng tr nn mnh hn v hiu qu hn. S ng gp ca nhng ngi ny c a ra cng khai cho ngi khc s dng m ngun, to ra cc phn mm ni ting trn th gii. Ti sao m ngun m gy chn ng? -N min ph: v l m ngun m nn cc lp trnh vin c th da trn m ngun sn c pht trin thm, phn mm ny khng c bn quyn nn mi ngi c th t do s dng . -N da trn nn ch thp (cross_platform) v k thut trung lp(technolory-neutral). N khng c mt nn tng c th. Tp on m ngun m bo m rng n khng c pht trin bi mt c nhn no. Do nh ngha m ngun m c cung cp bi OSI (open source initiative), m ngun m khng ph thuc vo bt c mt k thut c nhn hay mt loi giao din, n phi l mt k thut trung lp. -N khng b gii hn bi nhng phn mm khc , iu ny c ngha l nu mt chng trnh m ngun m phn phi cho nhiu chng trnh th nhng chng trnh khc c th cng l m m ngun m v giao dch trong t nhin, iu ny lm cho phn mm pht trin ti a v linh hot. -N c tnh a dng: c pht trin bi nhiu ngi thuc nhiu nn vn ho, nhiu lnh vc phong ph. Nhng phn AMP ( Apache, MySQL, PHP) lm vic vi nhau nh th no? Tng tng trang web ng nh mt nh hng, khch n n khng cn quan tm n n lm ra nh th no coi nh n c sn v ngi bi bn gip bn chn mn n.

-3-

Ti c th m t 3 thnh phn ca AMP nh sau: Apache: C tng tng nh mt u bp . Khi khch hng yu cu mn n . C ta nhanh nhn linh hot v c th chun b v s nhng mn n khc nhau. Hot ng ca Apache trong nhiu phng thc ging nhau l phn tch nhng file ring l v a ra kt qu. PHP: ging nh ngi bi bn trong khch sn . Anh ta nhn li nghi ca khch hng v mang n mn n t trong nh bp vi nhng li hng dn c th. MySQL: l nhng kho lu tr, nhng thnh phn thng tin. Khi khch n n (ngi thm trang web) n nh hng Anh ta s ch n mn n vi nhu cu ca mnh. Ngi bi bn (PHP) ly thc n theo yu cu t trong nh bp c lm bi u bp(Apache). Ngi u bp ny s n kho ly nhng nguyn liu(d liu) chun b cho mn n.

1.1.1.

Apache :
Hot ng ca apache nh l web server ca bn : cng vic chnh ca n

l phn tch bt k nhng file yu cu ca trnh duyt web no v a ra nhng kt qu chnh xc.Apache tuyt vi c th hon thnh hu ht nhng yu cu ca bn.

1.1.2.

PHP:
PHP l mt ngn ng m rng chnh m cho php trang web ca bn hot

ng. N linh hot v tng i nh. N c p dng v pht trin trong kinh doanh. N cng ging nh ngn ng Asp ca Microsoft, Nhng PHP thn thin hn,d s dng hn.

1.1.3.

MySQL :
MySQL l mt cu trc d liu c th kt hp vi PHP, Apache lm

vic vi nhau. N l ngn ng truy vn c cu trc. N a ra hiu ng v tc cao. N cp nht d liu, xa d liu, thm d liu m khng nh hng n cu trc h thng.

-4-

1.2. Ci t:
Cc bc ci t b ba Apache,PHP,MySQL Bc 1: ti b ba Apache, PHP, MySQL ti a ch :
182H

http://www.apachefriends.org/download.php?xampp-win32-1.4.16-installer.exe

Bc 2 : Ci t bnh thng nh nhng ng dng khc Bc 3 : Kim tra ci t thnh cng cha:

Sau khi ci t trn mn hnh c biu tng nh Hnh 1.2-1

Hinh 1.2.1

Nhp p vo biu tng s xut hin nh Hnh 1.2-2

Hinh 1.2.2

Nhp vo nt start ca Apache v MySQL cho chng trnh chy Hnh 1.2.3

Hinh 1.2.3

Sau thc hin cc thao tc vit lnh trn PHP hoc MySQL
-5-

Lu :khi thc hin lnh trn PHP hoc MySQL thi vn chng trnh XAMPP chy
song song vi chng trnh ang thc hin. kim tra vic ci t c thnh cng cha ta thc hin nh sau. Vo mt trnh son tho chng hng nh Notepad g dng lnh: <? echo hello mom ; ?> Lu vo th mc ci t XAMP: xamp\htdocs. Vi ui *.php Sau m trnh duyt web g http://localhost/*.php
183H

Nu thnh cng trnh duyt s xut hin nh Hnh 1.2.4:

Hinh 1.2.4

Nh vy l vic ci t thnh cng. Hoc g nh sau: <? Phpinfo(); ?> Bn s thy kt qu nh Hnh 1.2.5:

-6-

Hinh 1.2.5

-7-

Chng 2:

TO NHNG TRANG PHP S DNG PHP5

Chng 2 gii thiu nhng phn sau:


1. S dng echo trnh bi text. 2. nh dng text bng HTML v PHP. 3. Hng v bin. 4. S dng URL truyn bin . 5. Sessions v cookies. 6. HTML forms. 7. Mnh if/else. 8. Includes. 9. Functions. 10. Array v foreach. 11. While v do/while. 12. S dng lp v th t vi OOP.

Hai nguyn tc c bn trong PHP


- PHP hin th trong trang Web vi th m v th ng nh sau: <?php // First line of code goes here; // Second line of code goes here; // Third line of code goes here; ?> -Nhng dng PHP kt thc bng du ;.Li ch thch oc vit sau // (trn mi dng) hoc /* u on ch thch v */ cui on ch thch

2.1. S dng echo trnh bi text


Hm echo l hm xut c bn trn trnh duyt Web. Vd: <?php echo Im a lumberjack.; echo And Im okay.;
-8-

?> Kt qu Hnh 2.1.1:

Hinh 2.1.1

Chng ta c th lng HTML vi PHP. Vd: <?php echo <h1>Im a lumberjack.</h1>; echo <h2>And Im okay.</h2>; ?> Kt qu nh Hnh 2.1.2:

Hinh 2.1.2

2.2. nh dng text bng HTML v PHP


<html> <head> <title>My First PHP Program</title> </head>

-9-

<body> <?php echo <h1>Im a lumberjack.</h1>; echo <h2>And Im okay.</h2>; ?> </body> </html> Vic kt hp gia HTML v PHP nhm t ti hai muc tiu : Ci tin c hnh thc trnh by ca web site C th gi xen k nhng dng m HTML vi cc on m ca PHP. Bn c th so snh hai on m sau: Vd1: <?php echo <table width=100% border=2 bgcolor=#FFFFFF>; echo <tr>; echo <td width=50%>; echo <font face=Verdana, Arial size=2>; echo First Name:; echo </font></td>; echo <td width=50%>; echo <font face=Verdana, Arial size=2>; echo $_POST[fname] echo </font></td>; echo </tr>; echo </table>; ?> Kt qu hin th ra trnh duyt Hnh 2.2.1:

Hinh 2.2.1

Vd2:

- 10 -

<table width="100%" border="2" bgcolor="#FFFFFF"> <tr> <td width="50%"> <font face="Verdana, Arial" size="2"> First Name: </font> </td> <td width="50%"> <font face="Verdana, Arial" size="2"> <? echo $_POST["fname"]; ?> </font> </td> </tr> </table> Kt qu hin th nh Hnh 2.2.2:

Hinh 2.2.2

2.3. S dng hng v bin


2.3.1. Tng quan v hng:
Tng t nh trong nhng ngn ng lp trnh khc, hng trong PHP cng l mt gi tr c khai bo trc khi s dng. N phi bt u bng ch ci hoc du gch di (_) v khng c bt u bng s, n c th l mt chui. Hng trong PHP c nh ngha bng hm define(). N khng thay i v khng c c nh ngha li. Vd: to mt file mi, lu vi tn moviesite.php <html> <head> <title>My Movie Site</title>
- 11 -

</head> <body> <?php define (FAVMOVIE, The Life of Brian); echo My favorite movie is ; echo FAVMOVIE; ?> </body> </html> Kt qu: Trn trnh duyt xut hin nh Hnh 2.3.1:

Hinh 2.3.1

2.3.2.

Tng quan v bin.


Khng ging nh hng, n khng cn nh ngha, c th thay i trong

chng trnh. Cch t tn ca bin cng ging nh cch t tn ca Hng. Bin phn bit ch hoa v ch thng. Tt c bin trong PHP u bt u bng du $ bt chp l loi bin g: chui, s nguyn, s ng hoc mng, tt c chng u trng ging nhau. N t ng hiu cc kiu bin ngi dng khng cn phi khai bo kiu bin. Ni chung, khi s dng bin trong PHP ta cn quan tm n 3 v tr khc nhau ca bin: 1. Khai bo ngay trong m lnh PHP 2. Chuyn tip t mt trang HTML. 3. L bin sn c trong h thng PHP.

- 12 -

Vd: S dng li v d moviesite.php ch thm vo bin movierate: <html> <head> <title>My Movie Site</title> </head> <body> <?php define ("FAVMOVIE", "The Life of Brian"); echo "My favorite movie is "; echo FAVMOVIE; echo "<br>"; $movierate = 5; echo "My movie rating for this movie is: "; echo $movierate; ?> </body> </html> Kt qu hin th nh Hnh 2.3.2.1:

Hinh 2.3.2.1

Ch : Trong PHP, php gn l du =, so snh l = =: PHP c th t ng chuyn i kiu trong cc php tnh.

- 13 -

PHP C th thc hin vic cng mt bin s vi mt chui c s ng u: Vd: $a=2; $ b = 2 con heo con; $c = $a + $b; Echo $c; Kt qu : $c = 4. PHP c mt s hm ton hc c xy dng da trn s m bn c th s dng nhng bin cha con s nh nhng hm sau: - rand(min),(max) pht sinh ra mt s ngu nhin. - cell(number) lm trn s thp phn thnh mt s nguyn k tip ln hn. - floor(number) lm trn mt s thp phn xung mt s nguyn nh hn. - number_format(number[,dec place] [,dec point] [,thousands]):nh dng mt s thp phn theo cch : chn ch s phn thp phn, du ngn cch gia phn thp phn v phn nguyn, du phn cch gia 3 ch s ca phn nguyn. - max(argument1, argument2, ...):Tr v gi tr ln nht trong cc i s. - min(argument1, argument2, ...): Tr v gi tr nh nht.

2.4. Truyn bin gia cc trang


C bn cch c bn truyn bin gia cc trang: truyn bin trong URL, qua session, cookie hoc vi mt HTML form. Trc khi bn lun v 4 cch truyn bin gia cc trang ta cn hiu mt vi khi nim gi l bin ton cc. y l cu hnh trong file php.ini. Khi n c t l off, gi tr ban u ca bin c t s chn vo gi to ca mt on m bn ngoi. Trong cc phin bn trc PHP mc nh bin ny trong php.ini l on. K t phin bn 4.2 th n mc nh l off. y l nguyn nhn khin cc lp trnh vin phi mt ng bi v bn phi cp n mt bin khc ca bn nu bin ton cc l off hoc ngc li tm tt c cc bin c gi tr tin n rng. Mc d c nhiu Web ch iu chnh n thnh on nhng v l do bo mt h khng lm th. Trong ti liu ny bin ton cc c iu chnh l off. Thay v gi gi tr ca bin bi c php chun $tn bin, khi bin ton cc l off
- 14 -

v bn cn truyn bin qua cc trang, bn cn phi cp n chng trong mt cch khc. Nhng ch trong trang tip nhn. Bn s thy iu ny trong phn tip theo. Nhng trong nhng cch khc c lin quan n cc bin ph thuc vo vic h gi chng nh th no. C php v cch s dng: $_GET[tn bin]: Khi phng thc chuyn bin l GET phng thc trong HTML forms. $_POST[tn bin]: Khi phng thc chuyn bin l POST phng thc trong HTML forms. $_SESSION[tn bin]: Khi bin c n nh gi tr t mt session c bit. $_COOKIE[tn bin]: Khi bin c n nh gi tr t mt cookie. $_REQUEST[tn bin]:Khi n khng quan trng ($_REQUEST bao gm cc bin chuyn t bt c cch no trn). $_SERVER[tn bin]: Khi bin c n nh gi tr t mt server. $_FILES[tn bin]: Khi bin c n nh gi tr t mt file upload. $_ENV[tn bin]: Khi bin c n nh gi tr t mt mi trng h iu hnh. Nu bn khng gi ra cc bin s dng c php ny th gi tr ca n s l rng trong chng trnh ca bn, y c th l nguyn nhn lm cho chng trnh dch ca bn b tht bi.

2.4.1.

Truyn bin qua URL

2.4.1.1. Phng thc u tin truyn bin gia cc trang l thng qua mt
URL. V d mt URL:
184H

http://www.mydomain.com/news/articles/showart.php?id=12345

Nhng phn sau du ? gi l chui truy vn (query string). C th ni gia cc bin trong URL bng cch dng du & Nh v d sau:
185H

http://www.mydomain.com/news/articles/showart.php?id=12345&lang=en

y c mt vi bt li : Mi ngi c th nhn thy gi tr ca bin, nhng thng tin nhy cm


- 15 -

th khng c bo mt khi s dng cch thc ny. Ngi dng c th i gi tr bin trong URL, m nhng phn m ngi lp trnh khng mun hin th. Mt ngi s dng c th gp phi nhng thng tin khng chnh xc hoc c khi dng URL c lu vi nhng bin c trong .. V d: s dng bin URL Sa file moviesite.php nh sau. <html> <head> <title>My Movie Site - <?php echo $favmovie; ?></title> </head> <body> <?php //xa dng: define(FAVMOVIE, The Life of Brian); echo My favorite movie is ; echo $favmovie; echo <br>; $movierate = 5; echo My movie rating for this movie is: ; echo $movierate; ?> </body> </html> M file mi nhp on m nh sau v lu vi tn movie1.php <html> <head> <title>Find my Favorite Movie!</title> </head> <body> <?php
- 16 -

echo "<a href='moviesite.php?favmovie=Stripes'>"; echo "Click here to see information about my favorite movie!"; echo "</a>"; ?> </body> </html> Cho trnh duyt chy file movie1.php Kt qu nh Hnh 2.4.1.1.1:

Hinh 2.4.1.1.1

Khi click vo lin kt bn s thy kt qu nh Hnh 2.4.1.1.2:

Hinh 2.4.1.1.2:

Bn thy l gi tr ca bin $favmovie l Stripes trong URL, phi hin th trong

- 17 -

Hinh 2.4.1.1.3, Nhng y khng hin th gi tr trong thn chng trinh ca bn, n ch

l tng tng. Nu bn c iu chnh E_ALL trong file php.ini, bn s thy thng bo li: bin khng c nh ngha. C ci g sai? Bn on chnh xc nu bn ni l bin ton cc! y l mt v d n gin v vic khng khi phc li bin trong cch hiu chnh c th lm cho trang web ca bn khng lm vic v lm bn kh hiu. By gi sa i file moviesite.php nh sau. <html> <head> <title>My Movie Site - <?php echo $_REQUEST[favmovie]; ?></title> </head> <body> <?php echo My favorite movie is ; echo $_REQUEST[favmovie]; echo <br>; $movierate = 5; echo My movie rating for this movie is: ; echo $movierate; ?> </body> </html> By gi cho chy li movie1.php vo click vo lin kt s cho kt qu nh Hinh
2.4.1.1.3

- 18 -

Hinh 2.4.1.1.3

Ch : y c mt vi iu cn lu : M PHP c th chn vo bt c u trong chng trnh xen ln vo m HTML (trong v d ny n nm phn title). Bn thy hiu qu u tin l khng cn ly bin ton cc truy cp vo mt bin t trang khc, nhng cn ch rng khi bn cp n $movierate bn khng bao gm c php ca bin ton cc, bi v bin $movierate nm trong moviesite.php,bn khng th ly thng tin t trang khc hoc m khc. $_REQUEST c chn trong c php bin ca bn bi v n tht s khng c ngha trong v d ny ni m gi tr ca bin $favmovie a n. Bn khng c kh khn g khi cng nhn mi th hoc ngn chn ngi dng khng c php vo web site ca bn. Bn n gin ch mun chuyn qua gi tr .

2.4.1.2. K t c bit ca URL.


Khi truyn bin qua URL , trong trng hp bin cha khong trng, du & hay mt k t c bit no , th ta ta dng hm urlencode(). V d: <html> <head> <title>Find my Favorite Movie!</title> </head> <body>

- 19 -

<?php //thm dng: $myfavmovie = urlencode("Life of Brian"); //thay i dng: echo "<a href='moviesite.php?favmovie=$myfavmovie'>"; //echo "<a href='moviesite.php?favmovie=Stripes'>"; echo "Click here to see information about my favorite movie!"; echo "</a>"; ?> </body> </html> Khi click vo lin kt kt qu nh Hinh 2.4.1.2.1:

Hinh 2.4.1.2.1

2.5. Session v Cooking


2.5.1. Session
Session l tp hp nhng bin tm tn ti cho n khi ng trnh duyt, tr khi ta c nhng ch nh khc trong php.ini. Mi session c mt session ID duy nht, c th c truyn qua cookie hoc qua URL nu phng thc trc khng c php. bt u mt session, s dng hm session_start() v khng c dng hm session_register, trong trng hp ta gi nh register_globals trong php.ini l
- 20 -

off. V d: Thm vo v d movie1.php <?php session_start(); $_SESSION[username] = Joe12345; $_SESSION[authuser] = 1; ?> <html> Thm vo v d moviesite.php <?php session_start(); //Kim tra thy nu ngi dng ng nhp vi mt mt khu c sn. if ($_SESSION[authuser] != 1) { echo Sorry, but you dont have permission to view this page, you loser!; exit(); } ?> <html> <body> <?php echo Welcome to our site, ; echo $_SESSION[username]; echo ! <br>; ?> Khi click vo lin kt kt qu nh Hinh 2.5.1.1:

- 21 -

Hinh 2.5.1.1

Cc thng tin v session phi t ngay u trang, trc bt k m HTML no. Nu phn trc on m PHP ti u trang c khong trng th s c thng bo li nh Hinh 2.5.1.2:

Hinh 2.5.1.2:

Nu s dng session variables th phi dng hm session_start() u mi trang.

2.5.2.

Cookies.
Cookies l nhng mu thng tin nh c lu trn my ngi dng web.

Cc Cookies do Webserver pht sinh, lu tr li, sau s c c ln truy cp sau. c th s dng mt cookies bn phi s dng hm: setcookie() nh sau: setcookie(tn cookie, gi tr, thi gian kt thc, ng dn, vng, kt ni an ton); V d:

- 22 -

Thm vo v d movie1.php <?php setcookie(username, Joe, time()+60); //$_SESSION[username]=Joe12345; Thm vo v d moviesite.php <?php echo Welcome to our site, ; echo $_COOKIE[username]; //echo $_SESSION[username]; echo ! <br>; Kt qu nh Hinh 2.5.2.:

Hinh 2.5.2.

Sau 60 giy th ch Joe s bin mt(nu cp nht li)

2.6. HTML FORMS


2.6.1. Lu chuyn thng tin vi form.
Form l m trong HTML, n c bao bi mt cp th m v ng: <form> </form>, n c nhng thuc tnh sau: Action: Thuc tnh ny ch ra ng dn URL ca trang m Form s c gi n x l, n cha ng dn URL tng i hoc URL tuyt i. Method: Thuc tnh ny ch ra kiu HTTP yu cu trnh duyt gi thng tin n server, n phi c thit lp l POST hoc GET.
- 23 -

Name: y l thuc tnh hu hiu nht trong vic qun l cc thnh phn ca form. Tn form khng c gi n server khi form c gi i. Cc kiu phn t nhp trn form: Text:y l kiu cn bn n c nhng thuc tnh sau: Text c 3 thuc tnh: Size: chiu rng text tnh bng s k t. Maxlength:Gii hn s k t ti a c th nhp vo. Value:cha gi tr mc nh trong vn bn, ngi dng c th nhp gi tr khc Checkbox: Tn v gi tr ca hp kim ny ch ny ch c truyn nu c chn khi form c gi. Nu t checked c trong th th hp kim c chn mc nh. Radio: Nt ny cho php ngi dng chn ch mt trong s cc la chn c cng tn. Select: L hp chn s xung, thng cho php ngi dng chn mt t mt danh sch, s la chn ny c th m t vi thuc tnh value. Password: Ging vi kiu text, tuy nhin vn bn nhp vo hp c hin th bng k t thay th (k t *) Nhng nt khc c miu t nh nt submit, reset, hoc nhng hnh nh trn nhng nt do ngi dng to ra. V d :S dng form ly thng tin: M file movie1.php v sa li nh sau: <?php session_start(); $_SESSION['username'] = $_POST['user']; $_SESSION['userpass'] = $_POST['pass']; $_SESSION['authuser'] = 0; //Kim tra thng tin username v password if (($_SESSION['username'] == 'Joe') and ($_SESSION['userpass'] == '12345')) { $_SESSION['authuser'] = 1;
- 24 -

} else { echo "Sorry, but you dont have permission to view this page, you loser!"; exit(); } ?> Sau sa trong moviesite.php nh sau: //xa dng ny: echo $_COOKIE[username]; echo $_SESSION['username']; To mt file mi lu vi tn login.php <?php session_unset(); ?> <html> <head> <title>Please Log In</title> </head> <body> <form method="post" action="movie1.php"> <p>Enter your username: <input type="text" name="user"> </p> <p>Enter your password: <input type="password" name="pass"> </p> <p> <input type="submit" name="Submit" value="Submit"> </p> </form> </body>

- 25 -

</html> M trnh duyt chy file login.php, nhp vo user name: Joe12345, password: 12345, bn s thy kt qu hin th nh Hnh 2.6.1.1:

Hnh 2.6.1.1

Khi click vo Submit, s thy kt qu nh Hnh 2.6.1.2:

Hnh 2.6.1.2

Nu by gi ta nhp user name l Joe v password l 12345 th kt qu nh Hnh


2.6.1.3:

- 26 -

Hnh 2.6.1.3

Khi click vo lin kt th kt qu nh Hnh 2.6.1.4:

Hinh 2.6.1.4

2.7. CU LNH IF/ELSE


2.7.1. Mnh if.
Khc vi nhng ngn ng lp trnh khc, PHP s dng mnh if ring l, c php nh sau: if (iu kin) m lnh c thi hnh nu iu kin ng; V d: if ($stockmarket >= 10000) echo Hooray! Time to Party!; Trong trng hp mnh if c nhiu cu lnh th ta dng du {} bao bc n. V d if ($stockmarket >= 10000) {
- 27 -

echo Hooray! Time to Party!; $mood = happy; $retirement = potentially obtainable; } Cc php ton dng so snh trong mnh if Operator Bng Khng bng Ln hn Nh hn Ln hn hoc bng Nh hn hoc bng Bng, v kiu d liu tha kiu d liu ging nhau Khng bng hoc kiu d liu khng ging nhau V d: <html> <head> <title>How many days in this month?</title> </head> <body> <?php $month = date("n"); if ($month = = 1) echo "31"; if ($month = = 2) echo "28 (unless its a leap year)"; if ($month = = 3) echo "31"; if ($month = = 4) echo "30"; if ($month = = 5) echo "31"; if ($month = = 6) echo "30"; if ($month = = 7) echo "31"; if ($month = = 8) echo "31"; if ($month = = 9) echo "30"; Appropriate Syntax :== : != or <> : > : < : >= : <= : === : != =

- 28 -

if ($month = = 10) echo "31"; if ($month = = 11) echo "30"; if ($month = = 12) echo "31"; ?> </body> </html> Kt qu nh Hinh 2.7.1.1 :

Hinh 2.7.1.1

Hot ng ca mnh if tng t nh nhng ngn ng lp trnh khc . im lu trong v d ny l hm date("n")s cho gi tr thng hin hnh khi ngi truy cp vo website.

2.7.2.

S dng if v else lng nhau.


Trong mt s trng hp dng mnh if th tt, nhng i khi kt hp gia

if v else s cho ta kt qu nh mong mun. <html> <head> <title>Is it a leap year?</title> </head> <body> <?php $leapyear = date("L"); if ($leapyear = = 1) echo "Hooray! Its a leap year!";

- 29 -

else echo "Aww, sorry, mate. No leap year this year."; ?> </body> </html> Kt qu nh Hnh 2.7.2:

Hnh 2.7.2

2.8. S dng include cho on m c hiu qu hn


Khi thc hin vit lnh trong PHP trnh s lp i lp li khng cn thit ta dng hm include. hiu r vn ny chng ta hy xt v d sau: To mt file mi t vi tn header.php <div align="center"><font size="4">Welcome to my movie review site!</font> <br> <?php echo "Today is "; echo date("F d"); echo ", "; echo date("Y"); ?> </div> Sau thm vo cc file movie1.php, moviesite.php v login.php cu lnh sau ngay sau th <body>: <?php include "header.php"; ?> M trnh duyt vi tn login.php ban s c kt qu nh Hnh 2.8:
- 30 -

Hnh 2.8

Hot ng:Khi PHP gp mt include trong on m script, n ngng hot ng v ngay lp tc tm n file c ch dn bi include. Server phn tch file ny v tr kt qu tr li file gc v vic phn tch m li tip tc ti ni dng trc .

2.9. S dng Hm cho on m c hiu qu hn


Nh vi include, Hm lm cho on m ca bn hiu qu hn v d dng bin dch hn. Hm l mt khi lnh c th c gi bt c ni no trong chng trnh. Chng th s dng li bt c khi no. N c th gip ta t hoc cp nht bin v c th xp lng vo nhau. Bn cng c th to mt hm ch c thc thi khi iu kin no tha mn. Cc hm t chng l cc chng trnh nh. Chng khng bit bt c bin no xung quanh n tr khi bn khai bo bin ton cc. C th dng khai bo global $tn_bin to bin ton cc. iu ny khng cn vi nhng bin ton cc mc nh nh POST, GET. V d: M movie1.php thm vo an m nh sau: echo "<br>"; echo "<a href ='moviesite.php?movienum=5'>"; echo "Click here to see my top 5 movies."; echo "</a>";
- 31 -

echo "<br>"; echo "<a href='moviesite.php?movienum=10'>"; echo "Click here to see my top 10 movies."; echo "</a>"; ?> </body> </html> M moviesite.php thm vo phn sau: <?php function listmovies_1() { echo "1. Life of Brian<br>"; echo "2. Stripes<br>"; echo "3. Office Space<br>"; echo "4. The Holy Grail<br>"; echo "5. Matrix<br>"; } function listmovies_2() { echo "6. Terminator 2<br>"; echo "7. Star Wars<br>"; echo "8. Close Encounters of the Third Kind<br>"; echo "9. Sixteen Candles<br>"; echo "10. Caddyshack<br>"; } if (isset($_REQUEST['favmovie'])) { ---------------------} else { echo "My top ";

- 32 -

echo $_REQUEST['movienum']; echo " movies are:"; echo "<br>"; listmovies_1(); if ($_REQUEST['movienum'] == 10) listmovies_2(); } By gi ta cho chy file login.php : ng nhp vi tn username l Joe, password l 12345 Bn s thy kt qu nh sau Hnh 2.9.1:

Hnh 2.9.1

Khi click vo lin kt th hai ta s thy nh Hnh 2.9.2:

- 33 -

Hnh 2.9.2

Khi click vo lin kt th ba ta s thy nh Hnh 2.9.3:

Hnh 2.9.3

2.10. Mng
Mng l mt danh sch cha thng tin vi kha v c lu tr vi mt tn bin. Mt mng c dng thng tin v kha, kha l ct u tin trong bng. Kha phi ng nht d t chc v s dng.

2.10.1.

C php ca mng.
Mng mt chiu <?php $husband = array("firstname"=>"Albert", "lastname"=>",instein",
- 34 -

2.10.1.1.

"age"=>"124"); echo $husband[firstname]; ?> Kt qu xut ra mn hnh Hnh 2.10.1.1:

Hinh 2.10.1.1

Ch : S dng => thay cho du bng, khi n nh nhng gi tr n kha ca mng. iu ny cho bn xut ra Albert v tt c gi tr vn c lu tr trong bin $husband. Bn cng c th t mt mng gi tr theo cch sau: $husband[firstname] = Albert; $husband[lastname] = Einstein; $husband[age] = 124;

2.10.1.2.
V d:

Mng a chiu:

<?php $table1 = array(husband => array(firstname=>Albert, lastname=>Einstein, age=>124), wife => array(firstname=>Mileva, lastname=>Einstein,

- 35 -

age=>123)); //do the same for each table in your restaurant ?> Nu mun xut firstname ca mi ngi, ta dng hm xut nh sau: <?php echo $table1[husband][firstname]; echo & ; echo $table1[wife][firstname];?> Kt qu Hnh 2.10.1.2:

Hnh 2.10.1.2

n gin ta c th dng mt cch khc lu tr mng nh sau: <?php $flavor[] = blue raspberry; $flavor[] = root beer; $flavor[] = pineapple; ?> xut thng tin ra ta thc hin cu lnh nh sau: echo $flavor[0]; //xut blue raspberry echo $flavor[1]; // xut root beer echo $flavor[2]; // xut pineapple

2.10.1.3.

Sp xp mng

PHP cung cp nhiu cch lu tr gi tr ca mng, sau y l m t mt vi hm sp xp trong mng.

- 36 -

arsort(array) :Sp xp mt mng gim theo gi tr v duy tr quan h ca kha/ gi tr asort(array): Sp xp mt mng tng theo gi tr v duy tr quan h ca kha/ gi tr rsort(array): Sp xp mt mng gim theo gi tr sort(array): Sp xp mt mng tng theo gi tr V d: <?php $flavor[] = "blue raspberry"; $flavor[] = "root beer"; $flavor[] = "pineapple"; sort($flavor); print_r($flavor); ?> Kt qu nh Hnh 2.10.1.3:

Hnh 2.10.1.3

Ch : y dng hm mi prinf_r, chc nng ca hm ny l xut thng tin v mt bin m ngi ta c th c n d dng. N thng c dng kim tra gi tr ca mng, mt cch c th. y hm sort dng sp xp theo th t Alpha

- 37 -

2.10.2.
V d:

Cu trc Foreach
<?php $flavor[] = "blue raspberry"; $flavor[] = "root beer"; $flavor[] = "pineapple"; echo "My favorite flavors are:<br>"; foreach ($flavor as $currentvalue) { //these lines will execute as long as there is a value in $flavor echo $currentvalue . "<br>\n"; } ?>

Kt qu nh Hnh 2.10.2.1:

Hnh 2.10.2.1

Khi PHP x l trong mng. N gi v tr ca cc kha bng cch s dng con tr trong mng. Khi hm foreach c gi con tr ch gi tr u tin trong mng. Cui hm con tr chuyn xung kha cui cng trong mng. V tr ca con tr c th l cng c tr gip. V d: 1/ Thay i moviesite nh sau: <?php session_start();

- 38 -

//kim tra username v password if ($_SESSION['authuser'] != 1) { echo "Sorry, but you don't have permission to view this page, you loser!"; exit(); } ?> <html> <head> <title>My Movie Site</title> </head> <body> <?php include "header.php"; ?> <?php $favmovies = array("Life of Brian", "Stripes", "Office Space", "The Holy Grail", "Matrix", "Terminator 2", "Star Wars", "Close Encounters of the Third Kind", "Sixteen Candles", "Caddyshack"); /*/delete these lines: function listmovies_1() { echo "1. Life of Brian<br>"; echo "2. Stripes<br>"; echo "3. Office Space<br>"; echo "4. The Holy Grail<br>";

- 39 -

echo "5. Matrix<br>"; } function listmovies_2() { echo "6. Terminator 2<br>"; echo "7. Star Wars<br>"; echo "8. Close Encounters of the Third Kind<br>"; echo "9. Sixteen Candles<br>"; echo "10. Caddyshack<br>"; } //kt thc dng xa*/ if (isset($_REQUEST['favmovie'])) { echo "Welcome to our site, "; echo $_SESSION['username']; echo "! <br>"; echo "My favorite movie is "; echo $_REQUEST['favmovie']; echo "<br>"; $movierate = 5; echo "My movie rating for this movie is: "; echo $movierate; } else { echo "My top 10 movies are:<br>"; if (isset($_REQUEST['sorted'])) { sort($favmovies); } /*/delete these lines echo $_REQUEST['movienum'];

- 40 -

echo " movies are:"; echo "<br>"; listmovies_1(); if ($_REQUEST['movienum'] == 10) listmovies_2(); //end of deleted lines*/ foreach ($favmovies as $currentvalue) { echo $currentvalue; echo "<br>\n"; } } ?> </body> </html> 2/ Thay i movie1.php nh sau: <?php session_start(); $_SESSION['username'] = $_POST['user']; $_SESSION['userpass'] = $_POST['pass']; $_SESSION['authuser'] = 0; // kim tra username v password if (($_SESSION['username'] == 'Joe') and ($_SESSION['userpass'] == '12345')) { $_SESSION['authuser'] = 1; } else { echo "Sorry, but you don't have permission to view this page, you loser!"; exit(); }

- 41 -

?> <html> <head> <title>Find my Favorite Movie!</title> </head> <body> <?php include "header.php"; ?> <?php $myfavmovie = urlencode("Life of Brian"); echo "<a href='moviesite.php?favmovie=$myfavmovie'>"; echo "Click here to see information about my favorite movie!"; echo "</a>"; echo "<br>"; /*/delete these lines echo "<a href='moviesite.php?movienum=5'>"; echo "Click here to see my top 5 movies."; echo "</a>"; echo "<br>"; //end of deleted lines*/ //change the following line: echo "<a href='moviesite.php'>"; echo "Click here to see my top 10 movies."; echo "</a>"; echo "<br>"; echo "<a href='moviesite.php?sorted=true'>"; echo "Click here to see my top 10 movies, sorted alphabetically."; echo "</a>"; ?> </body> </html>

- 42 -

3/ Cho chy login.php v click vo dng


186H

Click here to see my top 10 movies.

Bn s thy kt qu nh Hnh 2.10.2.2 :

Hnh 2.10.2.2

Quay li file movie1.php click vo:


187H

Click here to see my top 10 movies, sorted alphabetically.

Bn s thy kt qu nh sau nh Hnh 2.10.2.3:

Hnh 2.10.2.3

y c s sp xp theo th t alpha Cch thc hot ng : Trc tin bn t danh sch ng trong bin, $favmovies vi mng. Sau bn c th danh sch movie tng ci mt bng cch s dng foreach trong file

- 43 -

moviesite.php. Bn cng c th thm mt lin kt ngi s dng sp xp danh sch theo alphabel bng cch dng bin c tn $_REQUEST[sorted]. Khi bin ny l true th hm sort() c thc thi v bn truyn bin true qua URL trong lin kt.

2.11. While v do.. while


Nh ta thy hm foreach hot ng trn mi phn t ca mng. Ta cng c th dng cu lnh while lm iu . V d: S dng vng lp while in ra dy s t 15 $num = 1; while ($num <= 5) { echo $num; echo <br>; $num = $num + 1; } Tng t vi do .. while cng cho ra cng kt qu. $num = 1; do { echo $num; echo <br>; $num = $num + 1 } while ($num <= 5); V d : v vic s dng hm while: 1. Thay i movie1.php nh sau: <?php session_start(); $_SESSION[username] = $_POST[user]; $_SESSION[userpass] = $_POST[pass];
- 44 -

$_SESSION[authuser] = 0; // kim tra username v password if (($_SESSION[username] == Joe) and $_SESSION[userpass] = = 12345)) { $_SESSION[authuser] = 1; } else { echo Sorry, but you dont have permission to view this page, you loser!; exit(); } ?> <html> <head> <title>Find my Favorite Movie!</title> </head> <body> <?php include header.php ?> <?php $myfavmovie=urlencode(Life of Brian); echo <a href=moviesite.php?favmovie=$myfavmovie>; echo Click here to see information about my favorite movie!; echo </a>; echo <br>; /* echo <a href=moviesite.php>; echo Click here to see my top 10 movies.; echo </a>; echo <br>; echo <a href=moviesite.php?sorted=true>; echo Click here to see my top 10 movies, sorted alphabetically.; echo </a>;

- 45 -

*/ echo Or choose how many movies you would like to see:; echo </a>; echo <br>; ?> <form method=post action=moviesite.php> <p>Enter number of movies (up to 10): <input type=text name=num> <br> Check here if you want the list sorted alphabetically: <input type=checkbox name=sorted> </p> <input type=submit name=Submit value=Submit> </form> </body> </html> 2. Thay i moviesite.php: <?php session_start(); //check to see if user has logged in with a valid password if ($_SESSION[authuser] != 1) { echo Sorry, but you dont have permission to view this page, you loser!; exit(); } ?> <html> <head> <title>My Movie Site</title> </head> <body>

- 46 -

<?php include header.php; ?> <?php $favmovies = array(Life of Brian, Stripes, Office Space, The Holy Grail, Matrix, Terminator 2, Star Wars, Close Encounters of the Third Kind, Sixteen Candles, Caddyshack); if (isset($_REQUEST[favmovie])) {//isset(xac dinh mot bien co trong //tap hop khong) echo Welcome to our site, ; echo $_SESSION[username]; echo ! <br>; echo My favorite movie is ; echo $_REQUEST[favmovie]; echo <br>; $movierate = 5; echo My movie rating for this movie is: ; echo $movierate; } else { echo My top . $_POST[num] . movies are:<br>; if (isset($_REQUEST[sorted])) { sort($favmovies); } //list the movies $numlist = 1; while ($numlist <= $_POST[num])

- 47 -

{ echo $numlist; echo . ; echo pos($favmovies); next($favmovies); echo <br>\n; $numlist = $numlist + 1; } /* foreach ($favmovies as $currentvalue) { echo $currentvalue; echo <br>\n; } */ } ?> </body> </html> Kt qu Hnh 2.11

Hnh 2.11

- 48 -

Khi in vo mt s v nh du check vo kim tra th kt qu s hin ra danh sch c s phn t bng vi con s nhp vo v sp xp theo th t alphabel. Ch : Chng ta thm vo echo mt vi th thut: EchoMy top.$_POST[num].movie are:<br>; Vi phng thc ny bn c th gp vi li v du nhy kp() khng c nhn ra. Bn t $numlist l 1, v iu ny kim tra con s bn t. Bn s dng bin $_POST[num] t gii hn danh sch bn cho; con s ny c cho bi ngi s dng trong file movie1.php Hm pos($favmovies) cng l hm mi. Hm ny tr v gi tr hin hnh ni m con tr c bt u. Bn mun thy gi tr hin hnh th xut ra hm ny. Hm next($favmovies) cng l hm mng khc m con tr ca mng ch ti gi tr tip theo trong hng. iu ny d dng lp li trong mnh tip theo.

2.12. Nhng c php xen ln trong php.


2.12.1. Xen ln gia <?php v ?>
- <? v ?> Phi m trong file php.ini vi th m ngn. - <% v %> Phi m trong file php.ini vi th ASP - <script language=PHP> and </script>.y l gi tr khng chuyn i trong file php.ini Bn c th xem code php trong html trong cch khc

2.12.2.

Xen ln trong mnh echo


Bn s dng print_r(), nhng bn cng s dng print() trnh by

on text hoc gi tr bin trong trang web ca bn. S khc nhau gia echo() v printf() l khi bn s dng print(), mt gi tr 0 hoc 1 s c tr li cho s thnh cng hay tht bi ca lnh print(). Trong trng hp ny, bn cng c th ni mi th khng in ra khi s dng lnh print(). Trong khi echo() ch a ra nhng g khng c m bn bit l khng c hoc n lm vic khng chnh xc. Trong cc trng hp khc th c hai l nh nhau.

- 49 -

2.12.3. 2.12.4. 2.12.5.

Xen ln gia cc php ton logic.


Cc php ton and(&&), or(||) l cc php ton logic.

Xen ln trong vic s dng du ().


Ngoi vic s dng du () ta cng c th s dng du (= <<<)

Xen ln nhng gi tr tng, gim


++$value:Tng bin ln 1, tr v gi tr tng. $value++:Tr v gi tr , sau tng ln 1. --$value:Gim 1, tr v gi tr gim. $value--:Tr v gi tr, sau gim 1. $value=$value+1:Tng gi tr ln 1. $value+=1:Tng gi tr ln 1.

2.13. Tng quan v OOP


Bn c hoc khng nghe nhng th v vn v PHP5 v vic s dng OOP. OOP ngha l lp trnh hng i tng v trong khi n khng l on m logic tt nht nhng c th cung cp mt vi tp lnh tt. S lng ln v OOP trong PHP5 thng qua h phng php OOP c th c chp nhn trong PHP4. Vi s ra i PHP5 n tr nn d s dng v thc hin. Khi mt ngi bt u, Bn s khng cn nghin cu su v ngn ng OOP, nhng n quang trong bn hiu nhng khi nim ng sau OOP. Trong bng tm tt OOP ly nhng hm cp nht thng thng v thay v t chng trong include nh bn lm trc th bn t chng trong mt lp. Mt lp l 1 tp hp nhng bin v hm m xut ra khi c gi. i tng l nhng kt qu t lp.

2.13.1.

Tm tt nhng v d v OOP
S dng OOP ging nh th t ti mt quy pizza. N khng lm bn tng

cn v c mt i chn p, nhng n yu cu phi vn ng: Trc tin ngi bi bn s nhn yu cu ca bn v n nh bp. Anh ta ngh mt ci bnh pizza thch hp vi yu cu ca bn nu. Nh bp s coi cng thc lm ci bnh v cn thm ngi ph lm. Sau nh bp lm b mt ca bnh pizza v nng n trong mt thi gian. Cui cng h s mang bnh pizza cho ngi bi bn.

- 50 -

Trong v d ny nhng cch thc nho bt, lm b mt ca bnh, nu v ly ra t l. Nhng thnh phn ny l nhng t t. i tng ca bn l mt bnh pizza. Nu chng ta th hin kinh nghim lm bnh trong PHP/h phng php OOP th n nh sau: <?php //y l mt lp ca chng ta. class Pizza { public $dough; public $toppings; public function MakeDough($dough) { $this->dough = $dough; //ln bt $this->dough } public function addToppings($toppings) { $this->toppings = $toppings; //chia nh $this->toppings; //t $this->toppings on dough; } public function bake() { //nng bnh return true; } public function make_pizza($dough, $toppings) { //lm bnh $step1 = $this->MakeDough($dough);

- 51 -

if ($step1) { $step2 = $this->addToppings($toppings); } if ($step2) { $step3 = $this->bake(); } } } ?> Sau bn c th to ra bnh pizza bt c lc no bn cm thy thch v bn c th chc rng ci bnh c to ng. <?php //y l tp lnh PHP ca chng ta $table1 = new Pizza(); $table1->make_pizza(hand-tossed, pepperoni); if ($table1->bake()) { //phn phi $pizza cho bng 1; } else echo uh-oh, looks like you should have gone to eat fast food.; ?> R rng, nu bn chy tp lnh ny n s khng lm vic, y ch l mt hin th n gin. By gi bn c th thy cch to mt ci bnh pizza nh th no bt c khi no bn mun, bng cch s dng nhng bin nh: $dough1, $toppings1, $pizza1, $dough2, $toppings2, $pizza2, table1, table2. Bt c lc no mt ngi yu cu mt ci pizza bn c th gi lp pizza v mt ci bnh s c to ra. V khi khc mt ngi khc yu cu mt ci bnh bn cng lm nh trn. Mt vi ch : t tn lp l s dng trn ln ch hoa v ch thng.

- 52 -

Nu mun mt hm c th s dng mi ni, ta cn khai bo function _construct(), khai bo nh hm u tin trong lp, c gi l constructor V d function __construct() { $this->tray = $round; }

$this->variable tng t nh trong c php mng, $this c th l mt i tng t bit c to ra. Bn rng lp ca bn bt u vi dng bin ban u. Bn cn khai bo mt bin trong phm vi mt lp. Bn khai bo bin nh public, private, hoc protected. Bin public c th thy c bt k lp no, bin private ch thy trong lp ca n, bin protected thy trong lp ca n v bt k lp no m c dng m rng u. N c th ng gi hu ht cc bin ca bn nh public, ngoi tr nhng ci no cha thng tin c nhn.

to i tng, s dng t kha new V d: $table1 = new Pizza(); iu ny gi tt c cc thng tin v bnh pizza trong bin $table1 n gin, bn to mt hm trong lp ca bn m n gi tt c nhng hm khc

theo th t bn mun. Nu bn c carb-conscious v trnh trn bt ln vo nhau, quyt nh khng nng bnh pizza. Bn c th vn s dng lp pizza khng? Tt nhin l c. n gin, bn ch gi cch thc addToppings thay v gi makePizza.

2.13.2.

V sao s dng OOP

S dng OOP c mt vi li ch bao gm mt file n gin vi nhng hm trn n. u tin, vi OOP bn c th gi nhng bit thng tin c lin quan vi nhau v trnh by nhng nhim v phc tp vi d liu . Th hai, bn c th x l d liu khng gii hn thi gian m khng lo lng v bin qu di. Th ba, bn c th c nhiu v d ca nhng lp chy trong cng thi gian m nhng bin ny khng b sa hoc ln.

- 53 -

Chng 3:

S DNG PHP VI MYSQL

chng 2, chng ta to c trang Web vi vic s dng nhng hm. Nhng chng ta cha thc s hiu mi quan h gia MySQL v PHP. Trong chng ny chng ta s xt k iu ny. Trong chng ny ni n cc vn : Hiu bit v c s d liu MYSQL. Nhng d liu cha trong MySQL. Tc ng nhng thng tin c bit, quyn t Web site. Phn mm qun l bng d dng. C th sa cha code theo mun.

3.1. Tng quan v cu trc v c php ca MySQL.


MySQL l h thng c s d liu quan h. ngha c bn ca MySQL l n c th l tr thng tin nhng vng khc nhau v lin kt chng li vi nhau. Chng ta c th cha bt c th g trong mt c s d liu. V d nh nhng thng tin lin quan n mt ngi: chng hn nh first name, last name, address, phone. MySQL cho php bn to nhng thng tin ring l trn bng hoc nhng khu vc cha thng tin thch hp. Trong MySQL mi bng bao gm nhng trng d liu (field) ring l.

3.1.1.

Cu trc MySQL
Bi v MySQL l h qun l d liu quan h, n cho php chng ta to

nhng bng thng tin ring, hoc nhng vng thng tin thch hp. Trong h thng c s d liu khng quan h, tt c nhng thng tin c lu tr trong mt bng ln to nn nhng kh khn trong vic sp xp v ch c th chp d liu m bn mun. Trong SQL, mi bng bao gm nhng phn ring bit, biu din mi thng tin. Bn c th to ra c s da trn nhng loi thng tin m bn lu tr. Nhng bng ring bit ca MySQL lin kt vi nhau ni m gi tr ca vng ph bin l nh nhau. V d: Cho rng bng bao gm tn khch hng, a ch v s ID, bng khc bao gm s ID, ni , .Vng chung l s ID, thng tin c lu tr trong hai
- 54 -

bng ring bit s lin kt vi nhau ni m s ID l nh nhau. iu ny cho chng ta thng tin v khch hng cng lc.

3.1.2.

Cc kiu d liu
Khi bn to mt bng ban u, bn cn ni vi MySQL server kiu no ca

thng tin s lu tr trong mi bng. Cc kiu khc nhau c cho trong bng sau: Loi MySQL Char(length) Varchar(length) Din t V d Mi k t u c th l loi ny, Trng thi ca khch hng nhng c chiu di c nh c 2 k t Mi k t u c th trong loi a ch ca khch hng c ny, d liu c th thay i ch v s, thay i trong Int(length) Int(length) unsigned Text chiu di t 0 n 255 k t. chiu di C chiu di t -2147483648 S sn phm trao tay n 2147483647. Lu tr s t 0 n ID khch hng

4294967295. Kch thc d liu l 65536 k Cho php on text di t. hn c lu tr, khng c loi gii hn n 255 k t. Gi c

Decimal(length, dec) Enum(option1, option2,.. Date Time Datetime

C th lu tr s thp phn

Lu tr gi tr chc chn nh Gii tnh ca ngi dng ng hoc sai Lu tr ngy nh yyyy-mm-dd Lu tr gi nh hh:mm:ss nam hoc n Ngy sinh nht, Gi mt hot ng mi

c a vo trang Web Lu tr ngy v gi nh yyyy- Ngy v gi sau khi ngi mm-dd hh:mm:ss n thm trang Web

Mc d nhng loi trn p ng c nhu cu cn thit, mt bng cc kiu cho di y cng thng gp. Loi MySQL tinyint(length) Din gii Lu tr s nguyn t -128 n 127 (thm tham s unsigned th cho php lu tr t 0 n 255)
- 55 -

smallint(length)

Lu tr s nguyn t -32768 n 32767 (thm tham s

unsigned th cho php lu tr t 0 n 65535) loi MySQL Din gii mediumint(length) Lu tr s t -8388608 n 8388607 (thm tham s bigint(length) unsigned cho php lu tr t 0 n 16777215) Lu tr s t -9223372036854775808 n

-9223372036854775807 (nu thm tham s unsigned cho Tinytext mediumtext longtext Blob tinyblob mediumblob longblob year(length) php lu tr t 0 n 184467440709551615) Cho php lu tr trn 255 k t Cho php lu tr trn 1677215 k t Cho php lu tr trn 4294967295 k t Bng vi kiu text, tr trng hp dng khi sp xp v so snh, cho php lu tr trn 65535 k t Bng vi kiu tinytext, tr trng hp dng khi sp xp v so snh Bng vi kiu mediumtext, tr trng hp dng khi sp xp v so snh Bng vi kiu longtext, tr trng hp dng khi sp xp v so snh Lu tr mt nm trong 4 k t mc nh.

3.1.3.

La chn kiu cho ng


Trc tin, trng s cha c ch v s? Nu tr li c nh varchar, text, char, tinytext, mediumtext, longtext, blob,

tinyblob, mediumblolb, longblob. Sau cn quan tm c bao nhiu k t c lu tr? N s bin i th no? C bao nhiu k t c lu tr? Thay i th no? 0 n 255 k t, chiu di thay i: s dng varchar nu bn mun xa tt c nhng khong trng, gi tr mc nh. S dng longtext nu bn thay i v chiu di. S dng blob nu bn khng gi v khong cch. 256->65536 k t: S dng text nu bn khng cn trng hp dng trong tm kim, sp xp, so snh. Dng blob nu cn trng hp dng.

- 56 -

65537->1677215 k t: S dng mediumtext nu bn khng cn trng hp dng trong tm kim, sp xp, so snh. Dng mediumblob nu cn trng hp dng. 1677216->4294967295 k t: S dng longtext nu bn khng cn trng hp dng trong tm kim, sp xp, so snh. Dng longblob nu cn trng hp dng Nu tr li c th c l cha ch ci v s, nhng phi mt trong s c gii hn v gi tr enum Nu tr li khng, n bao gm thi gian, ngy thng

3.1.4.

NULL/NOT NULL
My SQL server ca bn mun bit vng d liu ca bn c rng hay khng,

bn dng NULL hoc NOT NULL. Nu vng d liu c nh ngha l NOT NULL th ngi dng bt buc phi nhp d liu vo. Nu dng NULL th vng d liu s khng cha gi tr g ht.

3.1.5.

INDEXES
MySQl s dng INDEXES gii quyt vic nghin cu dng thng tin.

INDEXES lm vic th no? Bn tng tng bn c mt ci phng y p, ton nhng th bn c c m cha bao gi bn ng n. Bn mun tm li thng tin g , bn phi mt kh nhiu thi gian lm vic ny. Bn cm thy kh chu v bn bt u sp xp chng, t chc li chng. Bn th tng tng lng thng tin c lu tr trong bng, vo thi gian no bn cn tm vi th, bn bt u tm tt c nhng dng, bn s lm g nu c 10000 dng? Chuyn g s xy ra? Bng cch s dng h thng chn lc bn trong, MySQl s gip bn tm nhanh chng v chnh xc, n lm c iu ny nh s dng INDEXES, cng c bit nh mt kha. MySQL yu cu INDEX trong mi bng, v th c vi th c n. Thng thng, bn s dng kha chnh, hoc to ra s duy nht gi d liu ring l. Trng ny phi not null v unique

- 57 -

3.1.6.

UNIQUE
Chng ta c th s dng UNIQUE th hin tnh c quyn, khng th

chn thm d liu, khi thm vo chng trnh s bo li.

3.1.7.

Tng t ng(auto Increment)


Bn c th thit k vng tng t ng bng cch dng lnh

Auto_Increment, ta c th t lnh cho bt c vng no trong bng.

3.1.8.

Nhng tham s khc


Bn c th lm nhng ch nh khc khi to c s d liu, nhng tt hn cho

ngi s dng. bit thm v danh sch nhng tham s, bn c th tham kho thm :www.mysql.com

3.1.9.

Cc kiu bng ca My SQl v k thut lu tr


Nhng phin bn mi gn y ca My SQL thng s dng 5 loi chnh . MyISAM . MERGE . MEMORY . InnoDB . BDB

3.1.10.

Lnh v c php trong My SQL


Cc lnh v cu trc ca MySQL thng dng: . CREATE: To mi mt c s d liu hoc mt bng . ALTER: Thay i bng . SELECT: Chn d liu . DELETE: Xa d liu t bng . DESCRIBE: Cho bit cu trc v chi tit ca bng . INSERT INTO tablename VALUES: t gi tr vo bng . UPDATE: Sa i d liu trong bng . DROP: Xa ton b bng hoc c s d liu

3.2. Bt u vi My SQL v PHP nh th no?


Mt vi hm thng dng l:
- 58 -

mysql_connect ("hostname", "user", "pass"): Kt ni n MY SQL server. mysql_select_db("database name"): Tng ng vi lnh USE trong My SQL, lm cho c s d liu c chn hot ng mysql_query("query"): Gi bt k cu lnh ca My SQL n server mysql_fetch_rows("bin kt qu t truy vn"): Tr v mt dng kt qu trong mt d liu truy vn mysql_fetch_array("bin kt qu t truy vn"): Tr v nhiu dng kt qu ca truy vn mysql_error(): a ra li c tr v t My SQL server

lnh Mysql_query. V d:

Bn c th gi bt k My SQL no n server thng qua cu lnh PHP hoc cu

$query = SELECT * from TABLE; $results = mysql_query($query); Bn cng c th dng nh sau: $results = mysql_query(SELECT * from TABLE);

3.3. Kt ni MY SQL Server


Lnh kt ni vi hm PHP l mysql_connect, vi c php nh sau: $host = localhost; $user = bp5am; $pass = bp5ampass; $connect = mysql_connect($host, $user, $pass); Trong : $host l tn ca my ch $user:tn ca my ngi dng $pass:mt khu truy cp ca ngi dng

3.4. c, to c s d liu
to mt c s d liu cho bn cn 3 bng: Mt bng movie: Ta s lu tr tn v thng tin ca movie.
- 59 -

Mt bng movietype: Ni lu tr nhng catalog ca movie. Mt bng people: Ta s lu tr tn ca cc din vin v o din. V d to c s d liu v bng To trang php vi tn: createmovie.php <?php //connect to MySQL; note weve used our own parametersyou should use //your own for hostname, user, and password $connect = mysql_connect(localhost, root, ) or die (Hey loser, check your server connection.); //create the main database if it doesnt already exist $create = mysql_query(CREATE DATABASE IF NOT EXISTS moviesite) or die(mysql_error()); //make sure our recently created database is the active one mysql_select_db(moviesite); //create movie table $movie = CREATE TABLE movie ( movie_id int(11) NOT NULL auto_increment, movie_name varchar(255) NOT NULL, movie_type tinyint(2) NOT NULL default 0, movie_year int(4) NOT NULL default 0, movie_leadactor int(11) NOT NULL default 0, movie_director int(11) NOT NULL default 0, PRIMARY KEY (movie_id), KEY movie_type (movie_type,movie_year)); $results = mysql_query($movie) or die (mysql_error()); //create movietype table $movietype = CREATE TABLE movietype ( movietype_id int(11) NOT NULL auto_increment, movietype_label varchar(100) NOT NULL,
- 60 -

PRIMARY KEY (movietype_id)); $results = mysql_query($movietype) or die(mysql_error()); //create people table $people = CREATE TABLE people ( people_id int(11) NOT NULL auto_increment, people_fullname varchar(255) NOT NULL, people_isactor tinyint(1) NOT NULL default 0, people_isdirector tinyint(1) NOT NULL default 0, PRIMARY KEY (people_id)); $results = mysql_query($people) or die(mysql_error()); echo Movie Database successfully created!; ?> Tip theo ta to trang php vi tn: moviedata.php <?php //connect to MySQL $connect = mysql_connect(localhost, root, ) or die (Hey loser, check your server connection.); //make sure were using the right database mysql_select_db(moviesite); //insert data into movie table $insert = INSERT INTO movie (movie_id, movie_name, movie_type, . movie_year, movie_leadactor, movie_director) . VALUES (1, Bruce Almighty, 5, 2003, 1, 2), . (2, Office Space, 5, 1999, 5, 6), . (3, Grand Canyon, 2, 1991, 4, 3); $results = mysql_query($insert) or die(mysql_error()); //insert data into movietype table

- 61 -

$type

INSERT

INTO

movietype

(movietype_id,

movietype_label) . VALUES (1,Sci Fi), . (2, Drama), . (3, Adventure), . (4, War), . (5, Comedy), . (6, Horror), . (7, Action), . (8, Kids) ; $results = mysql_query($type) or die(mysql_error()); //insert data into people table $people = INSERT INTO people (people_id, people_fullname, .people_isactor, people_isdirector) . VALUES (1, Jim Carrey, 1, 0), . (2, Tom Shadyac, 0, 1), . (3, Lawrence Kasdan, 0, 1), . (4, Kevin Kline, 1, 0), . (5, Ron Livingston, 1, 0), . (6, Mike Judge, 0, 1); $results = mysql_query($people) or die(mysql_error()); echo Data inserted successfully!; ?> Chng lm vic nh th no? u tin ta thc hin kt ni n My SQL server, sau to lp c s d liu nu khng to c s a ra thng bo li. Sau bt u to tng bng ring l a d liu vo cc bng

- 62 -

3.5. Truy vn c s d liu


Chng ta to ra c s d liu, by gi mun nhn li thng tin t d liu , dng cng thc nh sau: SELECT [fieldnames] AS [alias] FROM [tablename] WHERE [criteria] ORDER BY [fieldname to sort on] [DESC] LIMIT [offset, maxrows] SELECT [fieldnames]: Quyt nh u tin m vng cha tn c bit m bn mun nhn li. Nu bn mun thy tt c thng tin bn ch cn chn du * AS: Bn c th s dng b danh nhm hai hoc nhiu hn hai vng khc nhau m c th chuyn n chng * nh l mt bin ln SELECT first_name, last_name AS full_name. . . ORDER BY full_name . . . Bn khng th s dng tham s AS vi tham s WHERE, bi v n b gii hn trong MY SQL. Khi WHERE c thc thi th ct gi tr khng bit FROM: Tn bng cn truy xut thng tin WHERE: Danh sch iu kin chn lc d liu ORDER BY: sp xp d liu trong vng LIMIT: Gii hn kt qu tr v

3.5.1.

WHERE , oh WHERE
SELECT * FROM customers WHERE gender = Male

a ra iu kin hin th thng tin m bn cn Tr v tt c cc thng tin khch hng c gii tnh Nam Cc php ton so snh trong cu lnh WHERE: =,<,>,>=,<=,!= LINE v %: So snh mt phn ca on code vi on cha n, xut ra tt c nhng mu tin c lin quan n n. V d:
- 63 -

SELECT * FROM products WHERE description LIKE %shirt% y s a ra tt c nhng phn c cha shirt. V d v s dng truy vn SELECT: M trnh son tho nhp on m v lu li vi tn select.php. <?php //connect to MySQL $connect = mysql_connect(localhost, bp5am, bp5ampass) or die(Hey loser, check your server connection.); //make sure were using the right database mysql_select_db(moviesite); $query = SELECT movie_name, movie_type . FROM movie . WHERE movie_year>1990 . ORDER BY movie_type; $results = mysql_query($query) or die(mysql_error()); while ($row = mysql_fetch_array($results)) { extract($row); echo $movie_name; echo - ; echo $movie_type; echo <br>; } ?> Sau khi chy chng trnh ta s thy giao din mn hnh nh Hinh 3.5.0.2

- 64 -

Hinh 3.5.0.3

Chng lm vic nh th no? Khi chng ta mun ly thng tin tn, ta c: SELECT *FROM Nhng thay v bn vit: $query=SELECT movie_name, movie_type K n, chng ta mun ly thng tin t bng no FROM movie Sau , ta a iu kin mun thy thng tin t nm 1990 tr ln: WHERE movie_year>1990 Bn cn kt qu xut ra c sp xp theo th t bn mun: ORDER BY movie_type; K , chng ta tp hp tt c nhng dng theo yu cu a ra ca bn: $results mysql_query($query) Ordie(mysql_error()); Sau , chng ta kt hp a ra kt qu vi nhng dng: while ($row = mysql_fetch_array($results)) { extract($row);

- 65 -

echo $movie_name; echo " - "; echo $movie_type; echo "<br>"; } Ghi ch vi mi dng tm thy, bn lu tr bng ny trong mt mng $row, s dng hm mysql_fetch_array(), sau gii cc bin trong $row, s dng hm extract, xut ra nhng g bn cn.

3.5.2.

Lm vic vi PHP v mng d liu: foreach


Hm foreach tng t nh hm While, nu s dng while kt hp thng qua

mt danh sch kt qu t truy vn foreach ($row as $value) { echo $value; echo <br>; } V d v vic s dng foreach. M tp select.php sa i li nh sau. <?php //connect to MySQL $connect = mysql_connect("localhost", "root", "") or die("Hey loser, check your server connection."); //make sure we're using the right database mysql_select_db("moviesite"); $query = "SELECT movie_name, movie_type " ."FROM movie "; $results = mysql_query($query) or die(mysql_error()); //while ($row = mysql_fetch_array($results,MYSQL_ASSOC)){ while ($row = mysql_fetch_assoc($results)) { foreach ($row as $val1) {
- 66 -

echo $val1; echo " } echo "<br>"; //extract($row); //echo $movietype_id; //echo " - "; //echo $movietype_label; } ?> Sau khi cho chy chng trnh, giao din nh Hinh 3.5.2.1 ";

:
Hinh 3.5.2.1

N lm vic th no: Ghi ch: y c s dng while ($row = mysql_fetch_assoc($results)) { foreach ($row as $val1) { echo $val1; echo ; }
- 67 -

} So vi phn trc, dng hm while ($row = mysql_fetch_array($results)) { extract($row); echo $movie_name; echo - ; echo $movie_type; echo <br>; } Dng hm foreach ta thy ngn gn hn , n xut tt c thng tin lin quan m khn cn dng lnh echo ch nh. Mt iu cn ch na l nu ta s dng lnh: while ($row = mysql_fetch_array($results)) khc phc thay tnh cho cu trng lnh ny :while ta ($row = mysql_fetch_assoc($results)) th kt qu s xut ra 2 ln. dng: mysql_fetch_array($results,MYSQL_ASSOC) hoc mysql_fetch_assoc S dng fereach to mt mng V d. select2.php ` <?php //connect to MySQL $connect = mysql_connect("localhost", "root", "") or die("Hey loser, check your server connection."); //make sure were using the right database mysql_select_db("moviesite"); $query = "SELECT * " . "FROM movie " . "WHERE movie_year>1990 " . "ORDER BY movie_type"; $results = mysql_query($query) or die(mysql_error());
- 68 -

echo "<table border=\"1\">\n"; while ($row = mysql_fetch_assoc($results)) { echo "<tr>\n"; foreach($row as $value) { echo "<td>\n"; echo $value; echo "</td>\n"; } echo "</tr>\n"; } echo "</table>\n"; ?> Kt qu sau khi chy nh Hinh 3.5.2.2 :

Hinh 3.5.2.2

y lm vic th no? Bn s dng mnh mysql_query v while phc hi li lnh vc ca bn.Sau , vi mi gi tr bn nhn li, bn t n mi phn cch v kt chng li trong html v echo

3.5.3.

Lin h gia 2 bng


Bn c th ly thng tin t nhiu bng theo hai cch:
- 69 -

Chuyn n nhng bng ring bit trong truy vn ca bng v lin kt chng ttrong mt vng chung tm thi. S dng cng thc JOIN trong truy vn ca bn i vi nhng bng ring bit.

Dng cu lnh SELECT phn bit gia hai bng trong d liu ca bn, kt ni chng trong mt bng mi. $query = SELECT customers.name, orders.order_total FROM customers, orders WHERE customers.cust_ID = orders.cust_ID; //tr v tn khch hng t bng khch hng v order_total t bng order ni m cust_ID trong bng customers bng vi cust_ID trong bng order. V d : select21.php <?php //connect to MySQL $connect = mysql_connect("localhost", "root", "") or die ("Hey loser, check your server connection."); //make sure were using the right database mysql_select_db("moviesite"); $query = "SELECT movie.movie_name, movietype.movietype_label " . "FROM movie, movietype " . "WHERE movie.movie_type = movietype.movietype_id " . "AND movie.movie_year>1990 " . "ORDER BY movie_type"; $results = mysql_query($query) or die(mysql_error()); echo "<table border=\"1\">\n"; while ($row = mysql_fetch_assoc($results)) { echo "<tr>\n"; foreach($row as $value)

- 70 -

{ echo "<td>\n"; echo $value; echo "</td>\n"; } echo "</tr>\n"; } echo "</table>\n"; ?> Kt qu nh Hinh 3.5.3

:
Hinh 3.53

Ghi ch: y c hai vng c lin kt vi nhau thng qua WHERE, nhng s id t hai bng khc nhau (movie_type trong bng movie v movietype_id trong bng movietype) c lin kt vi nhau .

3.5.4.

Kt ni hai bng (Join two tables)


Cng ging nh phn kt hp hai bng trn, nhng y cu lnh

SELECT l: SELECT movie_name, movietype_label. Bn mun cp nht d liu loi no dng cu lnh: FROM movie LEFT JOIN movietype Dng cu lnh trn c ngha n gin l movietype ph thuc vo movie. Sau bn gi n server vng no cn kt ni nh sau:
- 71 -

ON movie_type = movietype_id. V d : select22.php <?php //connect to MySQL $connect = mysql_connect("localhost", "root", "") or die ("Hey loser, check your server connection."); //make sure were using the right database mysql_select_db("moviesite"); $query = "SELECT movie_name, movietype_label ". "FROM movie ". "LEFT JOIN movietype ". "ON movie_type = movietype_id ". "WHERE movie.movie_year>1990 ". "ORDER BY movie_type"; $results = mysql_query($query) or die(mysql_error()); echo "<table border=\"1\">\n"; while ($row = mysql_fetch_assoc($results)) { echo "<tr>\n"; foreach($row as $value) { echo "<td>\n"; echo $value; echo "</td>\n"; } echo "</tr>\n"; } echo "</table>\n"; ?> Kt qu nh Hinh 3.5.4 :

- 72 -

Hinh 3.5.4

Bn thy kt qu ging nh phn trn.Bn lm iu ny trong dng u tin ca mnh SELECT: SELECT movie_name, movietpe_label Sau bn gi n Mysql nhng bng no ban mun cp nht v loi no bn mun kt hp vi nhau trong mnh sau: FROM movie LEFT JOIN movietype Bn dng LEFT kt hp nhng mnh trong trng hp ny.Bn ly trng tin chnh t movie v tham chiu thng tin t movietype

3.6. Help Tips v Suggestions


3.6.1. 3.6.2.
-

Vic cung cp ti liu Vic s dng PHPMyAdmin


N d dng cho lm nhng cng vic sau: Ct v to CSDL To , xa bng. To, xa vng. Nhp bt k cu lnh MySQL no. Xem v in cu trc bng. M PHP tng qut. Xem d liu trong bng.

- 73 -

Chng 4:

S DNG BNG TRNH BY D LIU

Chng ta c th thnh cng trong vic kt hp PHP v MySQL to ra trang web ng, khi c nhiu dng d liu cn trnh by, chng ta cn phi c c ch ngi xem d dng c d liu v cn phi p, ngn gn, trnh by r rng. Phng php d nht l s dng bng. Trong chng ny chng ta s bit: To bng t chc d liu t c s d liu. To tiu ct t ng. Bng thng dng vi kt qu truy vn MySQL c bn. Bng thng dng vi kt qu truy vn MySQL phc tp. To trang thn thin cho ngi dng

4.1. To bng
Khi c mt danh sch d liu, cn phi t cu trc, tiu ct, nh dng bng. V d: nh ngha tiu bng:M trinh son tho nhp on m v lu vi tn table.php. <?php $movie=<<<EOD <h2><center>Movie Review Database</center></h2> <table width="100%" border="1" cellpadding="2" cellspacing="2" align="center"> <tr> <th>Movie Title</th> <th>Year of Release</th> <th>Movie Director</th> <th>Movie Lead Actor</th> <th>Movie Type</th> </tr> </table> EOD;

- 74 -

echo $movie; ?> Kt qu nh Hnh 4.1.1

Hnh 0-1.1

Tt c on m nm bn trong<<<EOD v EOD th cha trong bin $table v th, thay v in mi thnh phn ca bng HTML th nn thm bin $table. Nhn tin n thm vo khung cho bng tin vic trnh by. Sau xut ni dung n gin ca bin $table. Cui cng chng ta ng PHP bng th ng ?>. Bng vic s dng 2 th ta c th s dng m HTML n gin. Nh cp chng 2 v vic s dng heredoc ta c th thay th th <<<EOD bng bt c chui no m ta mun nhng bt u v kt thc phi ph hp. Ch : y khng c khong cch sau =<<<EOD v th EOD, khng c khong cch no gia cc dng, thc l hoc bt k k t no trong dng th ng heredoc. Nu c bt k khong trng no th n s bo li. Do lun lun nh rng phi xa tt c cc khong cch sau cc th .

4.2. Bng thng dng


V d: in d liu vo bng: Bi v y l mt on m ln nn tt nhng thay i u c c th hin r rt. Mt vi th c ly ra t tp lnh gc.

- 75 -

M file table1.php v sa li m. Chng ta s dng li d liu chng 3 cho v d ny. Phi nh tn server, tn ngi dng, mt khu, tn c s d liu vi nhng gi tr ca bn: <?php $link = mysql_connect(localhost,root,) or die(mysql_error()); mysql_select_db(moviesite) or die (mysql_error()); Bt u kt ni c s d liu: $query = SELECT movie_name, movie_director, movie_leadactor . FROM movie; $result = mysql_query($query, $link) or die(mysql_error()); $num_movies = mysql_num_rows($result); Chy mt truy vn SQL da vo c s d liu v ly kt qu. V trong lc xem c bao nhiu mu tin c tr v t truy vn. Nh tho lun chng 3 ta t SQL l ch hoa. iu ny d thc hin bi v n cho php bn d dng nhn bit tn ct v t kha SQL. N cng thc hin tt vic to truy vn SQL d c hn. N cng gii thch ti sao chng ta c vit truy vn SQL trn dng server. $movie_header =<<<EOD <h2><center>Movie Review Database</center></h2> <table width=70% border=1 cellpadding=2 cellspacing=2 align=center> <tr> <th>Movie Title</th> <th>Movie Director</th> <th>Movie Lead Actor</th> </tr> EOD;

- 76 -

Sau nhp on m vo gc(tr mnh echo) Ch n tht s gi l $movie_header khng phi l $movie $movie_details = ; while ($row = mysql_fetch_array($result)) { $movie_name = $row[movie_name]; $movie_director = $row[movie_director]; $movie_leadactor = $row[movie_leadactor]; $movie_details .=<<<EOD <tr> <td>$movie_name</td> <td>$movie_director</td> <td>$movie_leadactor</td> </tr> EOD; } $movie_details .=<<<EOD <tr> <td>&nbsp;</td> </tr> <tr> <td>Total :$num_movies Movies</td> </tr> EOD; Hot ng: Trong on m trc n lm vic kh nhiu, v vy chng ta xem xt chi tit hn. Bn bit rng, dng lp ca mnh while thng qua nhng mu tin c tr v, i vi mi mu tin n thc hin mt khi on m trong du ngoc. ng lo lng PHP thng minh bit c bao nhiu mu tin v s mu tin hin hnh trong trng hp ny. y khng c s nguy him cho vic n nh gi tr sai cho mu tin.

- 77 -

Dng u tin ca vng lp while, ni rng cc tp lnh c vit ra l gi tr ca ct movie_name trong mu tin hin hnh v t vo mt bin l $movie_name. Bn dng tip theo lm nhng vic tng t, chng n gin n nh gi tr tn ca ct khc cho nhng tn bin khc. Sau , bn n th tng t nh ci bn thy khi bt u chng ny. N khng hon ton ging nh trc bi v n c .=<<<EOD thay v =<<<EOD. V vy, thay v ch c mt gi tr mu tin, $movie_details cha tt c cc gi tr mu tin c tr v, sau kt thc l tng s ca nhng hnh nh trong d liu ca bn. Bng vic thm vo du chm (.) trc du =<<<EOD l bn ang thm gi tr existing vi gi tr current ca bin $movie_details. Nu bn qun thm du chm (.), sau bn thay th gi tr existing vi gi tr current. Bi v trong PHP $var=1 c ngha l gn cho $var c gi tr l 1 v $var.=1 c ngha lly gi tr hin hnh ca $var v thm 1 cho n. Trong v d trc ch rng bn n nh tn ca phim cho $movie_name v sau s dng $movie_name thay v lm nh sau: while ($row = mysql_fetch_row($result)) { $movie_details .=<<<EOD <tr> <td>$row[movie_name]</td> </tr> EOD; } Trong on trc, mi th chnh xc nh nhau nhng n s gii hn nu bn mun nh dng bt k gi tr bin no. Thc hnh, gm n tt c li vi nhau. D liu c nhn li by gi nhng bn cn gi n tt c cc trnh duyt v vy n s c trnh by trong bng. Bn n nh $movie_footer bng cch nhp dng sau: $movie_footer =</table>; $movie =<<<MOVIE $movie_header

- 78 -

$movie_details $movie_footer MOVIE; echo There are $num_movies movies in our database; echo $movie; ?> Trong on m trc bn lu file ny vi tn table1.php, sau load ln server Sau bn s thy nh Hnh 4.2.1.

Hnh 4.2.1.

Cch thc hot ng: u tin on m ca bn ly thng tin lu tr trong $movie_header, $movie_footer, v cun tt c ln v t n trong $movie vi vic s dng heredoc. Sau c nhng dng sau: echo There are $num_movies movies in our database; echo $movie; Bn in ra cu lnh c bao nhiu phim trong c s d liu v sau gi tt c cc bin $movie_header, $movie_details, and $movie_footer vi dng tip theo Bng ny nhn trng cng p, nhng trong chng 3 n khng lm cho ngi dng tt nu h khng c ngi gii m b mt hng dn cho h bit mi lin h gia din vin v o din trong phim. Bn cn lin kt nhng bng ca bn in y thng tin. V d: Pht trin bng

- 79 -

Trong bi tp ny bn lin kt cc bng li vi nhau nh bn thy trong chng 3, bn c th xut y thng tin d liu. Sa file table1.php nh sau lu li vi tn table2.php <?php $link = mysql_connect(localhost,root,) or die(mysql_error()); mysql_select_db(moviesite) or die (mysql_error()); $query = SELECT movie_name, movie_director, movie_leadactor . FROM movie; $result = mysql_query($query, $link) or die(mysql_error()); $num_movies = mysql_num_rows($result); $movie_header=<<<EOD <h2><center>Movie Review Database</center></h2> <table width=100% border=1 cellpadding=2 cellspacing=2 align=center> <tr> <th>Movie Title</th> <th>Movie Director</th> <th>Movie Lead Actor</th> </tr> EOD; function get_director() { global $movie_director; global $director; $query_d = SELECT people_fullname . FROM people . WHERE people_id=$movie_director; $results_d = mysql_query($query_d)

- 80 -

or die(mysql_error()); $row_d = mysql_fetch_array($results_d); extract($row_d); $director = $people_fullname; } function get_leadactor() { global $movie_leadactor; global $leadactor; $query_a = SELECT people_fullname . FROM people . WHERE people_id=$movie_leadactor; $results_a = mysql_query($query_a) or die(mysql_error()); $row_a = mysql_fetch_array($results_a); extract($row_a); $leadactor = $people_fullname; } while ($row = mysql_fetch_array($result)) { $movie_name = $row[movie_name]; $movie_director = $row[movie_director]; $movie_leadactor = $row[movie_leadactor]; //get directors name from people table get_director(); //get lead actors name from people table get_leadactor(); $movie_details .=<<<EOD <tr> <td>$movie_name</td> <td>$director</td>

- 81 -

<td>$leadactor</td> </tr> EOD; } $movie_details .=<<<EOD <tr> <td>Total :$num_movies Movies</td> </tr> EOD; $movie_footer =</table>; $movie =<<<MOVIE $movie_header $movie_details $movie_footer MOVIE; echo There are $num_movies movies in our database; echo $movie; ?> Kt qu nh Hnh 4.2.2.

Hnh 4.2.2.

Cch thc hot ng: Vi vic thm vo hm get_director v get_leadactor tp lnh yu cu nhng thng tin t bit t server cho mi dng trn bng. iu ny c th cho bn in y thng

- 82 -

tin t mt ng hn n trong truy vn gc, bn c th lm sch nhng nh dng trong 2 dng trc vi s thay i trong on m gn kt kt thc ca tp lnh. Cu hnh: Bn thnh cng trong vic pht trin sc mnh v tp lnh, n s l c s d liu truy vn v t ni dung vo bng HTML. Cho chnh bn thy nh sng trong bng ti, nhng ging tt c nhng trnh duyt tt , chng ta phi i v pha trc.

4.3. Master l ai?


By gi chng ta hy xy dng mt cng vic tt m bn lm nhiu v thm nhiu thng tin v hm hn vo bng ca bn. Phng tin quan h gia cha v con trong trang web ca bn cho php ngi dng c th click vo tiu ca b phim bit thng tin v b phim. D nhin l y tt c s tr thnh trang web ng chung, v th chng ta tm nh th no lm v quan h cha con c ngha. V d: Thm lin kt trong table M trang table2.php trong bi v thm vo nhng dng m m xut hin ni bt. $query = SELECT movie_id, movie_name, . movie_director, movie_leadactor . FROM movie; $result = mysql_query($query, $link) or die(mysql_error()); $num_movies = mysql_num_rows($result); $movie_details = ; while ($row = mysql_fetch_array($result)) { $movie_id = $row[movie_id]; $movie_name = $row[movie_name]; $movie_director = $row[movie_director]; $movie_leadactor = $row[movie_leadactor]; //get directors name from people table get_director(); //get lead actors name from people table get_leadactor(); $movie_details .=<<<EOD
- 83 -

<tr> <td><a href=movie_details.php?movie_id=$movie_id title=Find out more about $movie_name>$movie_name</td> <td>$director</td> <td>$leadactor</td> </tr> EOD; } Lu file vi tn table3.php, sau load ln server, m li trnh duyt. Bn s thy nh Hnh 4.3.1

Hnh 4.3.1

Cch thc hot ng: Bn s ch mt s thay i gia hnh table2.php v table3.php. Bn c nhiu lin kt cho nhiu thng tin n mi movie cho ngi ving thm trang web ca bn. Thay i u tin so vi phn trc truy vn MySQL l bin $movie_id Sau bn thm vng mi cho kt qu tr v t truy vn. Thay i cui cng to m HTML m a ra lin kt trong tn movie. By gi vic thay i hon thnh, thc t n lm g? Ni bn t con chut trn dng lin kt, bn s thy mi lin kt l duy nht v to ra trang web ng. Trang ny c coi nh trang ch, trang s lin kt ti nh trang con Tt, ? Khng c nhiu loi lin kt khc nhau Trc khi bn i xa hn, bn cn thm mt vi d liu cho c s hin hnh ca bn. Nu bn gi li t chng 3, cho mi phim, bn c tn phim, ngi lnh o v nm.

- 84 -

V d: Thm d liu vo bng Trong bi ny, bn s thm d liu v mi movie n c s d liu M trnh son tho ca bn v g on m sau: <?php $link = mysql_connect(localhost,root,) or die(mysql_error()); mysql_select_db(moviesite) or die (mysql_error()); //alter movie table to include running time/cost/takings fields $add = ALTER TABLE movie ADD COLUMN ( . movie_running_time int NULL, . movie_cost int NULL, . movie_takings int NULL); $results = mysql_query($add) or die(mysql_error()); //insert new data into movie table for each movie $update = UPDATE movie SET . movie_running_time=102, . movie_cost=10, . movie_takings=15 . WHERE movie_id = 1; $results = mysql_query($update) or die(mysql_error()); $update = UPDATE movie SET . movie_running_time=90, . movie_cost=3, . movie_takings=90 . WHERE movie_id = 2; $results = mysql_query($update) or die(mysql_error()); $update = UPDATE movie SET .

- 85 -

movie_running_time=134, . movie_cost=15, . movie_takings=10 . WHERE movie_id = 3; $results = mysql_query($update) or die(mysql_error()); ?> Bn lu vi tn alter_movie.php, sau m file trong trnh duyt. Khng lo lng, bn s thy mt mn hnh trng, nhng bng ca bn c thay i v thng tin a vo t ng Cch thc lm vic: Trc tin, tp lnh dng lnh ALTER TABLE thm vo nhng vng tng thch trong bng hin hnh, sau s dng lnh UPDATE chn d liu mi vo nhng vng . By gi bn c d liu, bn cn to mt trang mi m bn s hin th thm thng tin(movie_details.php) V d: Trong bi tp ny, bn s to mt trang mi hin th d liu m bn thm vo bi trc. M trnh son tho v g vo chng trnh sau: <?php $link = mysql_connect(localhost,root,) or die(mysql_error()); mysql_select_db(moviesite) or die (mysql_error()); /* Function to calculate if a movie made a profit, loss or broke even */ function calculate_differences($takings, $cost) { $difference = $takings - $cost; if ($difference < 0) {

- 86 -

$difference = substr($difference, 1); $font_color = red; $profit_or_loss = $ . $difference . m; } elseif ($difference > 0) { $font_color =green; $profit_or_loss = $ . $difference . m; } else { $font_color = blue; $profit_or_loss = Broke even; } return <font color=\$font_color\> . $profit_or_loss . </font>; } ?> Lu file ny nh movie_details.php Cch thc lm vic: Dng cha m substr th t trc dng $profit_or_loss bi v s c s tr v s m v khng c thc. iu quan trng cn nh l trong PHP bn c th d dng to bin mi bng mt hot ng. Bn khng t chc thng tin trong d liu khng c ngha l bn khng to c n. V d: Trnh by thng tin mi Trong bi ny bn s thay i bng trang ch vi d liu mi v iu ny tng ng nh bng con mi ca bn Thm on m di y vo movie_details.php: /* Function to get the directors name from the people table */ function get_director() {

- 87 -

global $movie_director; global $director; $query_d = SELECT people_fullname . FROM people . WHERE people_id=$movie_director; $results_d = mysql_query($query_d) or die(mysql_error()); $row_d = mysql_fetch_array($results_d); extract($row_d); $director = $people_fullname; } /* Function to get the lead actors name from the people table */ function get_leadactor() { global $movie_leadactor; global $leadactor; $query_a = SELECT people_fullname . FROM people . WHERE people_id=$movie_leadactor; $results_a = mysql_query($query_a) or die(mysql_error()); $row_a = mysql_fetch_array($results_a); extract($row_a); $leadactor = $people_fullname; } $query = SELECT * FROM movie . WHERE movie_id = . $_GET[movie_id] . ; $result = mysql_query($query, $link) or die(mysql_error()); $movie_table_headings=<<<EOD <tr>

- 88 -

<th>Movie Title</th> <th>Year of Release</th> <th>Movie Director</th> <th>Movie Lead Actor</th> <th>Movie Running Time</th> <th>Movie Health</th> </tr> EOD; while ($row = mysql_fetch_array($result)) { $movie_name = $row[movie_name]; $movie_director = $row[movie_director]; $movie_leadactor = $row[movie_leadactor]; $movie_year = $row[movie_year]; $movie_running_time = $row[movie_running_time]. mins; $movie_takings = $row[movie_takings]; $movie_cost = $row[movie_cost]; //get directors name from people table get_director(); //get lead actors name from people table get_leadactor(); } Cch thc hot ng: Bi v bn c vit li hm to tn o din v tn din vin, bn mn m ny t bi table2.php. Sau bn chuyn truy vn tr v mi th trong mi mu tin, nh tng phn (opposed) mt vi trng. N c ngha l bn tr v mt trng m bn khng thc s s dng. Cu truy vn cha mnh WHERE. Mu tin bn s ly li d liu t quyt nh ny Mnh WHERE

- 89 -

Bn dng $_GET[movie_id] trong mnh WHERE. y l ID ca movie m c lin kt t tabl3.php Bn cng to mt bin khc $movie_table_headings cha phn u bn s s dng. S dng li ca on m th rt ging on m trong table3.php. Bn thm vo nhiu hn 4 trng WHILE kim sot vng lp. Chng ti c ni phn trc l nhng vng tr v m bn khng cn th hot ng khng tt? Vng, ng nh vy. Tuy nhin, trng hp ny bn ch c nhiu hn mt trng bn cn, nh tng phn tr v nhiu trng d tha. V th, chng ti s a ra li khuyn? Chnh xc 100%. Tuy nhin, bi v bn s dng nhiu trng trong mi mu tin, PHP s khng cha t cn bng ny, v n c gi tr. Bn s khng mun lm iu ny khi m bn mun nhng gi tr ca 5 trng v cu trc mu tin cha 50 trng. Nu bn lm iu ny, PHP s hao mn v ti nguyn tr v 45 trng khc. V d: Trnh by chi tit phim nh Trong bi tp ny, bn s tng cng trang movie_details vi d liu mi. Thm vo nhng dng m sau vo cui movie_details.php $movie_health = calculate_differences($movie_takings, $movie_cost); $page_start =<<<EOD <html> <head> <title>Details and Reviews for: $movie_name</title> </head> <body> EOD; $movie_details =<<<EOD <table width=70% border=0 cellspacing=2 cellpadding=2 align=center> <tr> <th colspan=6><u><h2>$movie_name: Details</h2></u></th> </tr> $movie_table_headings
- 90 -

<tr> <td width=33% align=center>$movie_name</td> <td align=center>$movie_year</td> <td align=center>$director</td> <td align=center>$leadactor</td> <td align=center>$movie_running_time</td> <td align=center>$movie_health</td> </tr> </table> <br> <br> EOD; $page_end =<<<EOD </body> </html> EOD; $detailed_movie_info =<<<EOD $page_start $movie_details $page_end EOD; echo $detailed_movie_info; mysql_close(); Lu file nh movie_details.php, a ln server, m trnh duyt tabl3.php, click vo tn movie, bn s thy nh Hnh 4.3.2

- 91 -

Hnh 4.3.2

Cch thc hot ng: Bn nh hm bn to trn? Khi bn thm dng trong bc 1 phn v d trc, bn gi hm v yu cu n thi hnh. Bt c gi tr no c tr v t hm calculate_difference s l ni bin $movie_health. Thng qua bin $movie_taking v $movie_costs hm a ra kt qu chnh xc. Khi bn nh ngha bin $page_start, bn bt u sp xp cu trc trang thc s. Bng cch thm vo bin $movie_name, bn c th thit lp ta trnh duyt . Bn c th thy c php =<<<EOD tin li th no? K n, bn nh ngha bin $movie_details. iu ny hon ton gii thch gii thch c. Nh bin $movie_table_headings bn to trc. Tt c bn lm trong bin $movie_details v n xut hin. Cui cng, bn nh ngha bin $page_end.

4.4. Quan h lu di
Bn mun tm g t nhng ci c thy li? Bn cn to mt truy vn SQL mi trong trang movie_details.php v thi hnh n khi n c np, n s lm tng 2 truy vn trong mt trang. N s lm vic, nhng n thun li. l thi gian tr li cu hi, quan h l g? Mt quan h l mt cch ca vic kt hp nhiu bng v th bn c th cp nht d liu trong tt c nhng bng. Li ch ca MySQL l c s d liu quan h, h tr cho vic to lp cc bng. Khi s dng nhng quan h chnh xc c th rt hu ch v c th dng ly li d liu t nhiu bng trong truy vn SQL. V d:To v in mt bng hnh nh xem li

- 92 -

Trc tin bn c th cp nht nhng bng xem li, bn cn to bng v in d liu vo. M trnh son tho v g vo on m sau: <?php //connect to MySQL $connect = mysql_connect(localhost, root, ) or die (Hey loser, check your server connection.); mysql_select_db(moviesite); //create reviews table $reviews = CREATE TABLE reviews ( review_movie_id int(11) NOT NULL, review_date date NOT NULL, review_name varchar(255) NOT NULL, review_reviewer_name varchar(255) NOT NULL, review_comment varchar(255) NOT NULL, review_rating int(11) NOT NULL default 0, KEY (review_movie_id)); $results = mysql_query($reviews) or die (mysql_error()); //populate the reviews table $insert = INSERT INTO reviews (review_movie_id, review_date, review_name, review_reviewer_name, review_comment, review_rating) VALUES (1, 2003-08-02, This movie rocks!, John Doe,I thought this was a great movie even though my girlfriend made me see it against my will. ,4), (1,2003-08-01,An okay movie, Billy Bob,This was an okay movie. I liked Eraserhead better.,2), (1,2003-08-10,Woo hoo!, Peppermint Patty,Wish I\d have seen it sooner!,5),

- 93 -

(2,2003-08-01,My favorite movie, Marvin Marian,I didn\t wear my flair to the movie but I loved it anyway.,5), (3,2003-08-01,An awesome time, George B.,I liked this movie, even though I thought it was an informational video from our travel agent.,3); $insert_results = mysql_query($insert) or die(mysql_error()); ?> Lu file nh createreviews.php, a ln server, m trnh duyt, chng ta s thy bng c to v in y . Cch thc hot ng: Chng ta lm nh to bng vi PHP v MySQl V d:Truy vn nhng ci c xem li Trong v d ny, chng ta s lin kt 2 bng (movies v review) xem li. Nhng yu cu ny c nhiu thay i n trong movies_details.php, v th cch tt nht l bn copy file. Sau lm nhng bc sau: M trnh son tho movies_detail.php Thay i on m di y: $movie_query = SELECT * FROM movie . WHERE movie_id = . $_GET[movie_id] . ; $movie_result = mysql_query($movie_query, $link) or die(mysql_error()); V sau on m, thay i: while ($row = mysql_fetch_array($movie_result)) { $movie_name = $row[movie_name]; $movie_director = $row[movie_director]; V thm nhng dng sau du ngoc ng trong lnh While $review_query = SELECT * FROM reviews . WHERE review_movie_id = . $_GET[movie_id] . . ORDER BY review_date DESC;

- 94 -

$review_result = mysql_query($review_query, $link) or die(mysql_error()); Cch thc hot ng: Bn thay i tn ca bin $query cho bin $movie_query, thay $result cho $movie_result. Lm vic ny bo m khng lm bn cm thy rc ri khi bn cp nht nhng kt qu lin quan n s tr v ca truy vn. y cng l mnh sp xp, m chc rng nhng ci xem li gn y nht trn u trang. Mt li ch yu l nhiu ngi bt u lm th dng tn bin nh nhau khi to truy vn SQL. Tha nhn rng bn copy v dn n gin lm nh bt movie query v movie result khi query c gi. Bn c hai truy vn SQL c gi truy vn, v hai kt qu gi l $result. Khi kt qu u tin chy n s xut ra nhng kt qu mong i. Tuy nhin nu bn mun chuyn n nhng kt qu c tr v t SQL u tin bn s gp vn ln. Ti sao nh vy? Kt qu u tin s ln kt qu truy vn ln th 2, vi l do ny bn phi lun cn trng khi dng nhiu tn khc nhau cho truy vn SQL v tr v kt qu t truy vn. V d:Trnh by nhng review Thm dng sau: function generate_ratings($review_rating) { $movie_rating = ; for($i=0; $i<$review_rating; $i++) { $movie_rating .= <img src=\thumbsup.gif\>&nbsp;; } return $movie_rating; } Thm nhng on m trong nhng dng sau: $review_table_headings=<<<EOD <tr>

- 95 -

<th>Date of Review</th> <th>Review Title</th> <th>Reviewer Name</th> <th>Movie Review Comments</th> <th>Rating</th> </tr> EOD; Bn cn thm vi dng tip theo sau phn u bng: while($review_row = mysql_fetch_array($review_result)) { $review_flag =1; $review_title[] = $review_row[review_name]; $reviewer_name[] ucwords($review_row[review_reviewer_name]); $review[] = $review_row[review_comment]; $review_date[] = $review_row[review_date]; $review_rating[] generate_ratings($review_row[review_rating]); } Tip theo bn thm nhng dng sau: $i = 0; $review_details = ; while ($i<sizeof($review)) { $review_details .=<<<EOD <tr> <td width=15% valign=top align=center>$review_date[$i]</td> <td width=15% valign=top>$review_title[$i]</td> <td width=10% valign=top>$reviewer_name[$i]</td> <td width=50% valign=top>$review[$i]</td> <td width=10% valign=top align=center>$review_rating[$i]</td> = =

- 96 -

</tr> EOD; $i++; } Thay i nh di y, lm cn thn v chnh xc: <td>$movie_health</td> </tr> </table> <br> <br> EOD; if ($review_flag) { $movie_details .=<<<EOD <table width=95% border=0 cellspacing=2 cellpadding=20 align=center> $review_table_headings $review_details </table> EOD; } Lu file movie_details.php a ln server, m trnh duyt table3.php v click vo movie Bn s thy nh Hinh 4.4

- 97 -

Hinh 4.4

Cch thc hot ng: Hm generate_ratings l hm d hiu. Bn gi n cho bin l trng khng t ch(rating) cho movie v n to mt hnh rating, tr v n. Ch rng bn ang s dng .=(nh .=<<<). m bo rng nhng hnh nh vi mt rating nhiu hn 1 s to nhng hnh thm vo hnh rating n gin. Bin $review_table_headings cha nhng phn u bng cho vic xem li m bn va lp y qua truy vn SQL trc. Bin $review_table_headings cha nhng phn u ca bng cho review m bn va in y trong truy vn trc. iu ny s dng chnh xc khi nim nh phn u bng movie trong v d trc. V th bn review tt c nhng phn u bng . Tp lnh WHILE l nhng dng t chc ca nhng review, nu c bt k nhng review no cho movie, bn thit lp mt c cho bit s dng bin $review_flag. M ny to mng t chc nhng gi tr s tr v. Ti sao li t chng trong mng v khng hon ton l bin bnh thng? iu ny cho php bin t chc d liu nhiu hn mt review cho hnh nh. Sau tt c nhng iu ny, bn mong rng s c nhiu reviewcho mi hnh nh. Nu bn khng to bin review nh mng, sau bn tr v review cui cho hnh nh. Trong phn tho lun trc, chng ta thy l ti sao chng ta u tin t nhng gi tr vo hn l xut ra nhng gi tr. Nhn vo dng review_name bn ch rng chng ta t dng $review_row bn trong hm ucwords PHP. iu ny cho php bn thc hin hm ucwords t ng trong gi tr tr v t trng .

- 98 -

M sau vng lp thng qua mng v gn nhng gi tr cho mi trng m bn s trnh by cho ngi xem. Bn s dng hm sizeof PHP tnh ton c bao nhiu mu tin c tr v . Cui cng, bn chia bin $movie_details thnh on nh v thm chng qua vic s dng .=<<<. Nh bn lm trc, bn s dng nh ngha bin v t ni chnh xc. Nu c review c thit lp, bn s thy nhng mc to thnh nhng review Bn c thay i trong phn ny nhng bn thy l vic thay i c nh gi cao. By gi bn bit s dng MySQL nh th no to quan h gia cc bng. Bn thnh cng trong vic ly li nhng review t bng review ph thuc vo bin movie_id. Bn cng s dng $_GET bao trm qua gi tr t mt trang .

- 99 -

Chng 5:

NHNG THNH PHN CA FORM: CHO

PHP NGI DNG LM VIC VI D LIU


Trong ng dng Web, ngi s dng nhp ni dung, nhn submit s l. Mt tin trnh th khng c hon thnh bi lnh PHP, v th m lnh yu cu phi thng minh. HTML s gi n mt v tr c bit v x l v khi bn in trng tin vo form, bit mt a ch email, mail, bn cn mt phng tin c ni dung. Form trong HTML th n gin hn, n ch v tr v cch thc gi nh th no. Ti im ny PHP c ng dng hn. Tp lnh PHP nhn d liu t form v s dng n hon thnh hot ng, nh cp nht nhng ni dung ca c s d liu, gi mt email, nh dng d liu v hn th na. PHP s dng mt tp n gin m mnh, mt s kt hp, cung cp phng tin lm mi th o khi chng ta cn. Trong chng ny bn bt u xy dng mt ng dng n gin cho php bn thm, bt, xa thnh phn ca d liu. Chng ta s c n vi PHP/MySQL nh: To nhng form s dng nt, hp son tho v nhng thnh phn khc. To tp lnh PHP x l nhng form HTML. Nhn d liu t hai bin chnh l: $_POST v $_GET. Qua thng tin n x l tp lnh form vi nhng iu khin form n v mt chui truy vn URL.

5.1. Form u tin


Bt u l mt form n gin ch c vng son tho v nt submit, tp lnh x l s hin th gi tr nhp vo vng son tho V d: Trong bi tp ny bn s in tn vo form. y l mt bin n gin trong chng trnh Hello Word. 1/M trnh son tho nhp on m sau v lu vi tn form1.html <html> <head> <title>Say My Name</title> <style type="text/css"> TD{color:#353535;font-family:verdana}
- 100 -

TH{color:#FFFFFF;font-family:verdana;background-color:#336699} </style> </head> <body> <form action="formprocess1.php" method="post"> <table border="0" cellspacing="1" cellpadding="3" bgcolor="#353535" align="center"> <tr> <td bgcolor="#FFFFFF" width="50%">Name</td> <td bgcolor="#FFFFFF" width="50%"> <input type="text" name="Name"><br></td> </tr> <tr> <td bgcolor="#FFFFFF" colspan="2" align="center"> <input type="submit" name="SUBMIT" value="Submit"> </td> </tr> </table> </form> </body> </html> 2/ M trnh son tho mi nhp on m sau v lu vi tn formprocess1.php: <html> <head> <title>Say My Name</title> </head> <body> <?php echo "Hello " . $_POST['Name']; ?> <pre>

- 101 -

DEBUG : <?php print_r($_POST); ?> </pre> </body> </html> 3/M trnh duyt vi file form1.html s cho kt qu nh Hnh 5.1.1

Hnh 5.1

Nhp vo khung Name ni dung bt k(v d Test) v click nt Submit bn s thy kt qu nh sau: Hello Test DEBUG : Array ( [Name] => Test [SUBMIT] => Submit ) Cch thc hot ng : hiu v cch thc hot ng, chng ta phi tm hiu v nhng thnh phn ca form v vi hm PHP mi.

5.1.1.

Thnh phn form


Thnh phn m bn cn bit trc tin l FORM. N gii hn vng form trong

trang v t chc nhng vng m bn cn t trang web: <form action=formprocess1.php method=post>

- 102 -

<!--form controls here--> </form> Foo.php <form action = bar.php method = POST> <input type = text name = movie_name> </form> http://localhost/bar.php Bar.php The movie is called<?=$_POST[movie_name]?>.

Ch : Thnh phn Form c mt th kt thc v hai thuc tnh. 1. Action: l cch thc ch n ng dn. 2. Method: l cch thc m bn s gi d liu n ngi nhn. Gi c hai phng php. l POST v GET. Phng php POST ly d liu t trng form v gi n thng qua phn u HTTP. Trong trng hp ny d liu khng th thy qua URL Phng thc GET ly d liu t trng form, m ha n, v thm n gi ti URL nh trnh by di y: http://localhost/formprocess1.php?field1=valuea&field2=value%20b Bn c th thy, tn trng v gi tr ca chng th d dng c trong tp lnh URL. Nhng tham s ca tp lnh trong URL cho php ngi dng c th thay i, iu khin chng. iu ny c th dn n li trong qu trnh x l tp lnh hoc cp nht d liu( khng phi l ln cp nht u tin.)

5.1.2.

Phn t nhp (INPUT)


Phn t HTML mi th hai l INPUT. y l hnh thc c bn v c th s

dng trong nhiu phng php khc nhau tp hp nhiu loi thng tin khc nhau. Trong trng hp ny bn c th s dng kiu INPUT khc nhau: kiu vn bn(text) v kiu submit.
- 103 -

Kiu INPUT vn bn: <input type=text name=Name> Kiu INPUT vn bn l mt tiu chun, hp vn bn ch c nhng dng n. N s cp nht ni dugn thng qua c php: <?php echo $_POST[Name]; // s hin th mt kiu gi tr ?> Kiu INPUT submit: <input type=submit name=SUBMIT value=Submit> Tn ca n phi gi kho lo, phn t submit hin th bng mt nt. Nt vn bn c t thng qua thuc tnh gi tr. Nh phng php cho INPUT vn bn, iu khin form ny cn c tn cho tin trnh chuyn n.

5.1.3.

X l Form
Trong lnh, chng ta phi ch n hm v c php mi tm hiu v chng Tp lnh x l Form u tin l mt bin tng tc ca hello world ph

bin, nhng trong trng hp ny n hin th hello v tn ca bn trong hp text. iu ny xy ra, bn cn in gi tr ca trng vn bn m bn in trong form. Bn bit lnh xut, v th chng ta hy di chuyn n mt b phn, $_POST[tn]. Mng ton cc $_POST cha tt c cc form d liu submit vi phng php POST. Danh mc mng ca trng l tn ca n. Trong thi im ny bn s thy cch kim tra ni dung mng $_POST s dng hm print_r() nh th no. <?php echo Hello . $_POST[Name]; ?> Trong v d ny, $_POST[name] hin th ci g bn nhp vo trong hp Name.Hello test. y print_r($_POST) kt xut n gin ni dung chung ca mng ton cc $_POST xut ra. y l cch tt nht bin dch form. Nn s dng $_POST kim tra, trnh by trng thi i tng khi xy dng tp lnh.
- 104 -

Trong tp lnh formprocess1.php xut ra mt vi th tng t nh sau Hello test DEBUG : Array ( [Name] => test [SUBMIT] => Submit ) Khi nhn form submit, PHP t mng POST vi d liu m form gi ti. Nh vi bt k mng no, bn c th cp nht chnh xc bt k danh mc no bng tn. Trong v d ny, bn c th thy r danh mc tn cha gi tr test. Cch ny lm vic vi tt c cc form, ngay c vi nhng form phc tp nht. Chng ta hy i tip thy vic s dng nhng phn t HTML trong sut qu trnh nhp form vi giao din ngi dng.

5.2. Driving the User Input


Form trong v d ny, hng dn ngi dng chn nhng gi tr t mt tp hp gi tr m c cung cp. Tp hp gi tr thng qua vic s dng nhng phn t HTML c bit: list boxes, radio buttons v checkboxes. C 2 loi trong form: Loi cho php ngi dng chn mt mc t nhng chn la c sn. Loi cho php chn nhiu mc. Hp danh sch x xung v nt radio ch chn mt. Nhng checkbox v nhng hp danh sch cung cp nhiu la chn V d: Gii hn ca vic chn la Chng ta hy bt u vi mt kiu nhp n gin. Nhng bc sau l to mt danh sch n gin: 1 To mt file form2.html v m n trong trnh son tho ca bn 2. Nhp on m sau: <html>
- 105 -

<head> <title>Greetings Earthling</title> <style type=text/css> TD{color:#353535;font-family:verdana} TH{color:#FFFFFF;font-family:verdana;background-color:#336699} </style> </head> <body> <form action=formprocess2.php method=post> <table border=0 cellspacing=1 cellpadding=3 bgcolor=#353535 align=center> <tr> <td bgcolor=#FFFFFF width=50%>Name</td> <td bgcolor=#FFFFFF width=50%> <input type=text name=Name> </td> </tr> <tr> <td bgcolor=#FFFFFF>Greetings</td> <td bgcolor=#FFFFFF> <select name=Greeting> <option value=Hello>Hello</option> <option value=Hola>Hola</option> <option value=Bonjour>Bonjour</option> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF width=50%>Display Debug info</td> <td bgcolor=#FFFFFF width=50%> <input type=checkbox name=Debug checked>

- 106 -

</td> </tr> <tr> <td bgcolor=#FFFFFF colspan=2 align=center> <input type=submit name=SUBMIT value=Submit> </td> </tr> </table> </form> </body> </html> 3.To mt file mi vi tn formprocess2.php v nhp on m sau: <html> <head> <title>Greetings Earthling</title> <style type=text/css> TD{color:#353535;font-family:verdana} TH{color:#FFFFFF;font-family:verdana;background-color:#336699} </style> </head> <body> <?php if (isset($_POST[Debug]) and $_POST[Debug] == on) { ?> <pre> <?php print_r($_POST); ?> </pre> <?php }

- 107 -

?> <p align=center><?php echo $_POST[Greeting]; ?> <?php echo $_POST[Name]; ?></p> </body> </html> 4. Lu formprocess2.php v ti n ln th mc lm vic ca bn. 5. Gi trang trnh duyt ca bn. Bn c th thy kt qu nh hinh 5.2.1

Hnh 5.2.1

6. nhp tn ca bn v n nt submit .Kt qu nh hinh 5.2.2

Hnh 5.2.2

Cch thc hot ng: Nh bn thy on m ny, trnh t ging nh trong formprocess1.php. Hai trng c thm mt hp x xung v mt checkbox. formprocess2.php ging nh formprocess1.php nhng thm mt hp cun.Trnh by thng tin bin dch ch khi hp kim Debug c chn v bn dng bt k chn la no trong danh sch x xung .

5.2.1.

Kiu nhp hp checkbox

Checkbox c th c trnh by hai v tr: Khi c kim tra, n thng qua gi tr trn mng $_POST, nhng mc khc n khng gi i mi th. y l phng php hay trnh by kiu d liu Boolean.

- 108 -

* SELECT element <select name=Greeting> <option value=Hello>Hello</option> <option value=Hola>Hola</option> <option value=Bonjour>Bonjour</option> </select> Phn t SELECT cho php bn trnh by mt danh sch chn la c nh m ngi dng c th chn mt phn t. Mc chn s khng c gi nh hin th nhng s gi gi tr ca n. Trong v d ny, gi tr v hin th l ging nhau, nhng trong mt h thng rng buc c s d liu, bn c th thy ID ca mu tin nh nhng gi tr v nhn vn bn ca chng l danh sch chn. Khi s dng danh sch, phi thit lp nhng phn gi tr mc chn OPTION. Nu y khng thit lp tng t nh thy trong danh sch, nhng hon ton khng s dng bi v tt c chn la s gi nh gi tr rng.

5.2.2.

Mt form a tin trnh


Form lun lun tc ng li theo mt phng thc xc nh trc, da vo

vic m ha tp lnh ch nh d liu m ngi dng gi ti h thng nh th no. Mt form n gin c th c nhiu nh ngha hot ng bng vic s dng nhng nt submit khc nhau. V d: Radio Button, Multiline List Boxes Trong v d sau, bn to ra mt form chun b mt nghin cu v to mt giao din film/din vin/o din. 1. to mt file form3.php v nhp on m sau: <html> <head> <title>Add/Search Entry</title> <style type=text/css> TD{color:#353535;font-family:verdana} TH{color:#FFFFFF;font-family:verdana;background-color:#336699} </style> </head>
- 109 -

<body> <form action=formprocess3.php method=post> <table border=0 cellspacing=1 cellpadding=3 bgcolor=#353535 align=center> <tr> <td bgcolor=#FFFFFF width=50%>Name</td> <td bgcolor=#FFFFFF width=50%> <input type=text name=Name> </td> </tr> <tr> <td bgcolor=#FFFFFF>What you are looking for</td> <td bgcolor=#FFFFFF> <select name=MovieType> <option value= selected>Select a movie type...</option> <option value=Action>Action</option> <option value=Drama>Drama</option> <option value=Comedy>Comedy</option> <option value=Sci-Fi>Sci-Fi</option> <option value=War>War</option> <option value=Other>Other...</option> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF>Add what?</td> <td bgcolor=#FFFFFF> <input type=radio name=type value=Movie checked> Movie<br> <input type=radio name=type value=Actor> Actor<br>

- 110 -

<input type=radio name=type value=Director> Director<br> </td> </tr> <tr> <td bgcolor=#FFFFFF width=50%>Display Debug info</td> <td bgcolor=#FFFFFF width=50%> <input type=checkbox name=Debug checked> </td> </tr> <tr> <td bgcolor=#FFFFFF colspan=2 align=center> <input type=submit name=Submit value=Search> <input type=submit name=Submit value=Add> </td> </tr> </table> </form> </body> </html> 2. To file khc tn formprocess3.php v nhp on m sau: <?php if ($_POST[type] == Movie && $_POST[MovieType] == ) { header(Location:form3.php); } $title = $_POST[Submit] . . $_POST[type] . : . $_POST[Name]; ?> <html>

- 111 -

<head> <title><?php echo $title; ?></title> </head> <body> <?php if ($_POST[Debug] == on) { ?> <pre> <?php print_r($_POST); ?> </pre> <?php } $name = $_POST[Name]; $name[0] = strtoupper($name[0]); if ($_POST[type] == Movie) { $foo = $_POST[MovieType] . . $_POST[type]; } else { $foo = $_POST[type]; } ?> <p align=center> You are <?php echo $_POST[Submit]; ?>ing <?php echo $_POST[Submit] == Search ? for : ; ?> a <?php echo $foo ?> named <?php echo $name; ?> </p> </body>

- 112 -

</html> 3. M http://localhost/form3.php. Kt qu nh Hnh 5.2.2.1

Hinh 5.2.2.1

Ch y c 2 nt Search v nt Add 4. Nhp Kevin Kline trong trng Name. 5. Chn loi film. 6. Xa hin th Debug Dump checkbox nu bn thch; sau nhn nt Search .Kt qu nh sau:

Hnh 5.2.2.2

7. By gi hy th thay i d liu xem kt qu th no Cch thc hot ng Bn vit m lnh mt form n gin vi hai hot ng. Ph thuc vo nt bn nhn v d liu bn chn enter, m ny xut ra nhng thng tin khc nhau. Mt nhm nhng nt radio v nt submit c thm vo. Chng ta hy nhn vo hnh Hnh 5.2.2.1

- 113 -

5.2.3.

Nhng phn t nhp nt Radio


Nt radio l phn t rt n gin. Bng vic mc nh, nu khng c nt radio

c bit nh CHECKED th khng c vic chn mc nh. Nn nh, vic chn gi tr mc nh l phn quan trng ca vic thit lp form. Ngi s dng thng mc nh. <input type=radio name=type value=Movie checked> Movie<br> <input type=radio name=type value=Actor> Actor<br> <input type=radio name=type value=Director> Director<br> Cho nhiu nt radio phc tp lin kt cc nhm form vi nhau v x l mt phn t form n gin, chng cn tn nh nhau v nhng gi tr khc nhau, mt cch hon ton r rng. Trong on m c trc, tn lun l ch in. iu ny ni vi trnh duyt web rng ch c mt nt c chn.

5.2.4.

Nhng nt submit phc tp


Nh vi nt radio, nt submit cng c tn ging nhau vi gi tr khc nhau.

Nhn vo mt trong nhng nt n gin. <input type=submit name=Submit value=Search> <input type=submit name=Submit value=Add> Khi bn thy bin dch tr ngi, nt submit gi thng tin n tp lnh. Bn c th cp nht gi tr nt submit thng qua mng $_POST[Submit].

5.2.5.

Vic kim tra nhp c bn


Tp lnh x l l g? C g mi? on m di y kim tra loi mc l Movie, n kim tra ngi s dng

chn mt loi gi tr movie t danh sch cha. Nu c hoc khng, anh ta hoc c ta c gi mt a ch mi n trang form. Vic kim tra n gin nu vi mt v ton t. (Trong cch ni n gin Monopoly, nu loi mc l movie v khng c bit, bn tr li mt hnh vung v khng thu c $200.)

- 114 -

if ($_POST[type] == Movie && $_POST[MovieType] == ) { header(Location:form3.php); } Phn u hm cho php bn gi n phn u HTTP th. N th hu ch cho vn bo mt a ch v hn ch cp nht. Trong v d ny, n gi mt a ch ngi dng mi n trang l thuyt. Ch : Mt li chung vi ngi bt u s dng PHP l hiu sai mt s tht rt n gin. Mt ln gi nhng phn u khng th gi mt ln na. iu ny c ngha l bt k vic xut no, bt k khong trng no, bt k s trnh by bng no ng, trc khi gi phn u hm n s sinh ra mt cnh bo trong vic thc thi tp lnh. y l mt vi kiu li: <?php header(Location:form3.php); ?> on m ny s tht bi. Dng bt u tp lnh rng s gi n phn u vi mt iu khin tr v v mt ng vn chuyn (ph thuc vo h iu hnh). <?php echo foobar; header(Location:form3.php); ?> on m ny s tht bi. Hm xut ra s gi phn u vi text foobar

5.2.6.

Tiu trang ng
M ny th d hiu hn: Bn khng bt u xut ra sm nh bt u thc thi

tp lnh PHP. iu g s xy ra khi im bt u tp lnh s kim tra s xm nhp v kim tra ng cnh. Trong v d ny, bn khng sp xp m ng cnh phc tp, nhng bn cn t tiu trang ng s dng kiu action v kiu item, bn s s dng handle ca trang. $title = $_POST[Submit] . . $_POST[type] . : .
- 115 -

$_POST[Name]; ?> <html> <head> <title><?php echo $title; ?></title>

5.2.7. tin

iu khin mt chui bng tay nh mt mng i k t u

Chui k t n gin c th cp nht thng qua c php n gin ging nh vic cp nht ch mc ca mng. Ch mc c bit ca k t mun cp nht v voil! i mt k t hoc ton b chui, s dng hm: strtoupper(): $name = $_POST[Name]; $name[0] = strtoupper( $name[0]); Bn c th dng hm ucfirst()

5.2.8.

Ton t tam nguyn


Dng di y cha s so snh php ton bc ba. Ton t tam nguyn khng

ch s dng trong PHP m nhng ngn ng khc cng s dng (nh C). <?php echo $_POST[Submit] == Search ? for : ; ?> Vic ny c th so snh nh cu trc if-else, [biu thc]?[thc hin nu TRUE]: [thc hin nu FALSE]; Ton t tam nguyn ny th c bit nh mi nguy him lu di. Vic s dng n s lm cho on m ca bn d c hn v c th gy ra li trong thi gian di.

5.3. Kt hp nhng phn t ca form


By gi chng ta to ra mt khung cho mt phim ng dng. H thng s thm nhng mc mi hoc tm kim nhng ci c sn. V d: Lin kt tt c chng li vi nhau Trong v d ny, bn s to ra nhiu tp lnh mi lm vic vi nhau ti to cho php ngi dng thm thng tin vo d liu. 1. To mt file tn form4.php Nhp on code nh sau:

- 116 -

<?php // Hin th thng tin bin dch function debugDisplay() { ?> <pre> $_POST <?php print_r($_POST); ?> $_GET <?php print_r($_GET); ?> </pre> <?php } if (!isset($_GET[step])) { require(startform.php); } else { // Switch on search/add wizard step switch ($_GET[step]) { // ################# // Search/Add form // ################# case 1: $type = explode(:, $_POST[type]);

- 117 -

if ($_POST[Submit] == Add) { require($_POST[Submit] . $type[0] . .php); } else { if ($_POST[type] == Movie:Movie && $_POST[MovieType] == ) { header(Location:form4.php); } ?> <h1>Search Results</h1> <p>You are looking for a <?php echo $type[1]; ?> named <?php echo $_POST[Name]; ?></p> <?php } if ($_POST[Debug] == on) { debugDisplay(); } break; // ################# // Add Summary // ################# case 2: $type = explode(:, $_POST[type]); ?> <h1>New <?php <?php echo $type[1]; ?> : <?php echo $_POST[Name]; ?></h1>

- 118 -

switch ($type[0]) { case Movie: ?> <p>Released in <?php echo $_POST[MovieYear]; ? ></p> <p><?php echo nl2br(stripslashes($_POST[Desc])); ? ></p> <?php break; default: ?> <h2>Quick Bio</h2> <p><?php echo nl2br(stripslashes($_POST[Bio])); ? ></p> <?php break; } break; // ############### // Starting form // ############### default: require(startform.php); break; } } ?> 2. To mt file vi tn startform.php v nhp m sau <html> <head>

- 119 -

<title>Multipurpose Form</title> <style type=text/css> TD{color:#353535;font-family:verdana} TH{color:#FFFFFF;font-family:verdana;backgroundcolor:#336699} </style> </head> <body> <form action=form4.php?step=1 method=post> <table border=0 width=750 cellspacing=1 cellpadding=3 bgcolor=#353535 align=center> <tr> <td bgcolor=#FFFFFF width=30%>Name</td> <td bgcolor=#FFFFFF width=70%> <input type=TEXT name=Name> </td> </tr> <tr> <td bgcolor=#FFFFFF>Item Type</td> <td bgcolor=#FFFFFF> <input type=radio name=type value=Movie:Movie checked> Movie<br> <input type=radio name=type value=Person:Actor> Actor<br> <input type=radio name=type value=Person:Director> Director<br> </td> </tr> <tr> <td bgcolor=#FFFFFF>Movie type (if applicable)</td> <td bgcolor=#FFFFFF>

- 120 -

<select name=MovieType> <option value= selected>Movie type...</option> <option value=Action>Action</option> <option value=Drama>Drama</option> <option value=Comedy>Comedy</option> <option value=Sci-Fi>Sci-Fi</option> <option value=War>War</option> <option value=Other>Other...</option> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF width=50%>Display Debug Dump</td> <td bgcolor=#FFFFFF width=50%> <input type=checkbox name=Debug checked> </td> </tr> <tr> <td bgcolor=#FFFFFF colspan=2 align=center> <input type=submit name=Submit value=Search> <input type=submit name=Submit value=Add> </td> </tr> </table> </form> </body> </html> 4. To mt file mi vi tn AddMovie.php: <?php if ($_POST[type] == Movie:Movie &&

- 121 -

$_POST[MovieType] == ) { header(Location:form4.php); } $title = $_POST[Submit] . . $_POST[type] . : . $_POST[Name]; $name = $_POST[Name]; $name[0] = strtoupper($name[0]); ?> <html> <head> <title><?php echo $title; ?></title> <style type=text/css> TD{color:#353535;font-family:verdana} TH{color:#FFFFFF;font-family:verdana;background-color:#336699} </style> </head> <body> <form action=form4.php?step=2 method=post> <input type=hidden name=type value=<?php echo $type[1]; ?>> <input type=hidden name=action value=<?php echo $_POST[Submit]; ?>> <table border=0 width=750 cellspacing=1 cellpadding=3 bgcolor=#353535 align=center> <tr> <td bgcolor=#FFFFFF width=30%>Movie Name</td> <td bgcolor=#FFFFFF width=70%> <?php echo $name; ?> <input type=hidden name=Name value=<?php echo $name; ?>> </td> </tr>

- 122 -

<tr> <td bgcolor=#FFFFFF>Movie Type</td> <td bgcolor=#FFFFFF> <?php echo $_POST[MovieType]?><br> <input type=hidden name=type value=Movie: <?php echo $_POST[MovieType]; ?>> </td> </tr> <tr> <td bgcolor=#FFFFFF>Movie Year</td> <td bgcolor=#FFFFFF> <select name=MovieYear> <option value= selected>Select a year...</option> <?php for ($year=date(Y); $year >= 1970 ;$year--) { ?> <option value=<?php echo $year; ?>><?php echo $year; ?></option> <?php } ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF>Movie Description</td> <td bgcolor=#FFFFFF> <textarea name=Desc rows=5 cols=60></textarea> </td> </tr> <tr>

- 123 -

<td bgcolor=#FFFFFF colspan=2 align=center> <input type=submit name=SUBMIT value=Add> </td> </tr> </table> </form> </body> </html> 5. To mt file mi vi tn AddPerson.php v nhp on m sau <?php $title = $_POST[Submit] . . $_POST[type] . : . $_POST[Name]; $name = $_POST[Name]; $name[0] = strtoupper($name[0]); ?> <html> <head> <title><?php echo $title; ?></title> <style type=text/css> TD{color:#353535;font-family:verdana} TH{color:#FFFFFF;font-family:verdana;backgroundcolor:#336699} </style> </head> <body> <form action=form4.php?step=2 method=post> <input type=hidden name=type value=Person: <?php echo $type[1]; ?>> <input type=hidden name=action value=<?php echo $_POST[Submit]; ?>>

- 124 -

<table border=0 width=750 cellspacing=1 cellpadding=3 bgcolor=#353535 align=center> <tr> <td bgcolor=#FFFFFF width=30%> <?php echo $type[1]; ?> Name </td> <td bgcolor=#FFFFFF width=70%> <?php echo $name?> <input type=hidden name=Name value=<?php echo $name; ? >> </td> </tr> <tr> <td bgcolor=#FFFFFF>Quick Bio</td> <td bgcolor=#FFFFFF> <textarea name=Bio rows=5 cols=60></textarea> </td> </tr> <tr> <td bgcolor=#FFFFFF colspan=2 align=center> <input type=submit name=SUBMIT value=Add> </td> </tr> </table> </form> </body> </html> 6. Cho chy form4.php trn trnh duyt. Kt qu nh sau:

- 125 -

Hnh 5.3.1

7. Nhp tn phim: Grand Canyon. 8. Click vo nt Add, cho bn hnh nh sau:

Hnh 5.3.2

9. Chn mt ngy trong nm sn xut phim 10. Chn Drama trong danh sch loi phim. 11. Hin th nhanh phim, nu mun nhp vo u, enter ti 12. Click vo nt Add v thy thng tin hin th nh sau:

- 126 -

Hnh 5.3.3

Khi nhn nt Add mn hnh hin th:

Hnh 5.3.4

Cch thc hot ng Tp lnh ny thit k xung quanh mt tng n gin: mt tp lnh khung (form4.php) v nhiu tp lnh flesh-andmuscle trn URL vi chui truy vn.

5.3.1.

Tp lnh khung
Khung dy l tp lnh form4.php. Tt c n quay xung quanh vic s dng

cu trc switch case. N bt u vi vic nh ngha hm cho vic hin th trnh bin dch(ci m cha hin th cmng ton cc $_GET ). Trong thc t form s dng phng thc POST v v vy truyn thng tin n mng $_POST, phn ni dung chuyn i ca trang s qua chui truy vn ca mng $GET

- 127 -

Mi bc trong qu trnh xy dng th c hng dn bi gi tr ch mc $GET[bc]. N cha thng tin qua phn ?step=1 ca URL. Mi gi tr ca tham s GET c mt tp lnh c bit km theo. Tham s ny cho tp lnh chnh(index.php) ni m mt nhnh tin trnh d liu c nhn.

5.3.2.

Cu tr li mc nh
iu g s xy ra khi gi trang u tin v bc tham s URL khng c

thit lp? tp lnh nh gi iu kin switch v tm cc trng hp.Nu khng c s thc thi mc nh. switch ($_GET[step]) { ... default: require(startform.php); break; } Hm require() ly ni dung ca file l thuyt k c tp lnh phin dch cng lc. Nhng khc bit ca hm requere() vi hm include() l n khi to mt li ln thay v mt cnh bo nu file khng tm thy. Trong v d ny, tp lnh startform.php s t quy t trong hm, v th m bn mun bit nu khng tm thy file.

5.3.3.

Thm mc con
Bn cn hai form khc nhau thm vo mc con, v th cn nhnh th hai

quyt nh form hin th. By gi chng ta gp phi mt phn lnh m c mt t mu mo. Danh sch gi tr mc con s dng lu tr 2 gi tr thay v mt. Cch ny dng du phn cch v a gi tr explode vo mng, cp nht phn bn cn.(Hm explode() ly mi n v vn bn bng du ngn cch v chn n nh phn t mi ca mng. Trong trng hp bn c 3 kiu mc(Actors, Directors, and Movies), mi kiu yu cu mt form. Nhng bn mun mc Actor v mc Director cng thng tin . Do , bn khng cn hai form khc nhau. Bn lm iu ny bng vic thm vo mt cu trc cy bn trn mc Person hay Movie. Di Person l Actor v

- 128 -

Director . Ton b im c th s dng mc tn ca h ng cp mi n tn file v bn c th thm mt mc mi su Trong startform.php bn c: <input type=radio name=type value=Person:Actor> Actor<br> Ch : phn gi tr ca kiu phn t bao gm 2 gi tr khc nhau ngn cch bi du chm phy(;). Trong form4.php bn c: ... $type = explode(:, $_POST[type]); if ($_POST[Submit] == Add) { require($_POST[Submit] . $type[0] . .php); } ... Trong tp lnh ny, bn ly li gi tr kiu phn t s dng ch mc mng $_POST[kiu] v sau s dng hm explode() trn ni dung ca n.Hm explode() th kh d s dng. N cn chui gii hn c bit v chui cha vn bn explode. V d, bn c Person:Actor nh gi tr explode v du hai chm (:) nh gii hn. Kt qu ca bin $type s l mt mng cha mt phn ca chui ct ti du(;) trong v d Nu bn trnh by n trong nh dng print_r, bn c: Array ( [0] => Person [1] => Actor ) Mc tiu ca tn file n gin c hon thnh. Bn c hai tp lnh Add v mt tn: AddPerson.php and AddMovie.php. require($_POST[Submit] . $type[0] . .php);

- 129 -

Dng ny to tn t ng.

- 130 -

Chng 6:

CHO PHP NGI S DNG SON THO

C S D LIU
Nhn d liu t c s d liu khi cung cp mt vi d liu cho c s d liu. Nhng c s d liu th khng to ra ni dung m ch ly d liu t h thng khc. iu ny c ngha l bn phi to h thng d liu t PHP. Tt c c s d liu tng tc da trn SQL. Bn bit l c php SQL ly d liu t mng. Hu ht mi ngi dng SQL chn d liu m PHP sa i hoc to ra. Chng ny cp n son tho c s d liu, bao gm:.
Thm: iu ny th n gin, nhng bn s tm thm vo trong mt c s d liu

Xa: khng sa i li cu trc c s d liu v c lin quan n tnh ton vn. Sa i: thay th mt vi vng son tho vi ni dung mi trong mt h s c sn.

6.1. Chun b Battlefield


iu ny y v hon chnh nh 1 n v Vulcan, nhng nu mun qun l c s d liu th bin ton cc phi c to ra. lu trong cng mt thi gian th chng ta s dng c s d liu hin c trnh bt k vn g xy ra khi lm bi tp. To ra mt c s d liu mi rng trong phpMyAdmin vi tn moviesite. Trong c s d liu mi c to ra, thc thi tp lnh chap6.mysql script, cha c s d liu v d liu ca n c bt u. V d: Trc tin , bn cn mt trang bt u. Sau y l nhng bc to 1. To th mc mi tn chap6 trong htdocs 2. Tao 1 file index.php v nhp on m nh sau <?php $link = mysql_connect(localhost, root, ) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die(mysql_error()); ?>
- 131 -

<html> <head> <title>Movie database</title> <style type=text/css> TD{color:#353535;font-family:verdana} TH{color:#FFFFFF;font-family:verdana;background-color:#336699} </style> </head> <body> <table border=0 width=600 cellspacing=1 cellpadding=3 bgcolor=#353535 align=center> <tr> <td bgcolor=#FFFFFF colspan=2 align=center> Movies <a href=movie.php?action=add&id=>[ADD]</a> </td> </tr> <?php $moviesql = SELECT * FROM movie; $result = mysql_query($moviesql) or die(Invalid query: . mysql_error()); while ($row = mysql_fetch_array($result)) { ?> <tr> <td bgcolor=#FFFFFF width=50%> <?php echo $row[movie_name]; ?> </td> <td bgcolor=#FFFFFF width=50% align=right> <a href=movie.php?action=edit&id=<?php echo $row[movie_id]; ?>>[EDIT]</a> <a href=delete.php?type=movie&id=<?php echo $row[movie_id]?>>[DELETE]</a>

- 132 -

</td> </tr> <?php } ?> <tr> <td bgcolor=#FFFFFF colspan=2 align=center> People <a href=people.php?action=add&id=>[ADD]</a> </td> </tr> <?php $moviesql = SELECT * FROM people; $result = mysql_query($moviesql) or die(Invalid query: . mysql_error()); while ($row = mysql_fetch_array($result)) { ?> <tr> <td bgcolor=#FFFFFF width=50%> <?php echo $row[people_fullname]; ?> </td> <td bgcolor=#FFFFFF width=50% align=right> <a href=people.php?action=edit&id=<?php echo $row[people_id]; ?>>[EDIT]</a> <a href=delete.php?type=people&id=<?php echo $row[people_id]; ?>>[DELETE]</a> </td> </tr> <?php } ?> </table>

- 133 -

</body> </html> 3. M trinh duyt http://localhost/chapter6/index.php kt qu nh sau:

Hnh 6.1-2

Tt c cc lin kt ti thi im ny u khng c thc hin, chuyn ny l bnh thng v cha c cc trang lin kt. Cch thc lm vic Bn phi c mt giao din qun l trung tm cho php bn thi hnh nhng hot ng trong c s d liu v d dng thy ni dung. Tp lnh ny l giao din qun l. N hin th v cho php qun l mi th.

6.2. Chn mt mu tin n gin t phpMyAdmin


Ch rng tp lnh s dng l mt quy tc n gin c lin quan n SQL: Phi c gng truy vn trong MySQL trc khi th chn n trong on m. L do n gin l bn c th bin dch ngn ng tt hn trong mi thi gian V d v chn d liu Trong bi tp ny bn s chn mt vi d liu vo bng 1.M c s d liu ca bn trong MyAddmin hoc trong my khch MySQL v nhp m SQL sau: INSERT INTO movie (movie_name, movie_type, movie_year) VALUES (Bruce Almighty, 1, 2003) Nh Hnh 6.2.1

- 134 -

Hnh 6.3.1

2.Thng bo sau xut hin nh Hnh 6.2.2 You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 2003) at line 2

Hnh 6.2.2

3. a li nh ngh ny ( hon ton n gin lm vi mt s k t, phi nhy n sau 2003) v chy phpMyAdmin sau hin th thc thi SQL v hng dn bn v hin th ni dung ca bng nh trong Hnh 6.3.3

- 135 -

Hnh 6.2.4

Trc khi truy vn SQL trong PHP, bn nn kim tra cu lnh SQL trong phpMyAdmin. N c th bin dch SQL trc khi chn vo on m v ngn chn vic bin dch hai ngn ng khc nhau trong cng thi gian. Cch thc lm vic Khi chn mt mu tin trong bng, khng cn chn ID nu bn t vng kha chnh t ng gim. SQL s d dng. iu ny chc chn rng khng c nhng kha ging nhau trong bng. ly id t ng ca mu tin chn trong PHP phi s dng hm mysql_insert_id() sau gi hm mysql_query(). Hm ny tr v kha chnh khi chn 1 mu tin mi. Bi v bn to truy vn SQL nhiu hn mt dng, bn c th thy thng bo sau: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 2003) at line 2 Dng ny tng ng vi mt phn gi tr ca cu lnh SQL, nh hin th y:VALUES (Bruce Almighty, 1, 2003) Nu truy vn SQL trn mt dng th ch c mt thng bo error in line 1. Bn c th thy im sai l bn qun ng du nhy trong gi tr movie_year value. By gi bn c th thy chng ta b st trong vng movie. movie _id. Chng ta lm iu ny c mc ch. (Khng c mt sc mnh c bit ca gi tr kha chnh no trong phng tin ca MySQL t ng quyt nh gim gi tr t ng). Bn khng cn bit kha tip theo l g
- 136 -

6.3. Chn mt mu tin trong c s d liu quan h


Trong c s d liu thng c nhiu bng. Tt c cc bng ny c th hon ton c lp, nhng s ging nh vic s dng xe hi ca bn lu tr mt vi th trong thng xe nhng khng bao gi li xe. Trong h thng c ca c s d liu quan h khng tn ti, mi dng cha tt c cc thng tin. H thng ang chy ch vi mt bng cha tt c cc thng tin. Bng movie s cha tt c cc d liu v din vin v o din v nhng loi khc trong phim. Gi s rng mt ngy no bn quyt nh mt loi film no s c chuyn t hnh ng sang thm him (thay i mi th). Bn s thng qua tt c mu tin thay i cc nhn film. Trong h qun tr c s d liu mi(RDBMS), n khng hn trng hp no, bn s to ra mt bng movietype lu tr tt c cc loi film c chuyn n v bn s lin kt nhng loi film vi loi film c lin quan. lin kt nhng bng , bn s dng mt loi kha chnh/kha ngoi. Kha chnh ca bng movietype l mt s xc nh cho mi loi film. V d trong c s d liu ca bn id 1 c lin quan n film hi. Kha ngoi l quan h gia bng movie n kha chnh ca movietype. Trong bi tp sau bn s dng PHP v MySQL chn mt b film vo c s d liu . Film ny l mt loi film t bng movietype. V d : Chn mt b film vi ngi v loi film bit. Trong thi gian ny chng ta s lm mt vi th phc tp hn. Bn s thm mt b film vo h thng, trong khi ghi r c sn loi film, din vin v o dn. 1. To mt file mi tn movie.php v nhp on m sau: <?php $link = mysql_connect(localhost, bp5am, bp5ampass) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die ( mysql_error()); $peoplesql = SELECT * FROM people; $result = mysql_query($peoplesql) or die(Invalid query: . mysql_error());
- 137 -

while ($row = mysql_fetch_array($result)) { $people[$row[people_id]] = $row[people_fullname]; } ?> <html> <head> <title>Add movie</title> <style type=text/css> TD{color:#353535;font-family:verdana} TH{color:#FFFFFF;font-family:verdana;background-color:#336699} </style> </head> <body> <form action=commit.php?action=add&type=movie method=post> <table border=0 width=750 cellspacing=1 cellpadding=3 bgcolor=#353535 align=center> <tr> <td bgcolor=#FFFFFF width=30%>Movie Name</td> <td bgcolor=#FFFFFF width=70%> <input type=text name=movie_name> </td> </tr> <tr> <td bgcolor=#FFFFFF>Movie Type</td> <td bgcolor=#FFFFFF> <select id=game name=movie_type style=width:150px> <?php $sql = SELECT movietype_id, movietype_label . FROM movietype ORDER BY movietype_label; $result = mysql_query($sql)

- 138 -

or die(<font color=\#FF0000\>Query Error</font> . mysql_error()); while ($row = mysql_fetch_array($result)) { echo <option value= . $row[movietype_id] . > . $row[movietype_label] . </option> . \r\n; } ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF>Movie Year</td> <td bgcolor=#FFFFFF> <select name=movie_year> <option value= selected>Select a year...</option> <?php for ($year = date(Y); $year >= 1970; $year--) { ?> <option value=<?php echo $year; ?>><?php echo $year; ?></option> <?php } ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF>Lead Actor</td> <td bgcolor=#FFFFFF> <select name=movie_leadactor> <option value= selected>Select an actor...</option>

- 139 -

<?php foreach ($people as $people_id => $people_fullname) { ?> <option value=<?php echo $people_id; ?> > <?php echo $people_fullname; ?></option> <?php } ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF>Director</td> <td bgcolor=#FFFFFF> <select name=movie_director> <option value= selected>Select a director...</option> <?php foreach ($people as $people_id => $people_fullname) { ?> <option value=<?php echo $people_id; ?> > <?php echo $people_fullname; ?></option> <?php } ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF colspan=2 align=center>

- 140 -

<input type=submit name=SUBMIT value=Add> </td> </tr> </table> </form> </body> </html> 2. Lu file v a ln server trong th mc chap6. 3. To mt file mi tn commit.php v nhp on m: <?php // COMMIT ADD $link = mysql_connect(localhost, bp5am, bp5ampass) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die ( mysql_error()); switch ($_GET[action]) { case add: switch ($_GET[type]) { case movie: $sql = INSERT INTO movie (movie_name, movie_year, movie_type, movie_leadactor, movie_director) VALUES ( . $_POST[movie_name] . , . $_POST[movie_year] . , . $_POST[movie_type] . ,

- 141 -

. $_POST[movie_leadactor] . , . $_POST[movie_director] . ); break; } break; } if (isset($sql) && !empty($sql)) { echo <!-- . $sql . -->; $result = mysql_query($sql) or die(Invalid query: . mysql_error()); ?> <p align=center style=color:#FF0000> Done. <a href=index.php>Index</a> </p> <?php } ?> 4. Lu file vo th mc chap6. 5. M trnh duyt trang index.php v click ADD tip theo phn u ca bng movie. Kt qu nh Hnh 6.3.1

Hnh 6.3.1

6. Thm 1 movie named Test vi kiu t do, din vin, v o din nh Hnh 6.3.2
- 142 -

Hnh 6.3.2

7. Click vo nt add bn s thy nh Hnh 6.3.3

Hnh 6.3.3

Cch thc lm vic Form HTML cho php bn iu khin cch ngi dng nhp d liu. Mt nt submit, form gi thng tin n server m PHP c th s dng chung v chy cu lnh SQL INSERT. Nh bn thy trong vic chn film trong movie.php, bn c 4 combo boxes v mt vng Text. Ni dung vng text c nhp t do, nhng combox th hon ton theo ch dn. Chng ta hy xem li ni dung ca combox t ni dung c s d liu. Trc tin, chng ta hy th trong combox. Mi danh sch combox biu din mt ngi. <?php $link = mysql_connect(localhost, root, ) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link)

- 143 -

or die ( mysql_error()); $peoplesql = SELECT * FROM people; $result = mysql_query($peoplesql) or die(Invalid query: . mysql_error()); while ($row = mysql_fetch_array($result)) { $people[$row[people_id]] = $row[people_fullname]; } ?> Vo lc bt u tp lnh, bn truy vn bng ngi v t ni dung ca n trong mng. D liu ngi lu tr trong bng ngi. Danh sch chung ca ngi, bn truy vn c s d liu n gin, ly li tt c nhng g lin quan n ngi trong h thng v hin th tn trong combox v chuyn n kha chnh nh gi tr mc. Mi ngi c bit s c mt mc trong combox. <select name=movie_director> <option value= selected>Select a director...</option> <?php foreach ($people as $people_id => $people_fullname) { ?> <option value=<?php echo $people_id; ?> ><?php echo $people_fullname; ?></option> <?php } ?> </select> y bn s dng c php foreach i n tt c cc chn la trong mng. Loi phim tng quan trong combobox, iu ny thun tin hn cho vic s dng ni dung SQL chung. Bn dng li on m ny to ra mt form c c im chung thm v chnh sa, v th bn cn phi hiu chi tit v vic ny. <select id=game name=movie_type style=width:150px>

- 144 -

<?php $sql = SELECT movietype_id, movietype_label . FROM movietype ORDER BY movietype_label; $result = mysql_query($sql) or die(<font color=\#FF0000\>Query Error</font> . mysql_error()); while ($row = mysql_fetch_array($result)) { echo <option value= . $row[movietype_id] . > . $row[movietype_label] . </option> . \r\n; ?> </select> on m ny to ra nhng la chn trong combobox bng bng truy vn movietype trch ra cc loi phim c sn. Mi la chn s c mt kiu id nh mt gi tr v loi phim m t n l mt nhn. Form sn sng, bn cn c mt tp lnh s dng c s d liu to ra cc mu tin. Nh bn c th thy switch case on $_GET[action] th lc ny hon ton khng s dng. Trong bi tp tip theo bn thm vo nhiu on m trong tp lnh movie.php, v vy bn c th s dng n chnh sa phim .

6.4. Xa mt mu tin
Xa mt mu tin th d dng. Nh cp t trc, lun phi kim tra truy vn trong c s d liu th nghim. Vic xa mt mu tin trong c s d liu th nghim khng bao gi l mi e da cho h thng ca bn. V vic kim tra truy vn gip bn tm ra nhng li SQL trc khi xa tt c cc mu tin trong c s d liu bi v bn qun mt vi th nh cu lnh WHERE. MySQL xa nhng th tha cu lnh SQL. Xa c ngha l mt d liu. xa mt mu tin bn cn bit v tr ca mu tin trong c s d liu thng qua mt tp hp cc cu lnh iu kin WHERE. Mi ln cu lnh c thc thi mu tin s b xa, khng th quay li. Mu tin b xa khng hy vng tr li. y l iu cn lu khi s dng cu lnh DELETE. V d: Xa mu tin n gin

- 145 -

Trc khi bo PHP xa mi th, bn nn th xa mt mu tin t phpMyAdmin vi cu lnh DELETE. 1. M phpMyAdmin v nhp on m sau: DELETE FROM movie WHERE movie_id = 12 LIMIT 1 2. phpMyAdmin tr li thng bo rng bn xa mt mu tin t bng Cch thc hot ng Cu lnh DELETE SQL s dng rt n gin, bn s dng cu lnh LIMIT 1 gii hn xa mt mu tin. Mt c s d liu thng cha nhng mu tin lin quan vi nhau trong nhng bng khc nhau. Xa mt vi mu tin khng xem xt quan h ca chng, lm cho bn kh hiu. Khng may l MySQL khng duy tr tnh ton vn. trnh vn ny bn c th dng form phc tp hn ca cu lnh DELETE,Cascade Delete, nh cp trong phn sau V d:Cascade Delete By gi bn bit cch s dng DELETE, bn s thm n vo h thng xa thng tin mt ngi t h thng. Khi bn lu tr quan h mt ngi trong bng movie, bn cn cp nht ni dung ca bng, v vy bn khng cn xa nhng g lin quan ti ngi. Xa mt ngi ging nh cch m kha xe v mong i bi gi xe trng. Bn cn chc chn khng lin quan n vic xa cc mu tin cn li. Sau y l nhng bc thc thi Cascade Delete: 1. To mt file mi vi tn delete.php v nhp on m sau: <?php $link = mysql_connect(localhost, bp5am, bp5ampass) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die ( mysql_error()); // DELETE SCRIPT

- 146 -

if (!isset($_GET[do]) || $_GET[do] != 1) { ?> <p align=center style=color:#FF0000> Are you sure you want to delete this <?php echo $_GET[type]; ?>?<br> <a href=<?php echo $_SERVER[REQUEST_URI]; ?>&do=1>yes</a> or <a href=index.php>Index</a> </p> <?php } else { if ($_GET[type] == people) { // Xa nhng g lin quan n ngi trong bng movie // Xa nhng g lin quan n lnh o din vin $actor = UPDATE movie SET movie_leadactor = 0 WHERE movie_leadactor = . $_GET[id] . ; $result = mysql_query($actor) or die(Invalid query: . mysql_error()); // Xa nhng g lin quan n o din $director = UPDATE movie SET movie_director = 0 WHERE movie_director = . $_GET[id] . ; $result = mysql_query($director) or die(Invalid query: . mysql_error()); } // SQL chung $sql = DELETE FROM . $_GET[type] . WHERE . $_GET[type] . _id = . $_GET[id] .

- 147 -

LIMIT 1; // xut SQL cho mc ch echo <!-- . $sql . -->; $result = mysql_query($sql) or die(Invalid query: . mysql_error()); ?> <p align=center style=color:#FF0000> Your <?php echo $_GET[type]; ?> has been deleted. <a href=index.php>Index</a> </p> <?php } ?> 2. Lu delete.php vo th mc chap6. 3. M index.php trn trnh duyt. bn s thy DELETE nhng lin kt tip sau mi film hoc ngi nh Hnh 6.4.1

Hnh 6.4.1

4. Th xa film m bn thm vo bi tp trc bi vic click vo lin kt DELETE trn hng Test movie name. Bn s thy nh Hnh 6.4.2 .

- 148 -

Hnh 6.4.2

5. Click vo lin kt yes xc nhn vic xa v i thng bo xc nhn nh Hnh 6.4.3

Hnh 6.4.3

Cch thc hot ng y l k hoch tiu dit 1 tp hp v ti ca d liu. t n sang mt bn, chng ta hay xem tp lnh ny hot ng nh th no. u tin, bn cn hiu rng bn khng th xa mu tin trong c s d liu v phi qun chng i. Vic xa c xem xt cn thn. V d nu xa mt ngi t bng people, iu ny ngn cn bn t vic tm ra mt kh nng c lin quan n ngi trong bng movie. Nu bn xa Jim Carrey t bng people, ai s lnh o din vin Bruce Almight? Nu bn khng lm mi th, id ca Jim Carreys s cn li trong mu tin v bn s c mt c s d liu b sa i. Bn khng mun iu ny ng khng (cu tr li l khng)

- 149 -

gii quyt vn ny th chc rng bn lun c mt kha ngoi trong mu tin. Trong on m sau bn cp nht bng film vi gi tr 0 trc khi xa mu tin people. iu ny cng cho php bn kin tra cch hot ng ca cu lnh UPDATE SQL. // xa phn lin quan n lnh o din vin $actor = UPDATE movie SET movie_leadactor = 0 WHERE movie_leadactor = . $_GET[id] . ; $result = mysql_query($actor) or die(Invalid query: . mysql_error()); // xa phn lin quan n o din $director = UPDATE movie SET movie_director = 0 WHERE movie_director = . $_GET[id] . ; $result = mysql_query($director) or die(Invalid query: . mysql_error()); Trong on m trc, t bt k mt vng no trong bng movie m c th cha mt iu ri ro cho bn, khi bn xa mt ngi. Cu lnh UPDATE lm vic mt cch n gin. N t nhng vng l thuyt vi nhng gi tr l thuyt mi trong tt c cc mu tin theo nhu cu ca cu lnh WHERE. Bn c th hi iu g s xy ra nu mt ngi qun i phn WHERE. iu ny s cp nht tt c nhng mu tin trong bng, m c th khng c mt th g bn mun lm trong thc t . Th t xa // pht sinh SQL $sql = DELETE FROM . $_GET[type] . WHERE . $_GET[type] . _id = . $_GET[id] . LIMIT 1; // Xut SQL cho mc ch bin dch echo <!-- . $sql . -->; $result = mysql_query($sql) or die(Invalid query: . mysql_error());

- 150 -

Truy vn DELETE l mt n v ng, nhng n kh d hiu. Bn khng mun m ha cu lnh SQL cho mi loi. V vy bn s dng thng tin thng qua vic truyn bin trong URL pht sinh ra cu lnh SQL. Bng v vng kha chnh c pht sinh linh hot t loi mc xa.

6.5. Sa d liu trong mu tin


C d liu trong c s d liu l mt vic tt, nhng d liu c kh nng nhn r chnh n v c khuynh hng cp nht. cp nht d liu bn cn nhn bit d liu cp nht v h thng ngi s dng hin ti vi giao din tt. Vic s dng giao din tng t nh vic to d liu thng l mt thc tin tt. V d:Sa i mt Movie Trong v d ny, bn to ra mt tp lnh m c th sa i mt b phim. Bn s xy dng trn movie.php . 1.M movie.php v nhp m lnh <?php $link = mysql_connect(localhost, root, ) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die ( mysql_error()); $peoplesql = SELECT * FROM people; $result = mysql_query($peoplesql) or die(Invalid query: . mysql_error()); while ($row = mysql_fetch_array($result)) { $people[$row[people_id]] = $row[people_fullname]; } switch ($_GET[action]) { case edit: $moviesql = SELECT * FROM movie WHERE movie_id = . $_GET[id] . ; $result = mysql_query($moviesql) or die(Invalid query: . mysql_error());
- 151 -

$row = mysql_fetch_array($result); $movie_name = $row[movie_name]; $movie_type = $row[movie_type]; $movie_year = $row[movie_year]; $movie_leadactor = $row[movie_leadactor]; $movie_director = $row[movie_director]; break; default: $movie_name = ; $movie_type = ; $movie_year = ; $movie_leadactor = ; $movie_director = ; break; } ?> <html> <head> <title><?php echo $_GET[action]; ?> movie</title> <style type=text/css> TD{color:#353535;font-family:verdana} TH{color:#FFFFFF;font-family:verdana;background-color:#336699} </style> </head> <body> <form action=commit.php?action=<?php echo $_GET[action]; ?>&type=movie&id=<?php echo $_GET[id]; ?> method=post> <table border=0 width=750 cellspacing=1 cellpadding=3 bgcolor=#353535 align=center> <tr>

- 152 -

<td bgcolor=#FFFFFF width=30%>Movie Name</td> <td bgcolor=#FFFFFF width=70%> <input type=text name=movie_name value=<?php echo $movie_name; ?>> </td> </tr> <tr> <td bgcolor=#FFFFFF>Movie Type</td> <td bgcolor=#FFFFFF> <select <?php $sql = SELECT movietype_id, movietype_label . FROM movietype ORDER BY movietype_label; $result = mysql_query($sql) or die(<font color=\#FF0000\>Query Error</font> . mysql_error()); while ($row = mysql_fetch_array($result)) { if ($row[movietype_id] == $movie_type) { $selected = selected; } else { $selected = ; } echo <option value= . $row[movietype_id] . . $selected.> . $row[movietype_label] . </option> . \r\n; } ?> id=game name=movie_type style=width:150px>

- 153 -

</select> </td> </tr> <tr> <td bgcolor=#FFFFFF>Movie Year</td> <td bgcolor=#FFFFFF> <select name=movie_year> <option value= selected>Select a year...</option> <?php for ($year = date(Y); $year >= 1970; $year--) { if ($year == $movie_year) { $selected = selected; } else { $selected = ; } ?> <option value=<?php echo $year; ?><?php echo $selected; ?>><?php echo $year; ?></option> <?php } ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF>Lead Actor</td> <td bgcolor=#FFFFFF> <select name=movie_leadactor> <option value= selected>Select an actor...</option>

- 154 -

<?php foreach ($people as $people_id => $people_fullname) { if ($people_id == $movie_leadactor) { $selected = selected; } else { $selected = ; } ?> <option value=<?php echo $people_id; ?><?php echo <?php } ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF>Director</td> <td bgcolor=#FFFFFF> <select name=movie_director> <option value= selected>Select a director...</option> <?php foreach ($people as $people_id => $people_fullname) { if ($people_id == $movie_director) { $selected = selected; } else { $selected = ; } ?> $selected; ?>><?php echo $people_fullname; ? ></option>

- 155 -

<option value=<?php echo $people_id; ?><?php echo $selected; ?>><?php echo $people_fullname; ? ></option> <?php } ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF colspan=2 align=center> <input type=submit name=SUBMIT value=<?php echo $_GET[action]; ?>> </td> </tr> </table> </form> </body> </html> 2. M tp lnh commit.php v thay i ni dung nh sau: <?php // COMMIT ADD AND EDITS $link = mysql_connect(localhost, bp5am, bp5ampass) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die ( mysql_error()); switch ($_GET[action]) { case edit: switch ($_GET[type]) {

- 156 -

case movie: $sql = UPDATE movie SET movie_name = . $_POST[movie_name] . , movie_year = . $_POST[movie_year] . , movie_type = . $_POST[movie_type] . , movie_leadactor = .$_POST[movie_leadactor]., movie_director = . $_POST[movie_director] . WHERE movie_id = . $_GET[id] . ; break; } break; case add: switch ($_GET[type]) { case movie: $sql = INSERT INTO movie (movie_name, movie_year, movie_type, movie_leadactor, movie_director) VALUES ( . $_POST[movie_name] . , . $_POST[movie_year] . , . $_POST[movie_type] . , . $_POST[movie_leadactor] . , . $_POST[movie_director] . ); break; } break; }

- 157 -

if (isset($sql) && !empty($sql)) { echo <!-- . $sql . -->; $result = mysql_query($sql) or die(Invalid query: . mysql_error()); ?> <p align=center style=color:#FF0000> Done. <a href=index.php>Index</a> </p> <?php } ?> 3. By gi m http://localhost/chapter6/index.php hin th nh Hnh 6.6.1

Hnh 6.6.1

4. Th click lin kt EDIT Bruce Almighty movie, thay i mt vi th trong hp v tn film, n nt edit s hin th nh Hnh 6.6.2

- 158 -

Hnh 6.6.2

5. Edit Bruce Almighty nhn li vi th tc trong bc 4, v n nh li nh c. By gi lin kt EDIT cho film, bn thy rng tp lnh lu tr gi tr v cho php sa i d liu d dng Cch thc lm vic on m commit.php ging vi nhng g bn thy. Nhng c mt pht trin cn quan tm trong movie.php. Chng ta hy nhn vo mt vi chi tit u tin hy nhn vo switch phn u ca tp lnh. Bn nh ngha mt switch trn mt chui truy vn tham s tn action. Nu action l edit, bn truy vn c s d liu cho mt mu tin tng ng n id l thuyt trong chui truy vn tham s id v t mt vi bin. Nhng bin ny c t trnh action khng l edit.. switch ($_GET[action]) { case edit: $moviesql = SELECT * FROM movie WHERE movie_id = . $_GET[id] . ; $result = mysql_query($moviesql) or die(Invalid query: . mysql_error()); $row = mysql_fetch_array($result); $movie_name = $row[movie_name]; $movie_type = $row[movie_type]; $movie_year = $row[movie_year]; $movie_leadactor = $row[movie_leadactor];
- 159 -

$movie_director = $row[movie_director]; break; default: $movie_name = ; $movie_type = ; $movie_year = ; $movie_leadactor = ; $movie_director = ; break; } ?> Nhng bin t trong on m trc thng t gi tr mc nh ca vng form. Mi vng c mt gi tr nu nh bn chnh sa mt mu tin v c mt gi tr trng nu nh bn to mt mu tin. <tr> <td bgcolor=#FFFFFF width=30%>Movie Name</td> <td bgcolor=#FFFFFF width=70%> <input type=text name=movie_name value=<?php echo $movie_name; ?>> </td> </tr> Trong v d ny, vng movie_name ly ni dung bin $movie_name nh mt gi tr mc. iu ny cho php bn np li vi mu tin c chnh sa. Vic sa i vn bn th d dng. Sa i gi tr trong mt danh sch l mt chuyn khc. Bn khng th hin th danh sch v hi vng ngi dng s t li gi tr gc khi anh ta hoc c ta sa mu tin. Bn cn phi np li hon ton danh sch v t gi tr trc nh mc nh trong danh sch, v vy ngi dng c th b qua n nu khng mun thay i n. Lm iu ny nh th no? <tr> <td bgcolor=#FFFFFF>Movie Type</td>

- 160 -

<td bgcolor=#FFFFFF> <select id=game name=movie_type style=width:150px> <?php $sql = SELECT movietype_id, movietype_label . FROM movietype ORDER BY movietype_label; $result = mysql_query($sql) or die(<font color=\#FF0000\>Query Error</FONT> . mysql_error()); while ($row = mysql_fetch_array($result)) { if ($row[movietype_id] == $movie_type) { $selected = selected; } else { $selected = ; } echo <option value= . $row[movietype_id] . . $selected . > . $row[movietype_label] . </option> . \r\n; } ?> </select> </td> </tr> Bn np vo danh sch nh bn s lm nu bn thm mt mu tin, nhng bn so snh gi tr hin hnh vi gi tr mc nh. Nu chng ng th thm c n gin SELECTED la chn. Vic ny t danh sch gi tr mc nh n gi tr hin hnh trong bng. if ($row[movietype_id] == $movie_type) { $selected = selected;

- 161 -

} else { $selected = ; }

- 162 -

Chng 7:

THAO TC V TO HNH NH VI PHP

Chng ny bao gm nhng phn sau: C th vi t PHP bao gm c th vin GD. Cho php ngi dng a hnh nh ca h ln. Nhn li thng tin v hnh nh nh loi, kch thc. To mt hnh nh mi. Sao chp mt nh hoc mt phn ca nh. To thumbnails(phin bn thu nh ca nh). To mt phin bn nh trng en. Thm hoa vn v tn cho hnh.

7.1. Lm vic vi th vin GD


GD c vit bng C++ v cho php thao tc vi hnh nh hin ti. Bi v PHP khng th t ng x l hnh nh vi vic xy dng hm. Cn chc chn rng bn c th vin GD. May thay, Trong tt c cc phin bn ca PHP gn y c h tr mt gi th vin ny. Nu bn khng c gi ny bn c th tm n ti http://www.boutell.com/gd/.
188H

Tuy nhin chng ti khuyn rng : bn s dng gi ny tng phn vi nhng phin bn c sn bn ngoi c ti v nu c th.

7.1.1.

Ti c th s dng loi files g vi GD v PHP?

GD c th lm vic vi v s hnh nh, nhng khi bn s dng n vi PHP, bn c th nh dng hnh nh vi bt k loi no nh GIF, JPG, PNG, SWF, SWC, PSD, TIFF, BMP, IFF, JP2, JPX, JB2, JPC, XBM hoc WBMP. Bn c th thao tc v to hnh nh vi nh dng GIF, JPG, PNG, WBMP, v XBM. GD cng cho php PHP to hnh dng nh hnh vung, hnh a gic, hnh elp, tt nh nhng hp vn bn s dng ng kiu Fonts. Ph thuc vo phin bn ca GD, GIF c th hoc l khng th h tr. Nu GIF c th h tr vi vic s dng hm gd_info din t trong phn v d kim tra GD.

- 163 -

7.1.2.

Bin dch PHP vi GD

Nu bn s dng mt Web ch, tnh c chng c sn GD trong ci t PHP. Nu bn chy trong my ca bn, c th GD khng sn sng. Trong Window, d dng tm thy dng sau trong file php.ini;extension=php_gd2.dll Khng ch ging vi dng:extension=php_gd2.dll Bn cn khi ng li Apache lm cho thay i c hiu lc. Trong Linux, bn cn chn cu hnh --with-gd cho GD. Mc khc, bi v gi phin bn ca GD yu cu dng vi PHP, bn khng cn nhn dng th mc ci t GD. N c mc nh V d: Kim tra GD M trnh san tho v nhp on code <?php print_r(gd_info()); ?> Lu vi tn gdtest.php (a n ln web server nu cn). M trnh duyt bn s thy kt qu nh sau:Hnh 7.1

Hnh 7.1

Cch thc hot ng: Hm gd_info th hon ton hu ch, bi v phin bn GD c ng gi vi PHP. Mc ch ca n l t tt c cc thng tin v phin bn GD vo trong mt mng m bn c th xem li sau .Vic ny khng ch p ng nh kim tra chc chn rng PHP vi GD th vn hnh tt vi mi th khc. Nhng n cho php bn thy gii hn ca bn cho vic s dng GD trong PHP. p ng mc ch trong v d ca chng ny bn cn c h tr JPG,GIF v PNG. Nu phin bn ca Gd khng h tr bt c loi hnh nh
- 164 -

no th bn cn nng cp. Bn c th tm hng dn nng cp dy v tp lnh mc ngun ti http://www.boutell.com/gd.


189H

Hm print_r() ly tt c cc thng tin lu tr trong mt bin(bao gm mng) v xut n ln trnh duyt, do bn c th thy n. By gi bn bit GD th lm vic tt v loi hnh nh no s c h tr

7.2. Cho php ngi dng a hnh nh ln


PHP cho php ngi dng a hnh nh ln server. Bn cn s gip ca MySQL lu tr hnh nh v tt c cc thng tin v hnh nh. V d: To mt bng hnh nh: Trc tin bn cn to mt bng lu tr thng tin v nhng hnh nh. Bn s lu tr thng tin c bn v mi hinh nh tn, ta ca hnh. Sau , cho ngi s dng mt form m ngi dng c th submit mt hnh hin trn website. Bn s hi mt vi thng tin c bn v hnh. Sau bn cho php ngi s dng a file trc tip t tin nghi trnh duyt him c ca h, khng cn s vin tr ca bt c phm mm FPT no. Nu bn khng c mt th mc cho hnh nh nh ca bn. Bn cn to mt th mc. trong bi tp ny, hnh nh s c lu tr. M trnh son tho nhp on m sau: <?php //Kt ni c s d liu $link = mysql_connect(localhost, root, ) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die (mysql_error()); //To bng images $sql = CREATE TABLE IF NOT EXISTS images ( image_id INT(11) NOT NULL AUTO_INCREMENT, image_caption VARCHAR(255) NOT NULL, image_username VARCHAR(255) NOT NULL, image_date DATE NOT NULL, PRIMARY KEY (image_id) );
- 165 -

$results = mysql_query($sql) or die(mysql_error()); echo Image table successfully created.; ?> Lu vi tn create_images_table.php. M trnh duyt v bn s thy thng bo Image table successfully created. M trnh son tho nhp on m sau: <html> <head> <title>Upload your pic to our site!</title> </head> <body> <form name=form1 method=post action=check_image.php enctype=multipart/form-data> <table border=0 cellpadding=5> <tr> <td>Image Title or Caption<br> <em>Example: You talkin to me?</em></td> <td><input name=image_caption type=text id=item_caption size=55 ngth=255></td> </tr> <tr> <td>Your Username</td> <td><input name=image_username type=text id=image_username size=15 maxlength=255></td> </tr> <td>Upload Image:</td> <td><input name=image_filename type=file id=image_filename></td>

- 166 -

</tr> </table> <br> <em>Acceptable image formats include: GIF, JPG/JPEG, and PNG.</em> <p align=center><input type=submit name=Submit value=Submit> &nbsp; <input type=reset name=Submit2 value=Clear Form> </p> </form> </body> </html> Lu file upload_image.htm. Trong v d n gin ny bn khng c mt m lnh PHP no trong form, v vy bn khng cn phn m rng l .php To mt file mi v nhp on m sau: <?php //Kt ni c s d liu $link = mysql_connect(localhost, root, ) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die (mysql_error()); //lm vic vi bin c sn $image_caption = $_POST[image_caption]; $image_username = $_POST[image_username]; $image_tempname = $_FILES[image_filename][name]; $today = date(Y-m-d); //a hnh nh ln v kim tra loi hnh nh //Thay i ng dn n th mc hnh nh $ImageDir =c:/Program Files/Apache Group/Apache2/test/images/;

- 167 -

$ImageName = $ImageDir . $image_tempname; if(move_uploaded_file($_FILES[image_filename][tmp_name], $ImageName)) { //ly thng tin v hnh nh ang a ln list($width, switch ($type) { case 1: $ext = .gif; break; case 2: $ext = .jpg; break; case 3: $ext = .png; break; default: echo Sorry, but the file you uploaded was not a GIF, JPG, or . PNG file.<br>; echo Please hit your browsers back button and try again.; } //insert info into image table $insert = INSERT INTO images (image_caption, image_username, image_date) VALUES ($image_caption, $image_username, $today); $insertresults = mysql_query($insert) or die(mysql_error()); $height, $type, $attr) = getimagesize($ImageName);

- 168 -

$lastpicid = mysql_insert_id(); $newfilename = $ImageDir . $lastpicid . $ext; rename($ImageName, $newfilename); } ?> <html> <head> <title>Here is your pic!</title> </head> <body> <h1>So how does it feel to be famous?</h1><br><br> <p>Here is the picture you just uploaded to our servers:</p> <img src=images/<?php echo $lastpicid . $ext; ?> align=left> <strong><?php echo $image_name; ?></strong><br> This image is a <?php echo $ext; ?> image.<br> It is <?php echo $width; ?> pixels wide and <?php echo $height; ?> pixels high.<br> It was uploaded on <?php echo $today; ?>. </body> </html> Lu file vi tn check_image.php. M upload_image.htm trn trnh duyt. Kt qu nh hnh 7.2.2

Hnh 7.2.2

- 169 -

a hnh nh ln, bn s thy nh Hnh 7.2.3

Hnh 7.2.3

Cch thc lm vic Trong upload_image.htm, bn cho HTML mt sc mnh tm vng a ca ngi dng vi nt Browse, n gin bng cch thm enctype n thuc tnh form: <form name=form1 method=post action=check_image.php enctype=multipart/form-data> Sau bn c mt vi vng nhp, bao gm vng nhp file,ly file v gi n n server, trong mt vng tm thi. Sau , trong check_image.php, bn c nhiu th khc nhau tip tc. u tin bn kt ni c s d liu v to nhng bin d dng cp nht trong tp lnh ca bn. Tip theo bn nh ngha th mc cha tt c cc hnh v tn hnh. Chng nhn vo dng c bit ny $image_tempname = $_FILES[image_filename][name]; Bn c th s dng nhiu phng php khc nhau khi x l hnh nh. Nu bn ngh bn s c mt s file cho mi ngi dng. Bn c th to th mc cho mi ngi, sau chuyn hnh nh cho mi th mc. Trong v d ny, bn gi tt c hnh nh trong mt th mc ln. Khng quan tm n cu trc th mc bn chn, bn nn p dng mt vi kim tra cho nhng tn file ging nhau.

- 170 -

Trong trng hp ny, bn i tn nhng tn file ging nhau nh gn cho n mt ID duy nht. bo m l mi file s c mt tn duy nht, khng c vn g nu hai ngi a vo mt tn file photo1.jpg. Do bn s ly tn file tm thi m n c a ln bng cch s dng bin $image_tempname, v i tn n mt ln na, n c a ln thnh cng v c chn vo bng ca bn, s dng bin $newfilename m bn thy trong tp lnh. K tip bn kim tra chc rng file c a ln thnh cng vi dng sau. if (move_uploaded_file($_FILES[image_filename][tmp_name], $ImageName)) Hm move_uploaded_file chuyn mt file uploaded t hnh gc c cung cp bi ngi dng, gn tmp_name bi my ch n ch cui cng, $ImageName. N th quan trng bao gm bc tmp_name trong tp lnh ca bn, ch rng bn khng lm bt k mt ci g vi gi tr trong bin ny, n c a ra bi my ch. Gi tr th n t bn nhng n quan trng, bn khng t tn n v sau bin c chuyn n. Bc tip theo l ly thng tin v file c a ln. Trong v d bn ch cho php nhiu file hot ng vi phin bn hin hnh ca PHP/GD. Bao gm file GIF, JPG, v PNG. Tt c cc file ny th d dng thao tc trong PHP cng nh WPMP. WBMP khng ging nh mt file trong Window Bitmap, N l file Wireless Bitmap, s dng trong Palm Pilots. Vo lc vit PHP/GD khng c thao tc trn file BMP. Bn cn mt ng dng khc nh ImageMagick i file BMP thnh GIF, JPG, or PNG. Nu bn mun lm vic vi chng m dng PHP/GD. Hm getimagesize cho bn thng tin v chiu di, chiu rng v loi hnh nh v cho nhng file JPG, n c th cho bn s knh v s n v. N a ra thng tin trong mt mng m bn cp nht dng hm list: list($width, $height, $type, $attr) = getimagesize($ImageName); Chiu rng v chiu cao ca hnh nh th tr v s nguyn. Loi file th tr v mt s nguyn vi kha di y 1 GIF 2 JPG 3 PNG 9 JPC 10 JP2 11 JPX

- 171 -

4 SWF 5 PSD 6 BMP 7 TIFF (Intel byte order) 8 TIFF (Motorola byte order) V d width=640 height=480

12 JB2 13 SWC 14 IFF 15 WBMP 16 XBM

Bin $attr cha chiu rng v chiu cao m bn s dng trong th hnh HTML

Tr v tp lnh s dng switch lc ra nhng loi hnh nh khng s dng switch ($type) { case 1: $ext = .gif; break; case 2: $ext = .jpg; break; case 3: $ext = .png; break; default: echo Sorry, but the file you uploaded was not a GIF, JPG, or . PNG file.<br>; echo Please hit your browsers back button and try again.; } Bn gn file m rng da vo loi file v bn s cn c nhng thng tin c sn khi bn i tn file. Nu file a ln khng thch hp vi bt k trng hp no ca bn th p dng mc nh. V ngi c s thy cu Sorry, but the file you uploaded was not a GIF, JPG or PNG file. Vi cch ny bn c th lc ra nhng file khng c chp nhn m vn a ln. Sau bn chn thng tin vo bng nh on m di y;

- 172 -

//chn thng tin vo bng $insert = INSERT INTO images (image_caption, image_username, image_date) VALUES ($image_caption, $image_username, $today); $insertresults = mysql_query($insert) or die(mysql_error()); $lastpicid = mysql_insert_id(); Sau bn t li tn file trnh xung t trong tng lai s dng ID tng t ng ca hnh nh; $newfilename = $ImageDir . $lastpicid . $ext; rename($ImageName, $newfilename);

7.3. Chuyn i loi file hnh nh


C mt vi ch v cch chn hnh nh ca bn khi da n n vi ngi dng. Hy nhn vo dng sau: <img src=images/<?php echo $lastpicid . $ext; ?> align=left> bn s dng hai bin $lastpicid v $ext iu chnh tn hnh nh ca bn. Bn c ch rng, thng tin khng c lu tr bt c ni no trong bng hnh nh khng? Bn s cp nht li hnh nh nh th no khi thng tin trong bin ht hiu lc. Bn c th cp nht phn u tin ca tn file, bi v n ging nh image_id. Bn bit v phn m rng ca file nh th no, nu n khc nhau cho mi hnh. Bn c th lm mt trong 3 bin php cu cha ny: 1.Thm vo mt vng trong bng hnh nh cho php lu tr y tn hnh nh. 2. Thm vo mt vng trong bng hnh nh cho php lu tr phn m rng.
3. Chuyn i tt c hnh nh a vo thnh nhng loi file ging nhau v c phn

m rng ging nhau. Chng ta s chn cch th 3. y, chng ta s thay i file check_image.php mt cch hp l. Bng cch to ra mt bn sao loi .jpg(trong 3 loi GIF, JPG, PNG) ch khng thay i bn. chuyn i loi file bn lm 4 bc sau:

- 173 -

1.To mt hnh nh GD-thn thin mi t hnh nh gc lm mt hnh nh ngun tm. 2. To mt hnh nh GD-thn thin rng lm mt hnh nh ch tm. 3. Sao chp hnh nh ngun mi n hnh nh ch mi. 4. Lu hoc xut ra hnh nh ch c thay i. 5. (Ty , nhng khuyn dng) xa hnh nh ngun tm v hnh nh ch tm. PHP c nhng hm cho cc file loi c bit cho bc 1 v 4(v d imagecreatefromgif, imagecreatefromjpg), v vy, iu quan trng l bn bit loi file no m bn ang lm vic vi n. V d: sp xp hp l tin trnh x l file ca bn cn thay i check_image.php nh sau: <?php //kt ni c s d liu $link = mysql_connect(localhost, root, ) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die (mysql_error()); //thm bin c sn $image_caption = $_POST[image_caption]; $image_username = $_POST[image_username]; $image_tempname = $_FILES[image_filename][name]; $today = date(Y-m-d); //a hnh nh v kim tra loi hnh nh $ImageDir =c:/Program Files/Apache Group/Apache2/test/images/; $ImageName = $ImageDir . $image_tempname; if (move_uploaded_file($_FILES[image_filename][tmp_name], $ImageName)) { //Ly thng tin v hnh nh a ln list($width, $height, $type, $attr) =

- 174 -

getimagesize($ImageName); //**Xa t dng ny switch ($type) { case 1: $ext = .gif; break; case 2: $ext = .jpg; break; case 3: $ext = .png; break; default: echo Sorry, but the file you uploaded was not a GIF, JPG, or . PNG file.<br>; echo Please hit your browsers back button and try again.; } //**kt thc xa //**thm nhng dng mi ny if ($type > 3) { echo Sorry, but the file you uploaded was not a GIF, JPG, or . PNG file.<br>; echo Please hit your browsers back button and try again.; } else { //Hng nh c th chp nhn //**kt thc vic chn //chn thng tin v bng hnh nh $insert = INSERT INTO images

- 175 -

(image_caption, image_username, image_date) VALUES ($image_caption, $image_username, $today); $insertresults = mysql_query($insert) or die(mysql_error()); $lastpicid = mysql_insert_id(); //thay i dng ny: $newfilename = $ImageDir . $lastpicid . .jpg; //**chn dng ny if ($type = = 2) { rename($ImageName, $newfilename); } else { if ($type = = 1) { $image_old = imagecreatefromgif($ImageName); } elseif ($type = = 3) { $image_old = imagecreatefrompng($ImageName); } //chuyn i hnh nh thnh jpg $image_jpg = imagecreatetruecolor($width, $height); imagecopyresampled($image_jpg, $image_old, 0, 0, 0, 0, $width, $height, $width, $height); imagejpeg($image_jpg, $newfilename); imagedestroy($image_old); imagedestroy($image_jpg); } $url = location: showimage.php?id= . $lastpicid; header($url);

- 176 -

//**kt thc dng chn } ?> <!-- DELETE THESE LINES <html> <head> <title>Here is your pic!</title> </head> <body> <h1>So how does it feel to be famous?</h1><br><br> <p>Here is the picture you just uploaded to our servers:</p> <img src=images/<?php echo $lastpicid . $ext; ?> align=left> <strong><?php echo $image_caption; ?></strong><br> This image is a <?php echo $ext; ?> image.<br> It is <?php echo $width; ?> pixels wide and <?php echo $height; ?> pixels high.<br> It was uploaded on <?php echo $today; ?>. </body> </html> END OF DELETED LINES--> M trnh son tho v nhp on m lu vi tn Showimage.php <?php //kt ni c s d liu $link = mysql_connect(localhost, root, ) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die (mysql_error()); //make variables available $id = $_REQUEST[id]; //get info on the pic we want

- 177 -

$getpic = mysql_query(SELECT * FROM images WHERE image_id = $id) or die(mysql_error()); $rows = mysql_fetch_array($getpic); extract($rows); $image_filename = images/ . $image_id . .jpg; list($width, $height, $type, $attr) = getimagesize($image_filename); ?> <html> <head> <title>Here is your pic!</title> </head> <body> <h1>So how does it feel to be famous?</h1><br><br> <p>Here is the picture you just uploaded to our servers:</p> <img src=<?php echo $image_filename; ?> align=left <?php echo $attr; ?> > <strong><?php echo $image_caption; ?></strong><br> It is <?php echo $width; ?> pixels wide a nd <?php echo $height; ?> pixels high.<br> It was uploaded on <?php echo $image_date; ?> by <?php echo $image_username; ?>. </body> </html> 3.Nu bn lu file, a ln trnh duyt, v a hnh nh ca bn, bn s ch rng v c bn ging nh mn hnh trc. Cch thc lm vic Hy nhn vo phn chnh m bn thm trong chng trnh ca bn. u tin chng ta s x l vi file JPG bi v chng sn sn trong nh dng m bn mun. if ($type == 2) { rename($ImageName, $newfilename);

- 178 -

y, nu file l file JPG, bn s i tn n thnh ID hnh nh ca bn cng vi phn m rng .jpg. Mc khc, nu file l GIF hoc PNG bn s dng hm thch hp x l chng. Bn kim tra thy nu file la JPG } else { if ($type = = 1) { $image_old = imagecreatefromgif($ImageName); imagecreatefromgif() l hm hp l, bi v hnh gc c ui GIF. Nu hnh l PNG th bn s dng hm imagecreatefrompng : } elseif ($type = = 3) { $image_old = imagecreatefrompng($ImageName); } By gi bn c hnh gc GD thn thin, bn cn n bc 2 to hnh nh ch tm. Bn lm iu ny trong dng tip theo $image_jpg = imagecreatetruecolor($width, $height); Bn s dng hm imagecreatetruecolor() to mu cho hnh. Bn mun kch thc ca hnh thay i bn s dng bin $width v $height c cha trong hm getimagesize. By gi bn chuyn sang bc 3 trong dng tip theo: imagecopyresampled($image_jpg, $image_old, 0, 0, 0, 0, $width, $height, $width, $height); Bn s dng hm imagecopyresampled quyt nh thuc tnh cho hnh. y hnh gc v hnh ch u bt u vi ta x,y vi chiu di v chiu rng ca mi hnh. Nu bn ch mun sao chep v tr ca hnh gc vo hnh ch bn co th dng ta v cc bin $width/$height. Tip theo, bn lu hnh nh bng dng sau: imagejpeg($image_jpg, $newfilename); y l ni tht s chuyn i, trc dng ny hnh tm c c im chung. Bn quyt nh lm file ch JPG vi hm imagejpeg. Bn cng c th s dng imagepng hoc imagegif, nhng mt ln na, bn mun lm vic vi JPG v phn ln nhng file bn load ln s c sao chp. Trong hm ny bn t ten file ngun tm v file ch lu

- 179 -

di. Quan trng bn cn c phn tn dng bin $newfilename, bn cng c th xa nhng hnh tm nh di y imagedestroy($image_old); imagedestroy($image_jpg); Trong bng tm tt, bn i tn file JPG thnh image_id.jpg, Hoc to mt bn sao v lu vi v lu file JPG vi tn image_id.jpg. Tp lnh cng xy dng li mt file mi showimage.php m ch yu l in thng tin m bn nhp vo c s d liu. iu khc bit l bn c th cp nht mi lc mi ni, v cho php ngi dng c th sa i.

7.4. Mu trng v en
By gi bn c th mc vi nhiu hnh nh. Nu mun cho php ngi dng lm nhng hnh nh thnh mu trng v en. Chng ta hy thm ty chn vo trang showimage, nh vy ngi dng c th chn l thy hay khng thy hnh nh trong grayscale.Banj s s dng hm imagefilter(), chuyn hnh nh ti grayscale. Hm ny cng c th lm nh ngc, chi, lm ni, m, lm nhn v mu ca hnh nh C th dng hm ny lm sch hoc to ra nhng phin bn mi nht ca nhng bc nh uploaded. V d:Thm Grayscale Trong bi tp ny, chng ta ch thm nhng c tnh imagefilter() vo v tr, cho php ngi dng ty chn thy hnh nh trong graycale 1.M file showimage.php v thay i nh sau: <?php //Kt ni c s d liu $link = mysql_connect(localhost, root, ) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die (mysql_error()); //Lm nhng bin c sn $id = $_REQUEST[id]; //**Nhng dng chn thm if (isset($_REQUEST[mode]))
- 180 -

{ $mode = $_REQUEST[mode]; } else { $mode = ; } //**Kt thc dng chn //To thng tin chng ta mun $getpic = mysql_query(SELECT * FROM images WHERE image_id = $id) or die(mysql_error()); $rows = mysql_fetch_array($getpic); extract($rows); $image_filename = images/ . $image_id . .jpg; list($width, $height, $type, $attr) = getimagesize($image_filename); ?> <html> <head> <title>Here is your pic!</title> </head> <body> <h1>So how does it feel to be famous?</h1><br><br> <!--INSERT THE FOLLOWING LINES: --> <?php if ($mode == change) { echo <font color=\CC0000\><em><strong>Your image has been modified.</strong></em></font>; echo <img src=\ . $image_filename . \ align=\left\ . $attr . >; } else { ?>

- 181 -

<!--END OF INSERTED LINES--> <p>Here is the picture you just uploaded to our servers:</p> <img src=<?php echo $image_filename; ?> align=left <?php echo $attr; ?> > <strong><?php echo $image_caption; ?></strong><br> It is <?php echo $width; ?> pixels wide and <?php echo $height; ?> pixels high.<br> It was uploaded on <?php echo $image_date; ?> by <?php echo $image_username; ?>. <!--INSERT THE FOLLOWING LINES:--> <?php //end the else } ?> <hr> <p><em><strong>Modifying Your Image</strong></em></p> <form action=modifyimage.php method=post> <p> Please choose if you would like to modify your image with any of the following options. If you would like to preview the image before saving, you will need to hit your browsers back button to return to this page. Saving an image with any of the modifications listed below <em>cannot be undone.</em> </p> <input name=id type=hidden value=<?php echo $image_id; ? >> <input name=bw type=checkbox>black &amp; white<br> <p align=center> <input type=submit name=action value=preview> <input type=submit name=action value=save> </p>

- 182 -

</form> <!--END OF INSERTED LINES--> </body> </html> 2. K n, ta to h s mi sa i hnh nh, lu vi file modify.php <?php //kt ni c s d liu $link = mysql_connect(localhost, root, ) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die (mysql_error()); //lm nhng bin c sn $id = $_POST[id]; if (isset($_POST[bw])) { $bw = $_POST[bw]; } else { $bw = ; } $action = $_POST[action]; //to thng tin bn mun $getpic = mysql_query(SELECT * FROM images WHERE image_id = $id) or die(mysql_error()); $rows = mysql_fetch_array($getpic); extract($rows); $image_filename = images/ . $image_id . .jpg; list($width, $height, $type, $attr) = getimagesize($image_filename);

- 183 -

$image = imagecreatefromjpeg($image_filename); if ($bw == on) { imagefilter($image, IMG_FILTER_GRAYSCALE); } if ($action == preview) { header(Content-type:image/jpeg); imagejpeg($image); } if ($action == save) { imagejpeg($image, $image_filename); $url = location:showimage.php?id=. $id . &mode=change; header($url); } ?>
3. Chng ta khng cn np d liu vo hnh khc, bi v chng ta khng thay i g

trong cc bc ca tin trnh. Chng ta hy vo http: // Localhost / showimage.php?


id = 1 , bn s thy nh hnh di y

Hnh 7.4.1

- 184 -

Nu xem trc hnh nh trng en, bn s thy mn hnh khng c g. C gng quay li v lu file trong mu trng en cng lc.

Hnh 7.4.2 N lm vic th no? Nu bn nhn nhng dng bn thm trong showiamge.php, bn thy nhng dng ny trc tin: //**Nhng dng chn thm if (isset($_REQUEST[mode])) { $mode = $_REQUEST[mode]; } else { $mode = ; } //**Kt thc dng chn Bn thm bin v trong modifyimage.php, bn gi n ngi dng quay li trang ny thy hnh nh ca h mi c sa. Bn mun gi cho h vi thng tin m cho php h ct gi thnh cng. <!--INSERT THE FOLLOWING LINES: --> <?php if ($mode == change) { echo <font color=\CC0000\><em><strong>Your image has been modified.</strong></em></font>;

- 185 -

echo <img src=\ . $image_filename . \ align=\left\ . $attr . >; } else { Bn thy : Your image has been modified . Bn thy hnh nh ln na, v th h thy hot ng thay i. Ngi dng nhn thy thng tin khi upload ln u tin. Nhng dng sau, cho php ngi dng ty chn trng en. <hr> <p><em><strong>Modifying Your Image</strong></em></p> <form action=modifyimage.php method=post> <p> Please choose if you would like to modify your image with any of the following options. If you would like to preview the image before saving, you will need to hit your browsers back button to return to this page. Saving an image with any of the modifications listed below <em>cannot be undone.</em> </p> <input name=id type=hidden value=<?php echo $image_id; ?>> <input name=bw type=checkbox>black &amp; white<br> <p align=center> <input type=submit name=action value=preview> <input type=submit name=action value=save> </p> </form> <!--END OF INSERTED LINES--> Chng ta mi to file modifileimage.php, cho n hng ny th mi th kh chun $image = imagecreatefromjpeg($image_filename); Bn c qu trnh 5 bc chuyn i, bn to ra mt GD_bn sao hnh nh thn thin ca hnh nh ngun, tip theo bn mun lm tt c nhng g to ra hnh nh thn thin nh thy di y if ($bw == on) {

- 186 -

imagefilter($image, IMG_FILTER_GRAYSCALE); } Bn quyt nh l gi hay khng gi nhng thay i, bng nhng dng code sau: if ($action == preview) { header(Content-type:image/jpeg); imagejpeg($image); } Nu bn ch xem trc hnh nh, bn gi trc tip n trnh duyt(c s dng bi hm iamgejpeg()). Nhng ti sao li gi u mc cho trnh duyt v ti sao li khng c HTML? Mt ln na v bn gi hnh nh trc tip, bn khng cn( v tht s khng th gi) bt k vn bn no vi hnh nh. Bn ch gi on thun hnh nh. Nu bn ch r kiu ni dung trong trang th trnh duyt s hiu l vn bn v bn c mt trang y rc. Bn phi thm vo u mc trnh duyt gii thch dng hnh nh chnh xc. V trnh duyt ang ch mt hnh nh, nu gi bt k mt vn bn km theo hnh nh no, cng gi thm u mc th bn s nhn c li. Nu ngi dng mun lu nhng thay i hnh nh v click vo save khi ang submit, bn phi thc hin nhng dng sau: if ($action == save) { imagejpeg($image, $image_filename); $url = location:showimage.php?id=. $id . &mode=change; header($url); } Ch vic s dng kiu bin( ngi s dng s thy thng tin vn bn khi trang a ln) v filename ch r trong hm imagejpeg(). Ch r filename n lu hnh nh tm trong thi gian di. Trong trng hp ny, n ghi ln file c sn, lm cho s chuyn i lu.

7.5. Thm nhng du


Mt nhm hm c bit cho php bn thm nhng du ( hoc ch thch mt bn quyn , mt vn bn khc). PHP/GD cho php bn thay i kiu phng v kch thc s dng, thm ch cho php bn ti phng theo yu cu. V d v vic thm vn bn trong hnh nh
- 187 -

Bn thay i file showimage.php v file modifyimage.php thy nhng du km theo hnh nh. 1. Xc nh v tr mc sau trong file showimage.php v thm nhng dng sau: <hr> <p><em><strong>Modifying Your Image</strong></em></p> <form action=modifyimage.php method=post> <p> Hy chn nu bn mun thay i hnh nh vi bt k la chn no di y. Nu mun xem hnh nh trc khi ct gi, bn cn nh nt back tr v trang ny. Lu hnh nh vi danh sch:<em>Khng th hy.</em> </p> <input name=id type=hidden value=<?php echo $image_id; ?>> <input name=bw type=checkbox>black & white<br> <!--INSERT THE FOLLOWING LINE--> <input name=text type=checkbox>embedded caption<br> <!--END OF INSERTED LINES--> <p align=center> <input type=submit name=action value=preview> <input type=submit name=action value=save> </p> </form> 2. Phng arial.ttf c dng trong bi tp ny, nhng bn nn dng phng c ci t trong my ch. Nu th chy phin bn m khng ci t phng trn my ch, s bo li. Trong file modifyimage.php, thm nhng dng sau: <?php //Kt ni c s d liu $link = mysql_connect(localhost, bp5am, bp5ampass) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die (mysql_error()); //Lm nhng bin c sn

- 188 -

$id = $_POST[id]; if (isset($_POST[bw])) { $bw = $_POST[bw]; } else { $bw = ; } $action = $_POST[action]; //**INSERT THE FOLLOWING LINES: if (isset($_POST[text])) { $text = $_POST[text]; } else { $text = ; } //**END OF INSERT //get info on the pic we want $getpic = mysql_query(SELECT * FROM images WHERE image_id = $id) or die(mysql_error()); $rows = mysql_fetch_array($getpic); extract($rows); $image_filename = images/ . $image_id . .jpg; list($width, $height, $type, $attr) = getimagesize($image_filename); $image = imagecreatefromjpeg($image_filename); if ($bw == on) { imagefilter($image, IMG_FILTER_GRAYSCALE); } //**INSERT THE FOLLOWING LINES: if ($text == on) { imagettftext($image, 12, 0, 20, 20, 0, arial.ttf, $image_caption); } //**END OF INSERT

- 189 -

if ($action == preview) { header(Content-type:image/jpeg); imagejpeg($image); } if ($action == save) { imagejpeg($image, $image_filename); $url = location:showimage.php?id=. $id . &mode=change; header($url); } ?>
4. Quay li trang http://localhost/showimage.php?id=1 v xem trc nh vi
190H

vicnhng du c c tnh kim tra. S thy nh Hnh 7.5.

Hnh 7.5 5. Bn c th d dng thm t ng nhng ch thch bn quyn hay bt k mt vn bn no trong nh. Cch thc hot ng. Trc tin, thm la chnnhng du trong showimage.php. Sau , thm hm imagettftext trong file modifyimage nh sau: //**Bt u chn: if ($text == on) { imagettftext($image, 12, 0, 20, 20, 0, arial.ttf, $image_caption); }

- 190 -

//**Kt thc chn Hm imagettftext() l mt trong nhiu hm vn bn/chui c sn trong PHP/GD. Hm to 8 gi tr: 1. Hnh nh ni chn vn bn ($image trong v d) 2. C phng vn bn(trong v d l 12) 3. S lun phin vn bn( trong v d l 0) 4. Ta X l v tr bt u ca vn bn, vi 0 l ranh gii( trong v d l 20) 5. Ta y l v tr bt u ca vn bn, vi 0 l ranh gii trn ca hnh nh( trong v d ny l 20) 6. Mu s dng (trong v d l 0, mu en) 7. Tn phng, c nh v t ng trong th mc phng mc nh( Trong v d ny l phng arial.ttf) 8. Chui vn bn c cho thy( Trong v d l bin image_option) Trong qu trnh lm nh phi in y 8 gi tr, nu khng s gp li)

7.6. Thm hnh m v kt hp hnh nh


Bi v bn ang thy nhng hnh nh trong Movie review Site, bn mun lm biu tng ng sau mi hnh, nh mt loi hnh m. Chng ta c th lm iu ny vi biu tng ca mnh bo v bt k hnh nh copy no. Trong v d ny, chng ta s ha trn 2 hnh (hnh ngun v hnh biu tng) to hiu ng. Chng ta thay i nh sau: V d : Trn 2 hnh Trn 2 hnh, bn cn thay i trong showimage.php v trong modifyimage.php 1. Thm vo nhng dng sau trong showimage.php, trong phn nh trc <input name=watermark type=checkbox>include Movie Review Site watermark<br> 2. Thm vo nhng dng sau trong modifyimage.php, nh trc //**Chn gn nh ca file if (isset($_POST[watermark])) { $watermark = $_POST[watermark]; } else
- 191 -

{ $watermark = ; } Sau thm vo nhng dng di y vo sau tp lnh if ($watermark == on) { $image2 = imagecreatefromgif(images/logo.gif); imagecopymerge($image, $image2, 0,0,0, 0, $width, $height, 15); } 3.Mc d khng c file logo.gif nhng bn c th s dng bt k file no bn thch, chc chn rng tp lnh c th tm thy. Bn s thy nh hnh 7.6 sau:

Hnh 7.6

Cch thc hot ng: Bn thm ty chn khc cho ngi dng, bn s dng hm imagecopymerge() trong modifyimage.php. Ch l trc khi ha trn hai hnh, phi lm hnh GD thn thin th hai bng vic to mt bn sao chp. V hnh nh ca bn l hnh GIF nn s dng hm imagecreatefromgif() Nguyn bn ca hm: imagecopymerge($image, $image2, 0,0,0, 0, $width, $height, 15); Nhng tham s trong hm imagecopymerge nh sau: 1. Tn ca hnh nh ti( Trong v d ny, dng bin $image, file $image thay i tt c v s thy cui ca nguyn bn) 2. Tn ca hnh ln hai hoc hnh ngun( Trong v d ny l $iamge)

- 192 -

3. Ta X ca hnh n( Trong v d ny l 0, i din cho ranh gii di) 4. Ta Y ca hnh nh n ( Trong v d ny l 0, i din cho ranh gii trn) 5. To X ca hnh th hai( Trong v d ny l 0) 6. Ta Y ca hnh th hai ( Trong v d ny l 0) 7. Chiu rng ca phn hnh th hai c trn(Trong v d ny dng bin $width, i din cho hnh th hai ph hp vi hnh n) 8. Chiu cao ca phn hnh nh th hai c ha trn( Trong v d ny, dng bin $height, i din cho hnh th hai ph hp vi hnh n) 9. Phn trm ca hai hnh, vi 100 ngha l hnh th hai hon ton ln hnh th nht (Trong v d ny l 15) Chng ta hy ni v s 7 v s 8. V hm imagecopymerge() c th ha trn mt phn hnh vi hnh khc, bn phi ch r bao nhiu hnh mun ha trn. Biu tng CBA th khng l, ln hn bc nh ngi dng. Bn ch mun trn phn nh ln bng bc nh ngi dng, m ti sao bn s dng $height v $width. Nu logo nh, bn ch r chiu rng v chiu cao ca chng, nu mun ha trn ton b nhng th vi hnh nh u tin.

7.7. To Thumbnails
Tt nhin, vic cho thy nhng hnh nh ca ngi dng th tt. Tuy nhin, n khng tt cho cuc trin lm hay mt danh sch hnh trong mt trang. Bn cn lm sao to ra thumbnail t ng ca mi file upload m bn s dng cho mc ch l mt phng trin lm tranh. V d v vic to Thumbnails Bn mun to t ng mt phin bn thumbnail tt c cc hnh m ngi dng upload, bn cn sa i check_image.php v bao gm hm: 1. To mt danh mc hnh nh con cho hnh nh. V d, bn to c:\Program Files\Apache Group\Apache2\images\thumbs, chc rng th mc c cho php. 2. Thay i check_image.php nh sau: <?php //Kt ni c s d liu $link = mysql_connect(localhost, bp5am, bp5ampass)
- 193 -

or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die (mysql_error()); //To nhng bin c sn $image_caption = $_POST[image_caption]; $image_username = $_POST[image_username]; $image_tempname = $_FILES[image_filename][name]; $today = date(Y-m-d); //a hnh nh ln v kim tra loi hnh nh $ImageDir = c:/Program Files/Apache Group/Apache2/test/images/; //**Chn $ImageThumb = $ImageDir . thumbs/; //**Kt thc chn $ImageName = $ImageDir . $image_tempname; if (move_uploaded_file($_FILES[image_filename][tmp_name], $ImageName)) { //get info about the image being uploaded list($width, $height, $type, $attr) = getimagesize($ImageName); if ($type > 3) { echo Sorry, but the file you uploaded was not a GIF, JPG, or . PNG file.<br>; echo Please hit your browsers back button and try again.; } else { //image is acceptable; ok to proceed //Chn thng tin vo bng hnh nh $insert = INSERT INTO images

- 194 -

(image_caption, image_username, image_date) VALUES ($image_caption, $image_username, $today); $insertresults = mysql_query($insert) or die(mysql_error()); $lastpicid = mysql_insert_id(); $newfilename = $ImageDir . $lastpicid . .jpg; if ($type == 2) { rename($ImageName, $newfilename); } else { if ($type == 1) { $image_old = imagecreatefromgif($ImageName); } elseif ($type == 3) { $image_old = imagecreatefrompng($ImageName); //convert the image to jpg $image_jpg = imagecreatetruecolor($width, $height); imagecopyresampled($image_jpg, $image_old, 0, 0, 0, 0, $width, $height, $width, $height); imagejpeg($image_jpg, $newfilename); imagedestroy($image_old); imagedestroy($image_jpg); } //**Bt u chn $newthumbname = $ImageThumb . $lastpicid . .jpg; //thit lp chiu cho thumbnail $thumb_width = $width * 0.10; $thumb_height = $height * 0.10;

- 195 -

//To thumbnail $largeimage = imagecreatefromjpeg($newfilename); $thumb = imagecreatetruecolor($thumb_width, $thumb_height); imagecopyresampled($thumb, $largeimage, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height); imagejpeg($thumb, $newthumbname); imagedestroy($largeimage); imagedestroy($thumb); //**Kt thc chn $url = location: showimage.php?id= . $lastpicid; header ($url); } } ?> 3. By gi chng ta s to gallery.php nh phng trin lm ca bn, nhp on m sau: <?php //Kt ni c s d liu $link = mysql_connect(localhost, root, ) or die(Could not connect: . msql_error()); mysql_select_db(moviesite, $link) or die (mysql_error()); $ImageDir = images; $ImageThumb = $ImageDir . /thumbs/; ?> <html> <head> <title>Welcome to our Photo Gallery</title> </head> <body>

- 196 -

<p align=center>Click on any image to see it full sized.</p> <table align=center> <tr> <td align=center>Image</td> <td align=center>Caption</td> <td align=center>Uploaded By</td> <td align=center>Date Uploaded</td> </tr> <?php //get the thumbs $getpic = mysql_query(SELECT * FROM images) or die(mysql_error()); while ($rows = mysql_fetch_array($getpic)) { extract($rows); echo <tr>\n; echo <td><a href=\.$ImageDir . $image_id . .jpg\>; echo <img src=\ . $ImageThumb . $image_id . .jpg\ border=\0\>; echo </a></td>\n; echo <td> . $image_caption . </td>\n; echo <td> . $image_username . </td>\n; echo <td> . $image_date . </td>\n; echo </tr>\n; } ?> </table> </body> </html> 4. By gi bn a mt vi hnh s dng cho trang upload_image.php. Bn s thy nh hnh 7-8, bn c th thm m thanh ty .

- 197 -

Hnh 7.8

Cch thc hot ng: Thc s t thumbnails to ra trong trang check_image.php, bn thm nhng on sau y hon thnh //**Chn t dng ny $newthumbname = $ImageThumb . $lastpicid . .jpg; //Ta kch thc cho thumbnails $thumb_width = $width * 0.10; $thumb_height = $height * 0.10; //To thumbnail $largeimage = imagecreatefromjpeg($newfilename); $thumb = imagecreatetruecolor($thumb_width, $thumb_height); imagecopyresampled($thumb, $largeimage, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height); imagejpeg($thumb, $newthumbname); imagedestroy($largeimage); imagedestroy($thumb); //**Kt thc dng chn Bn to mt thumbnail qu trnh gm 5 bc nh trc: 1. To mt GD thn thin t hnh ngun 2. To mt GD thn thin l mt hnh trng, vi kch thc nh 3. Sao chp hnh ngun vo hnh trng

- 198 -

4. Ct gi hnh mi vo mt th mc thch hp 5. Xa nhng hnh tm thi

- 199 -

Chng 8:

NGI DNG NHP C HIU LC

Nu bn chp nhn cho ngi dng c nhp vo trang web, bn phi chun b gp nhng li. C th ch l li n gin hoc nhng li nh hng trang web ca bn. Li chung nht thng gp l li thut in c bn, li nh dng (v d cho mt nm trong mt ngy). Nhng li nh ngi dng khng cung cp a ch email, hoc ngi dng xm nhp vo c s d liu ca bn. Tp lnh cn c phn iu khin nhp, bng vic xc nh d liu xu v tr v trang thng bo li cho ngi dng. Bao gm: Lm cho c hiu lc nhng gi tr chui n gin Lm cho c hiu lc nhng gi tr nguyn Lm cho c hiu lc vn bn nhp vo nh dng

8.1. Nhng ngi dng ch l nhng ngi dng


V d by gi bn ang lm vic trong ngn hng, bn thit lp h thng qun l ti khon cp nht ca khch hng. Bn s dng nh dng MM-DD-YYYY nh dng ngy thng. Khi a vo hot ng th n khng lm vic. Ti sao? V tt c h thng ca bn s dng ISO 8601 nh dng ngy thng YYYY-MM-DD. Ngi s dng s nhm ln gia 2 dng ny nn nhp thng tin khng c hiu lc. Bn c th khc phc iu ny bng vic s dng khun mu chung v lm cho ngi s dng nhp c hiu lc.

8.2. Kt hp c hiu lc vo Movie Site


tht s hiu vai tr v s kt hp ca ngi dng nhp, bn mun thy n hot ng. Nh vy, bn cn thm vi vng trong c s d liu ca bn, cung cp nhiu phng tin kim tra ngi dng nhp vo. Bn cn thm mt vi c tnh trong ng dng, gip ta xem li nhng phn trc y. Thm vo mt vng movie_release INT(11) vi gi tr mc nh l 0 sau vng movie_year, nh Hnh 8.1

- 200 -

Hnh 8.1

Cho php bn lu tr mt timestamp cho ngy thng trong phin bn movie. Thm vng movie_rating vo cui kiu TINYINT(2). Thng tin cha nh gi khi bn xem li.(xem Hnh 8.2)Ci ny bt buc i t 0 n 10

Hnh 8.2

8.3. Qun iu g?
i lc ngi dng nhp d liu trong form, h qun in y thng tin. Nu iu ny xy ra, h thng phi c lng nhng d liu sai hoc khng y khng lm nh hng n c s d liu. Bn phi lm th no h thng phn ng li nhng li nh vy m khng lm hng c s d liu. V d: Thm vo tp lnh ngi dng nhp Trong v d ny bn chc rng tp lnh c th sa li khi ngi dng nhp sai. 1. Copy on m trong chng 6 vo th mc mi, m tp lnh movie.php v sa nh nhng dng hng dn sau:

- 201 -

<?php $link = mysql_connect(localhost, root, ) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die ( mysql_error()); $peoplesql = SELECT * FROM people; $result = mysql_query($peoplesql) or die(Invalid query: . mysql_error()); while ($row = mysql_fetch_array($result)) { $people[$row[people_id]] = $row[people_fullname]; } switch ($_GET[action]) { case edit: $moviesql = SELECT * FROM movie . WHERE movie_id = . $_GET[id] . $result = mysql_query($moviesql) or die(Invalid query: . mysql_error()); $row = mysql_fetch_array($result); $movie_name = $row[movie_name]; $movie_type = $row[movie_type]; $movie_year = $row[movie_year]; $movie_leadactor = $row[movie_leadactor]; $movie_director = $row[movie_director]; break; default: $movie_name = ; $movie_type = ; $movie_year = ; $movie_leadactor = ;

- 202 -

$movie_director = ; break; } ?> <html> <head> <title><?php echo $_GET[action]; ?> movie</title> <style type=text/css> TD{color:#353535;font-family:verdana} TH{color:#FFFFFF;font-family:verdana;backgroundcolor:#336699} </style> </head> <body> <form action=commit.php?action=<?php echo $_GET[action]; ?>&type=movie&id=<?php if (isset($_GET[id])) { echo $_GET[id]; } ?> method=post> <?php if (!empty($_GET[error])) { echo <div align=\center\ . style=\color:#FFFFFF;background-color:#FF0000; font-weight:bold\> nl2br(urldecode($_GET[error])) . </div><br />; } ?> <table border=0 width=750 cellspacing=1 cellpadding=3 bgcolor=#353535 align=center> .

- 203 -

<tr> <td bgcolor=#FFFFFF width=30%>Movie Name</td> <td bgcolor=#FFFFFF width=70%> <input type=text name=movie_name value=<?php echo $movie_name?>> </td> </tr> <tr> <td bgcolor=#FFFFFF>Movie Type</td> <td bgcolor=#FFFFFF> <select id=game name=movie_type style=width:150px> <option value= selected>Select a type...</option> <?php $sql = SELECT movietype_id, movietype_label . FROM movietype ORDER BY movietype_label; $result = mysql_query($sql) or die(<font color=\#FF0000\>Query Error</font> . mysql_error()); while ($row = mysql_fetch_array($result)) { if ($row[movietype_id] == $movie_type) { $selected = selected; } else { $selected = ; } echo <option value= . $row[movietype_id] . . $selected . > . $row[movietype_label] . </option>\r\n;

- 204 -

} ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF>Movie Year</td> <td bgcolor=#FFFFFF> <select name=movie_year> <option value= selected>Select a year...</option> <?php for ($year=date(Y); $year >= 1970 ; $year--) { if ($year == $movie_year) { $selected = selected; } else { $selected = ; } ?> <option value=<?php echo $year; ?> <?php echo $selected; ?>><?php echo $year; ?></option> <?php } ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF>Lead Actor</td>

- 205 -

<td bgcolor=#FFFFFF> <select name=movie_leadactor> <option value= selected>Select an actor...</option> <?php foreach ($people as $people_id => $people_fullname) { if ($people_id == $movie_leadactor) { $selected = selected; } else { $selected = ; } ?> <option value=<?php echo $people_id; ?> <?php echo $selected; ?>><?php echo $people_fullname; ?></option> <?php } ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF>Director</td> <td bgcolor=#FFFFFF> <select name=movie_director> <option value= selected>Select a director...</option> <?php foreach ($people as $people_id => $people_fullname)

- 206 -

{ if ($people_id == $movie_director) { $selected = selected; } else { $selected = ; } ?> <option value=<?php echo $people_id; ?> <?php echo $selected; ?>><?php echo $people_fullname; ?></option> <?php } ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF colspan=2 align=center> <input type=submit name=submit value=<?php echo $_GET[action]; ?>> </td> </tr> </table> </form> </body> </html> 2. Lu file vi tn movie.php v a on m mi vo th mc lm vic ca bn 3. M tp lnh commit.php v chnh sa nh nhng dng hng dn sau: <?php // COMMIT ADD AND EDITS

- 207 -

$error = ; $link = mysql_connect(localhost, root, ) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die ( mysql_error()); switch ($_GET[action]) { case edit: switch ($_GET[type]) { case people: $sql = UPDATE people SET . people_fullname = . $_POST[people_fullname] . WHERE people_id = . $_GET[id] . ; break; case movie: $movie_name = trim($_POST[movie_name]); if (empty($movie_name)) { $error .= Please+enter+a+movie+name%21%0D%0A; } if (empty($_POST[movie_type])) { $error .= Please+select+a+movie+type%21%0D%0A; } if (empty($_POST[movie_year])) { $error .=

- 208 -

Please+select+a+movie+year%21%0D%0A; } if (empty($error)) { $sql = UPDATE movie SET . movie_name = . $_POST[movie_name] . , . movie_year = . $_POST[movie_year] . , . movie_type = . $_POST[movie_type] . , . movie_leadactor = . $_POST[movie_leadactor] . , . movie_director = . $_POST[movie_director] . . WHERE movie_id = .$_GET[id].; } else { header(location:movie.php? action=edit&error= . $error . &id= . $_GET[id] ); } break; } break; case add: switch ($_GET[type]) { case people: $sql = INSERT INTO people (people_fullname) . VALUES ( . $_POST[people_fullname] . ); break;

- 209 -

case movie: $movie_name = trim($_POST[movie_name]); if (empty($movie_name)) { $error .= Please+enter+a+movie+name%21%0D%0A; } if (empty($_POST[movie_type])) { $error .= Please+select+a+movie+type%21%0D%0A; } if (empty($_POST[movie_year])) { $error .= Please+select+a+movie+year%21%0D%0A; } if (empty($error)) { $sql = INSERT INTO movie (movie_name,movie_year, . movie_type,movie_leadactor,movie_director) . VALUES ( . $_POST[movie_name] . , . . $_POST[movie_year] . , . . $_POST[movie_type] . , . . $_POST[movie_leadactor] . , . . $_POST[movie_director] . ); } else { header(location:movie.php? action=add&error= . $error);

- 210 -

} break; } break; } if (isset($sql) && !empty($sql)) { echo <!--.$sql.-->; $result = mysql_query($sql) or die(Invalid query: . mysql_error()); ?> <p align=center style=color:#FF0000> Done. <a href=index.php>Index</a> </p> <?php } ?> 4. Lu vi tn commit.php v a ln server 5. M trnh son tho v vo trang http://localhost/chapter8/index.php v thm vo mt
191H

movie khng tn, nh Hnh 8.3.

Hnh 8.3

6. Nhp vo mt movie mi m khng t nm v kiu movie( Nh Hnh 8.4)

- 211 -

Hnh 8.4

7. Son tho mt movie t ch s v xa form tn, submit( Nh Hnh 8.5)

Hnh 8.5

8. Ch thng bo li trong vic in form( Nh Hnh 8.6)

Hnh 8.6

Cch thc hot ng


Khi form chuyn thng tin n tp lnh, d liu s c xc nhn. Bn s dng mt phng php n gin: hm empty() tr v true nu chui rng, tr v false nu
- 212 -

khng. m bo rng ngi dng khng trnh by form vi mt khng gian n gin trong vng tn movie, bn dng trim() trong ni dung ca vng loi tr bt k dn n no hoc ko di chui( mt vi ngi lm cho cng vic tr nn kh khn). Cng lc m c li c pht hin th bn a ra thng bo li, dng bin $error( tp hp tt c cc li) if (empty($movie_name)) { $error = Please+enter+a+movie+name%21%0D%0A; } Mt ln na bn thy rng c mt li xut hin, bn gi n ngi dng mt thng bo li. Thng bo li c URL m ha m bo n c chuyn n tp lnh move.php m khng b hng if (empty($error)) { ... } else { header(location:movie.php?action=add&error= . $error); } Mt ln gi n form, h thng cn hin th gii m thng bo li <? if (!empty($_GET[error])) { echo <div align=\center\ . style=\color:#FFFFFF;background-color:#FF0000; . font-weight:bold\> . nl2br(urldecode($_GET[error])) . </div><br />; } ?>

- 213 -

iu ny trnh by thng bo qu mu m m ngi dng s khng nh. Chnh s cp nht c thc hin vo lc cui ca on m, cng vi tt c cc iu khin v a ra thng bo bn cn if (isset($sql) && !empty($sql)) { echo <!--.$sql.-->; $result = mysql_query($sql) or die(Invalid query: . mysql_error()); ?> <p align=center style=color:#FF0000> Done. <a href=index.php>Index</a> </p> <?php } Nu bin $sql khng c thit lp trc ( m c th xy ra nu c gi ra khi ni dung), on m s khng thc thi v khng lm g c. ( Ch n s l bi tp tt cho bn lp mt phn hi cho bin c ny, nh mt thng ip hoc mt ng k li trong c s d liu)

8.4. Vic kim tra nhng kiu li


Vic kim tra li ngy thng hoc nhng d liu nh dng khc l mt yu cu cn thit trong h thng bi v ngi dng khng phi lc no cng c hng dn nhp d liu. Bn phi lun kim tra d liu m ngi dng nhp vo nu bn nh dng hoc thit lp gi tr c bit. Ti im ny, bn cn nhng biu thc chung, nhng biu thc ny cho php bn nh ngha mt mu v kim tra xem c th p dng vo d liu hay khng. N gip bn kim tra ngy thng, s bo mt v bt k mt d liu no m c ch vic nh dng (n gip chc chn trong vic nh dng vng ngun. V d v kim tra ngy thng v s Trong bi tp ny bn s thay i vi trang bn kim tra vic nh dng ngy thng ca ngi dng.

- 214 -

1.M file movie.php v thay i n nh sau (thay i c lm ni bt) <?php $link = mysql_connect(localhost, bp5am, bp5ampass) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die(mysql_error()); $peoplesql = SELECT * FROM people; $result = mysql_query($peoplesql) or die(Invalid query: . mysql_error()); while ($row = mysql_fetch_array($result)) { $people[$row[people_id]] = $row[people_fullname]; } switch ($_GET[action]) { case edit: $moviesql = SELECT * FROM movie . WHERE movie_id = . $_GET[id] . ; $result = mysql_query($moviesql) or die(Invalid query: . mysql_error()); $row = mysql_fetch_array($result); $movie_name = $row[movie_name]; $movie_type = $row[movie_type]; $movie_year = $row[movie_year]; $movie_release = $row[movie_release]; $movie_leadactor = $row[movie_leadactor]; $movie_director = $row[movie_director]; $movie_rating = $row[movie_rating]; break; default:

- 215 -

$movie_name = ; $movie_type = ; $movie_year = ; $movie_release = time(); $movie_leadactor = ; $movie_director = ; $movie_rating = 5; break; } ?> <html> <head> <title><?php echo $_GET[action]; ?> movie</title> <style type=text/css> TD { color:#353535;font-family:verdana } TH { color:#FFFFFF;font-family:verdana;background-color:#336699 } </style> </head> <body> <form action=commit.php?action=<?php echo $_GET[action]; ?>&type=movie&id=<?php if (isset($_GET[id])) { echo $_GET[id]; }

- 216 -

?> method=post> <?php if (!empty($_GET[error])) { echo <div align=\center\ . style=\color:#FFFFFF;background-color:#FF0000; . font-weight:bold\> . nl2br(urldecode($_GET[error])) . </div><br />; } ?> <table border=0 width=750 cellspacing=1 cellpadding=3 bgcolor=#353535 align=center> <tr> <td bgcolor=#FFFFFF width=30%>Movie Name</td> <td bgcolor=#FFFFFF width=70%> <input type=text name=movie_name value=<?php echo $movie_name?>> </td> </tr> <tr> <td bgcolor=#FFFFFF>Movie Type</td> <td bgcolor=#FFFFFF> <select id=game name=movie_type style=width:150px> <option value= selected>Select a type...</option> <?php $sql = SELECT movietype_id, movietype_label . FROM movietype ORDER BY movietype_label; $result = mysql_query($sql) or die(<font color=\#FF0000\>Query Error</font> . mysql_error()); while ($row = mysql_fetch_array($result)) {

- 217 -

if ($row[movietype_id] == $movie_type) { $selected = selected; } else { $selected = ; } echo <option value= . $row[movietype_id] . . $selected . > . $row[movietype_label] . </option>\r\n; } ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF>Movie Year</td> <td bgcolor=#FFFFFF> <select name=movie_year> <option value= selected>Select a year...</option> <?php for ($year=date(Y); $year >= 1970 ;$year--) { if ($year == $movie_year) { $selected = selected; } else { $selected = ; }

- 218 -

?> <option value=<?php echo $year; ?> <?php echo $selected; ?>><?php echo $year; ?></option> <?php } ?> </select> </td> </tr> <tr> <td bgcolor=#FFFFFF>Lead Actor</td> <td bgcolor=#FFFFFF> <select name=movie_leadactor> <option value= selected>Select an actor...</option> <?php foreach ($people as $people_id => $people_fullname) { if ($people_id == $movie_leadactor) { $selected = selected; } else { $selected = ; } ?> <option value=<?php echo $people_id; ?> <?php echo $selected; ?>><?php echo $people_fullname; ?></option> <?php }

- 219 -

?> </selected> </td> </tr> <tr> <td bgcolor=#FFFFFF>Director</td> <td bgcolor=#FFFFFF> <select name=movie_director> <option value= selected>Select a director...</option> <?php foreach ($people as $people_id => $people_fullname) { if ($people_id == $movie_director) { $selected = selected; } else { $selected = ; } ?> <option value=<?php echo $people_id; ?> <?php echo $selected; ?>><?php echo $people_fullname; ?></option> <?php } ?> </select> </td> </tr> <tr>

- 220 -

<td bgcolor=#FFFFFF width=30%> Movie release date (dd-mm-yyyy) </td> <td bgcolor=#FFFFFF width=70%> <input type=text name=movie_release value=<?php echo date(d-m-Y, $movie_release); ?>> </td> </tr> <tr> <td bgcolor=#FFFFFF width=30%> Movie rating (0 to 10) </td> <td bgcolor=#FFFFFF width=70%> <input type=text name=movie_rating value=<?php echo $movie_rating; ?>> </td> </tr> <tr> <td bgcolor=#FFFFFF colspan= align=center> <input type=submit name=submit value=<?php echo $_GET[action]; ?>> </td> </tr> </table> </form> </body> </html> 2.By gi file commit.php v thay i nh sau: <?php // COMMIT ADD AND EDITS

- 221 -

$error = ; $link = mysql_connect(localhost, root, ) or die(Could not connect: . mysql_error()); mysql_select_db(moviesite, $link) or die ( mysql_error()); switch ($_GET[action]) { case edit: switch ($_GET[type]) { case people: $sql = UPDATE people SET . people_fullname = . $_POST[people_fullname] . WHERE people_id = . $_GET[id] . ; break; case movie: $movie_rating = trim($_POST[movie_rating]); if (!is_numeric($movie_rating)) { $error .= Please+enter+a+numeric+rating+%21%0D%0A; } else { if ($movie_rating < 0 || $movie_rating > 10) { $error .= Please+enter+a+rating+ . between+0+and+10%21%0D%0A; } } if (!ereg(([0-9]{2})-([0-9]{2})-([0-9]{4}), $_POST[movie_release] ,

- 222 -

$reldatepart)) { $error .= Please+enter+a+date+ . with+the+dd-mm-yyyy+format%21%0D%0A; } else { $movie_release = @mktime(0, 0, 0, $reldatepart[2], $reldatepart[1], $reldatepart[3]); if ($movie_release == -1) { $error .= Please+enter+a+real+date+ . with+the+dd-mm-yyyy+format%21%0D%0A; } } $movie_name = trim($_POST[movie_name]); if (empty($movie_name)) { $error .= Please+enter+a+movie+name%21%0D%0A; } if (empty($_POST[movie_type])) { $error .= Please+select+a+movie+type%21%0D%0A; } if (empty($_POST[movie_year])) { $error .= Please+select+a+movie+year%21%0D%0A; } if (empty($error) ) {

- 223 -

$sql = UPDATE movie SET . movie_name = . $_POST[movie_name] . , . movie_year = . $_POST[movie_year] . , . movie_release = $movie_release, . movie_type = . $_POST[movie_type] . , . movie_leadactor = . $_POST[movie_leadactor] . , . movie_director = . $_POST[movie_director] . , . movie_rating = $movie_rating . WHERE movie_id = . $_GET[id] . ; } else { header(location:movie.php?action=edit&error= . $error . &id= . $_GET[id]); } break; } break; case add: switch ($_GET[type]) { case people: $sql = INSERT INTO people (people_fullname) . VALUES ( . $_POST[people_fullname] . ); break; case movie: $movie_rating = trim($_POST[movie_rating]); if (!is_numeric($movie_rating)) { $error .= Please+enter+a+numeric+rating+%21%0D%0A; }

- 224 -

else { if ($movie_rating < 0 || $movie_rating > 10) { $error .= Please+enter+a+rating+ . between+0+and+10%21%0D%0A; } } $movie_release = trim($_POST[movie_release]); if (!ereg(([0-9]{2})-([0-9]{2})-([0-9]{4}), $movie_release, $reldatepart) || empty($movie_release)) { $error .= Please+enter+a+date+ . with+the+dd-mm-yyyy+format%21%0D%0A; } else { $movie_release = @mktime(0, 0, 0, $reldatepart[2], $reldatepart[1], $reldatepart[3]); if ($movie_release == -1) { $error .= Please+enter+a+real+date+ . with+the+dd-mm-yyyy+format%21%0D%0A; } } $movie_name = trim($row[movie_name]); i0f (empty($movie_name)) { $error .= Please+enter+a+movie+name%21%0D%0A;

- 225 -

} if (empty($_POST[movie_type])) { $error .= Please+select+a+movie+type%21%0D%0A; } if (empty($_POST[movie_year])) { $error .= Please+select+a+movie+year%21%0D%0A; } if (empty($error)) { $sql = INSERT INTO movie (movie_name,movie_year, . movie_release,movie_type,movie_leadactor, . movie_director,movie_rating) . VALUES ( . $_POST[movie_name] . , . . $_POST[movie_year] . , . $movie_release, . . $_POST[movie_type] . , . . $_POST[movie_leadactor] . , . . $_POST[movie_director] . , . $movie_rating); } else { header(location:movie.php?action=add&error= . $error); } break; } break; } if (isset($sql) && !empty($sql))

- 226 -

{ echo <!--.$sql.-->; $result = mysql_query($sql) or die(Invalid query: . mysql_error()); ?> <p align=center style=color:#FF0000> Done. <a href=index.php>Index</a> </p> <?php } ?> 3. Hy lu nhng file ny li, m trnh duyt bn s thy index. 4.Click bt k mt movie no, th nhp 2003-10-10 vo phin bn ngy thng. Bn s thy mt form p, r rng.(Nh Hnh 8.7)

Hnh 8.7

5. Th nhp vo gi tr ch s bn trong(nh

Hnh 8.8)d

dng c c hp ko xung

nhng l vng vn bn cho mc ch trong bi tp.

- 227 -

Hnh 8.8

Nu nhp vo gi tr m khng c trong phm vi t 0 n 10, n s t chi. (ch nhng phn thp phn th khng c trong m ny nn cng b mt) N hot ng th no? Trc ht, hy nhn vo nhng hm lm cho c hiu lc. Trong commit.php, bn s dng hm is_numeric(). Hm ny tr v gi tr BOOL, nu ng tr v TRUE, nu sai tr v FALSE. C nhiu hm c sn, ban gm: is_string kim tra nu n dng chui is_bool kim tra nu dng BOOL( TRUE, FALSE, 0, 1) is_array cho ta bit nu bin cha mng is_object xc nh nu bin cha mt i tng ( khi bn c gng dng code hng i tng trong PHP, n rt c ch) Nhng hm ny l ti liu PHP trong www.php.net/variable Trong trng hp
192H

ny s dng is_numeric cho php bn bit chc rng ngi dng nhp ng gi tr s. $movie_rating = trim($_POST[movie_rating]); if (!is_numeric($movie_rating)) { $error .= Please+enter+a+numeric+rating+%21%0D%0A; } else { if ($movie_rating < 0 || $movie_rating > 10) {

- 228 -

$error .= Please+enter+a+rating+ . between+0+and+10%21%0D%0A; } } on m dng hm trim() kim tra gi tr. Nu gi tr l s trong khong t 0 n 10 th cho thy, nu khng th a ra thng bo li. Lm c hiu lc ngy thng th hu nh n gin hiu, nu bn bit nhng biu thc chung. y l: $movie_release = trim($_POST[movie_release]); if (!ereg(([0-9]{2})-([0-9]{2})-([0-9]{4}), $movie_release, $reldatepart) || empty($movie_release)) { $error .= Please+enter+a+date+ . with+the+dd-mm-yyyy+format%21%0D%0A; } else { $movie_release = @mktime(0, 0, 0, $reldatepart[2], $reldatepart[1], $reldatepart[3]); if ($movie_release == -1) { $error .= Please+enter+a+real+date+ . with+the+dd-mm-yyyy+format%21%0D%0A; } } Nh bn thy trong bi tp u tin ca chng ny s dng hm trim() kim tra tt c nhng khng gian trong chui chc rng ngi dng nhp ch mt khng gian.

- 229 -

Bn c th tm nhng hm ti www.php.net/strings . Bn c th tm nhng hm


193H

c ch khc trong trang web ny. Nhng mnh tip theo cha 2 iu kin. Mt l nhng biu thc chung nh ( [ 0-9 ] { 2 } )-( [ 0-9 ]{ 2 } )-( [ 0-9 ] { 4 } ). iu ny bn kim tra nhng s trong khong t 0 n 9 vi 2 bin c. V d: nu khng l 2. Nu [ 0-9] { 4 } ch khc nhau ch l c 4 k s trong s, xc nh phn nm trong ngy.( hai phn u l ngy v thng) V th, trong Ting Anh c ngha l Ti mun chui bt u vi mt s hai k s, i theo bi mt du ni v sau nhm vi 2 k s, ri n du ni,v cui cng nhm vi 4 k s. if (!ereg(([0-9]{2})-([0-9]{2})-([0-9]{4}), $movie_release, $reldatepart) || empty( $movie_release )) { ... } y l xc nh ca biu thc bnh thng. Nu chui tha iu kin ca bn, bn s chia 3 phn khc nhau, mi phn gii hn bi du ngoc. Vic ct ny c thc hin bi hm ereg(). Nu bin $movie_release tha vi mu, ereg s ct chui thnh tng phn, lu tr mi phn nh tng phn t ca mng $reldatepart. c ti liu PHP v nhng biu thc bnh thng chng ta tham kho trang web www.php.net/regex v hi kin thy hiu hn v nhng biu thc bnh thng.
194H

Nu ngi dng nhp 02-03-2004, s c mng nh sau: Array ( [0] => 02-03-2004 [1] => 02 [2] => 03 [3] => 2004 )

- 230 -

Nh bn thy, ch s u tin gi ton b chui, nhng s cn li lu gi mi b phn ca chui, gii hn bi du ngoc bn ngoi. By gi bn c ngy c nh dng d hiu, bn c th chuyn n thnh thi gian tm bng vic s dng hm mktime(), cho php bn to ra thi gian tm t nhng phn ngy, thng. N cng l mt hm rt c ch cho vic vn dng ngy. $movie_release = mktime(0, 0, 0, $reldatepart[2], $reldatepart[1], $reldatepart[3]); M ny lu gi thi gian tm t thng tin ngy, thng, nm n h thng bn trong bin $movie_release. nh dng ny l int mktime(int hour, int minute, int second, int month, int day, int year). Gi tr tr v l s giy gia January 1, 1970 v ngy ch nh. Nu mktime tht bi khi to thi gian tm t ngy, thng bn cho, n s tr v -1. iu ny xy ra khi nhp sai , mc d n ph hp vi biu thc bnh thng v d nh:99 -99 9999 s qua s kim tra ca biu thc bnh thng nhng y khng l ngy thng hp l. chc rng phi l ngy hp l, bn kim tra gi tr tr v t mktime v tr li tng ng if ($movie_release == -1) { $error .= Please+enter+a+real+date+ . with+the+dd-mm-yyyy+format%21%0D%0A; } Trong trng hp ny, mt ngy khng hp l s a ra mt li hi v ngy thng hp l. y c mt k xo khc: bn c th thi hnh thi gian tm s dng SQL. Nhiu th m PHP thao tc trc tip t SQL, nh: if (!ereg(([0-9]{2})-([0-9]{2})-([0-9]{4}), $movie_release, $reldatepart) || empty($movie_release)) { ...

- 231 -

} $reldate = $reldatepart[3] . - . $reldatepart[2] . - . $reldatepart[1] . 00:00:00; $sql = INSERT INTO movie (movie_release) . VALUES (UNIX_TIMESTAMP($reldate)); Trong on m ny, SQL pht sinh thi gian tm. Hm UNIX_TIMESTAMP() SQL nh dng YYYY-MM-DD HH:MM:SS (2004-12-05 02:05:00) v to thi gia tm t . Trong m, bn ct buc to thi gian tm ti thi im 00:00

8.5. Tm ti
Vic lm cho ngi dng khi nhp vo c hiu lc l ta sn sng x l nhng li gp phi, nhng li c th c hoc v tnh, n xy ra hng ngy. Nhng biu thc bnh thng gip bn rt nhiu

- 232 -

Chng 9:

IU KHIN V TRNH NHNG LI

Sau khi vit m lnh, ngi mi lp trnh s gp khng t kh khn trong vic tm ra li v chnh sa li. PHP h tr y tnh nng lp trnh giao din API (Applications Programming Interface) c th tm ra li v khc phc nhng li y. Ngoi PHP th Apache Web Server cng h tr ngi lp trnh tm ra li v khc phc li.

9.1. Tip xc vi li Apache Web Server nh th no?


Apache c mt th mc Li ti liu, bn c th nh cu hnh trong file httpd.conf to ra nhng trang thng bo li vi PHP, v th ngi thm trang web khng thy bun chn. PHP to ra trang web thng bo li thn thin cho ngi dng. Khng ging nhng trang thng bo li nh PHP, trang ca Apache c s dng nhiu cho nhng trang mt.

9.1.1.

Ch th li ca Apache

V d v vic s dng phng php Apache. Trc ht cn thay i trong th mc httpd.conf cho php to ra mt trang thng bo li, Apache thng c mc nh bn trong nhng trang li. Nhng bn mun c mt thng bo nh mun khi c li xut hin. Bn cn c nhng thay i sau: 1. M file httpd.conf, nhng dng 750 hoc xa hn, tm vi dng ging nh sau: # Customizable error responses come in three flavors: # 1) plain text 2) local redirects 3) external redirects # # Some examples: #ErrorDocument 500 The server made a boo boo. #ErrorDocument 404 /missing.html #ErrorDocument 404 /cgi-bin/missing_handler.pl #ErrorDocument 402 http://www.example.com/subscription_info.html
195H

2. Thay i thng tin cho php sau khi ng li Apache

- 233 -

# Customizable error responses come in three flavors: # 1) plain text 2) local redirects 3) external redirects # # Some examples: ErrorDocument 400 /error.php?400 ErrorDocument 401 /error.php?401 ErrorDocument 403 /error.php?403 ErrorDocument 404 /error.php?404 1ErrorDocument 500 /error.php?500 N hot ng th no? Bn va son tho cu hnh Apache gip bn thi hnh li, bn c th gi n ngi dng nhng trang li ph thuc vo nhng li m ngi dng gp phi C nhiu li trong ti liu nhng chng ta s tp trung vo li m thng gp hng ngy. 400: Li thnh cu khng tt 401:Yu cu c cho php 403: Khng c php 404: Khng tm thy 500: Li t server V d: Hin th li hin th thng bo li, bn lm nhng bc sau: 1.M trnh duyt v lu vi tn error.php 2. Nhp nhng dng sau: <?php $error_no = $_SERVER[QUERY_STRING]; switch ($error_no) { case 400:

- 234 -

$error_output Error Page - .

= <h1>&quot;Bad Request&quot;

(Error Code 400)</h1>; $error_output .= The browser has made a Bad Request<br>; $error_output .= <a href=\mailto:sysadmin@localhost.com\> . Contact</a> the system administrator; $error_output .= if you feel this to be in error; break; case 401: $error_output Required&quot; . Error Page - (Error Code 401)</h1>; $error_output .= You have supplied the wrong information to . access a secure area<br>; $error_output .= <a href=\mailto:sysadmin@localhost.com\> . Contact</a> the system administrator; $error_output .= if you feel this to be in error; break; case 403: $error_output = <h1>&quot;Forbidden Access&quot; Error Page - . (Error Code 403)</h1>; $error_output .= You are denied access to this area<br>; $error_output .= <a href=\mailto:sysadmin@localhost.com\> . Contact</a> the system administrator; = <h1>&quot;Authorization

- 235 -

$error_output .= if you feel this to be in error; break; case 404: $error_output = <h1>&quot;Page Not Found&quot; Error Page - . (Error Code 404)</h1>; $error_output .= The page you are looking for cannot . be found<br>; $error_output .= <a href=\mailto:sysadmin@localhost.com\> . Contact</a> the system administrator; $error_output .= if you feel this to be in error; break; case 500: $error_output Error&quot; . Error Page (Error Code 500)</h1>; $error_output .= The server has encountered an internal . error<br>; $error_output .= <a href=\mailto:sysadmin@localhost.com\> . Contact</a> the system administrator; $error_output .= if you feel this to be in error; break; default: $error_output = <h1>Error Page</h1>; $error_output .= This is the custom error Page<br>; $error_output .= You should be <a href=\index.php\>here</a>; = <h1>&quot;Internal Server

- 236 -

} ?> <html> <head> <title>Beginning PHP5, Apache, MySQL Web Development</title> </head> <body> <?php echo $error_output; ?> </body> </html> 3.M trnh duyt v vo http://localhost/asdf/qwerty/page.html hoc bt k
196H

trang web no m bn bit l khng th vo thm trang web, bn s nhn thy nh hnh 9.1

Hnh 9-5

3. Cch khc kim tra rng on m ca bn c ng dng vo

trong trang web vi chui thng tin truy vn cho ngi dng. V d m trnh duyt vi tn http://localhost/error.php?500 ,
197H

trang s s dng truy vn v chy on m nu c li n s xut hin nh hnh sau ( ging hnh trc).

- 237 -

Hnh 9.2

N hot ng th no? Bn va to ra nhng thng bo li thng gp, bng vic s dng switch(), bn c th hin th thch hp nhng thng bo li cn thit cho ngi dng.

9.1.2.

Li ti liu ca Apache: Trang bo li thng thng

Bn ch cho ngi dng nhn thy nhng li thng thng, mc d bn c th lm nhiu hn th, y l cch tt bn theo di nhng trang m bn khng th kim tra nh k c. V d to mt E_mail li Trong bi tp ny, bn to ra mt email pht sinh t ng gi n ngi qun tr thi gian xut hin li, vo ngy no, li g, trang no pht sinh li v thng bo li no c hin th cho ngi dng nh hng. 1. M file error.php, thay i nh sau: 2. Nhp vo on m sau: <?php function email_admin($error_no, $error_output, $full_date, $full_time, $request_page) { $to = Administrator <admin@yourdomain.com>;

- 238 -

$subject = Apache Error Generation; $body = <html>; $body .= <head>; $body .= <title>Apache Error</title>; $body .= </head>; $body .= <body>; $body .= Error occurred on <b> . $full_date . </b> . at <b> . $full_time . </b><br>; $body .= Error received was a <b> . $error_no . </b> error.<br>; $body .= The page that generated the error was: <b> . $request_page . </b><br>; $body .= The generated error message was: . $error_output; $body .= </body>; $body .= </html>; $headers = MIME-Version: 1.0\r\n; $headers .= Content-type: text/html; charset=iso-8859-1\r\n; $headers .= From: Apache Error <host@yourdomain.com>\r\n; $headers .= Cc: webmaster@yourdomain.com\r\n; mail($to, $subject, $body, $headers); } $date = getdate(); $full_date = $date[weekday] . , . $date[month] . . $date[mday] . , . $date[year]; $full_time = $date[hours] . : . $date[minutes] . : . $date[seconds] . : . $date[year]; $error_no = $_SERVER[QUERY_STRING];

- 239 -

$request_page = $_SERVER[REQUEST_URI]; switch ($error_no) { case 400: $error_output = <h1>\Bad Request\ Error Page - . (Error Code 400)</h1>; $error_output .= The browser has made a Bad Request<br>; $error_output .= <a href=\mailto:sysadmin@localhost.com\> . Contact</a> the system administrator; $error_output .= if you feel this to be in error; email_admin($error_no, $error_output, $full_date, $full_time, $request_page); break; case 401: $error_output = <h1>\Authorization Required\ Error Page - . (Error Code 401)</h1>; $error_output .= You have supplied the wrong information to . access a secure area<br>; $error_output .= <a href=\mailto:sysadmin@localhost.com\> . Contact</a> the system administrator; $error_output .= if you feel this to be in error; email_admin($error_no, $error_output, $full_date, $full_time, $request_page); break; case 403:

- 240 -

$error_output = <h1>\Forbidden Access\ Error Page - . (Error Code 403)</h1>; $error_output .= You are denied access to this area<br>; $error_output .= <a href=\mailto:sysadmin@localhost.com\> . Contact</a> the system administrator; $error_output .= if you feel this to be in error; email_admin($error_no, $error_output, $full_date, $full_time, $request_page); break; case 404: $error_output = <h1>\Page Not Found\ Error Page - . (Error Code 404)</h1>; $error_output .= The page you are looking for . cannot be found<br>; $error_output .= <a href=\mailto:sysadmin@localhost.com\> . Contact</a> the system administrator; $error_output .= if you feel this to be in error; email_admin($error_no, $error_output, $full_date, $full_time, $request_page); break; case 500: $error_output = <h1>\Internal Server Error\ Error Page - . (Error Code 500)</h1>; $error_output .= The server has encountered . an internal error<br>;

- 241 -

$error_output .= <a href=\mailto:sysadmin@localhost.com\> . Contact</a> the system administrator; $error_output .= if you feel this to be in error; email_admin($error_no, $error_output, $full_date, $full_time, $request_page); break; default: $error_output = <h1>Error Page</h1>; $error_output .= This is the custom error Page<br>; $error_output .= You should be <a href=\index.php\>here</a>; } ?> <html> <head> <title>Beginning PHP5, Apache, MySQL Web Development</title> </head> <body> <?php echo $error_output; ?> </body> </html> N hot ng th no? Hm mail() c s dng gi email cho ngi qun tr, getdate() ghi nh thi gian v ngy xut hin li. Hm mail() cho php bn gi mail n bt c ai khi xut hin li.

- 242 -

9.2. Thi hnh li v to ra vic sa trang li vi PHP


Ph thuc vo kiu li xut hin m a ra nhng thng bo li thch hp, phi a ra nhng li ngi nhn thng bo li cm thy d chu, khng cm thy xu h v c hng gii quyt li tt.

9.2.1.

Cc loi li trong PHP

C 12 kiu li trong PHP, c lit k di y Li E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNINGS Gi tr nguyn 1 2 4 8 16 32 Tn hng Li nng Li nh(cnh bo) Thi gian bin dch li Ch Li nng xut hin lc khi ng Li khng nng ngay lc khi ng Li thi gian bin dch khng nng lm(cnh bo) Li pht sinh ngi dng bi hm PHP trigger_error() E_USER_WARNING E_USER_NOTICE E_ALL E_STRICT 512 1024 2047 2048 Cnh bo ngi dng khi dng hm trigger_error() Ch khi dng hm trigger_error() Tt c nhng li v cnh bo Ch thi gian thc hin cn c thay i tng thch
- 243 -

E_COMPILE_WARNING 128 E_USER_ERROR 256

Bn khng phi lo lng v li nh my, hy quan tm n nhng cnh bo, nhng li m bn gp phi, c s gii quyt kp thi, d s dng hn cho ngi dng. y c 3 loi li chnh Fatal error: Li nng khi thc hin, thng bo li khng th sa i, thc hin theo ngyun bn Warning: Cnh bo, khng c dng tp lnh va ri. Notices: Ch , khi chy vn ng nhng c mt li nh.

9.2.2.

Vic pht sinh li PHP


<?php //set string with Wrox spelled wrong $string_variable = Worx books are great!; //try to use str_replace to replace Worx with Wrox //this will generate an E_WARNING //because of wrong parameter count str_replace(Worx, Wrox); ?>

Chng ta to vi li c th kim tra cn gii quyt th no?Nh v d sau:

Nu bn chy on m ny, bn s thy li nh sau: Warning: Wrong parameter count for str_replace() in C:\FoxServ\www\errorhandling\error1.php on line 8 Li ny xut hin v hm str_replace yu cu tham s th 3 cho hm. Tham s ny l bin, $string_variable hoc chui vn bn m bn mun nghin cu cho tham s th nht, Worx v thay th n vi Worx. Bi iu ny khng to ra li ln m khng thi hnh tp lnh, bn c th vn chy on code sau khi li xut hin, nu bn lm nh sau: <?php //set string with Wrox spelled wrong $string_variable = Worx books are great!; //try to use str_replace to replace Worx with Wrox //this will generate an E_WARNING //because of wrong parameter count str_replace(Worx, Wrox);
- 244 -

//this is a non-fatal error, so the original //variable should still show up after the warning echo $string_variable; ?> Chui vn tip tc c thi hnh sau li, n s sinh ra nh sau: Warning: Wrong parameter count for str_replace() in c:\FoxServ\www\errorhandling\error1.php on line 8 Worx books are great! K n, chng ta s a ra nhng li nng cho bn thy n sinh ra nhng kt qu khc nhau khi li xut hin nh th no. <?php //beginning of page echo Beginning; //we are going to make a call to //a function that doesnt exist //this will generate an E_ERROR //and will halt script execution //after the call of the function fatalerror(); //end of page echo End; //wont be output due to the fatal error ?> S xut hin nh sau: Beginning Fatal error: Call to undefined function: fatalerror() in c:\FoxServ\www\errorhandling\error2.php on line 10. Ch l Beginning c a ra v hm trc n c gi, nhng End th khng a ra v li thc hin qu ln. Bn c th ngn li li bng vic dng mt k hiu nh sau: @fatalerror (ngn chn li nhng vn gp li khi thi hnh)
- 245 -

Khi PHP mc nh li khng thy E_NOTICE xut hin, tuy nhin bn c th cho php ngi dng g nhng li nh khi dng $row[variable] v PHP coi [variable] nh mt hng, nu khng l hng n gi thit l chui trong mng. C th a ra thng bo li khi dng error_reporting(number) m s khng thay i. Nu bn khng bit cp li c thit lp, bn c th chy hm error_reporting() n gin vi bt k ch no: <?php echo error_reporting(); ?> Mc nh, tt c nhng vic thi hnh li c iu khin bi ngi xy dng nn li, cho bn nhng thng bo v liu li, tn file, s dng li xut hin Bn ch mt li nh sau: Warning: Wrong parameter count for str_replace() in c:\FoxServ\www\errorhandling\error1.php on line 8 Thng thng vic pht sinh li th tt v c th thng bo cho ngi qun tr bit l anh ta c th bit nhiu hn t nhng li y. V d v vic mt ngi to li thng thng Bn s to mt li thng thng nhng thn thin vi ngi dng v hin th nh sau: 1. Trnh son tho trong v d trc nh sau: <?php //create your error handler function function handler($error_type, $error_message, $error_file, $error_line) { echo <h1>Page Error</h1>; echo Errors have occurred while executing this page. Contact the ;

- 246 -

echo . to report errors<br><br>; echo <b>Information Generated</b><br><br>; echo <b>Error Type:</b> $error_type<br>; echo <b>Error Message:</b> $error_message<br>; echo <b>Error Filename:</b> $error_file<br>; echo <b>Error Line:</b> $error_line; } //set the error handler to be used set_error_handler(handler); //set string with Wrox spelled wrong $string_variable = Worx books are great!; //try to use str_replace to replace Worx with Wrox //this will generate an E_WARNING //because of wrong parameter count str_replace(Worx, Wrox); ?> 2. Lu file vi tn custom_error.php v m trnh duyt, bn s thy nh

<a

href=\mailto:admin@yourdomain.com\>administrator</a>

Hnh 9.3

3. V li ca bn l do ngi dng nh ngha, bn c th bt li v c th to li thng bo li da vo kiu li. To file custom_error.php sp xp nhng li nh sau:

- 247 -

<?php //create your error handler function function handler($error_type, $error_message, $error_file, $error_line) { switch ($error_type) { //fatal error case E_ERROR: echo <h1>Fatal Error</h1>; die(A fatal error has occured at line $error_line of file . $error_file.<br> . Error break; //warnings case E_WARNING: echo <h1>Warning</h1>; echo A warning has occured at line $error_line of file . $error_file.<br>; echo Error message created was &quot; $error_message&quot;; //notices case E_NOTICE: //dont show notice errors break; } message created was &quot; $error_message&quot;);

- 248 -

} //set the error handler to be used set_error_handler(handler); //set string with Wrox spelled wrong $string_variable = Worx books are great!; //try to use str_replace to replace Worx with Wrox //this will generate an E_WARNING //because of wrong parameter count str_replace(Worx, Wrox); ?> 4. Lu file v a ln trnh duyt. Kt qu nh Hnh 9.4. E_ERROR c gi trong mnh switch c th s dng bt k loi li no v thc hin nhng hot ng khc nhau ty theo li.

Hnh 9.4.

N hot ng th no? To ra thng bo li cho bn iu khin y nhng trang web ca bn, bt chp thnh cng hay tht bi khi thi hnh. Bn s bt li, a ra thng bo li, h s thng bo li v li no xut hin. Trang web m bn a ra thng bo li, trnh by hoc gi thng bo nht nh n ngi dng ph thuc vo li m ngi dng mc phi. Bn to ra thng bo li nhng khng mun ngi dng nhn thy thng bo y, bn c th lch s xin li ngi dng hy qua mt trang khc v trang ny ang b li nh th ngi dng khng thy li ca mnh. Dng phng php email c th cho ngi

- 249 -

dng khng trc tip xem xt c s d liu m l c bao nhiu yu cu ti trang li xut hin. V d v vic to mt trang li r rng Trong bi ny, bn s thit lp vic thi hnh mt li r rng nh bn mun. Bn c th tm tt c nhng li m khng cn s dng nhng hng dn c sn trong PHP 1. Trnh son tho feature_error.php nh sau: <?php //create your error handler function function handler($error_type, $error_message, $error_file, $error_line) { switch($error_type) { //fatal error case E_ERROR: $to = Administrator <admin@yourdomain.com>; $subject = Custom Error Handling; $body = <html>; $body .= <head>; $body .= <title>Website error</title>; $body .= </head>; $body .= <body>; $body .= <h1>Fatal Error</h1>; $body .= Error received was a <b> . $error_type . </b> error.<br>; $body .= The page that generated the error was: <b> . $error_file . </b>; $body .= and was generated on line: <b> . $error_line . </b><br>;

- 250 -

$body

.=

The

generated

error

message

was:

$error_message; $body .= </body>; $body .= </html>; $headers = MIME-Version: 1.0\r\n; $headers .= Content-type: text/html; charset=iso-88591\r\n; $headers .= From: Apache Error <host@yourdomain.com>\r\n; $headers .= Cc: webmaster@yourdomain.com\r\n; mail($to, $subject, $body, $headers); die(); //kill the script break; //warnings case E_WARNING: $to = Administrator <admin@yourdomain.com>; $subject = Custom Error Handling; $body = <html>; $body .= <head>; $body .= <title></title>; $body .= </head>; $body .= <body>; $body .= <h1>Warning</h1>; $body .= Error received was a <b> . $error_type . </b> error.<br>; $body .= The page that generated the error was: <b> . $error_file . </b>; $body .= and was generated on line: <b> . $error_line . </b><br>; $body .= The generated error message was: . $error_message;

- 251 -

$body .= </body>; $body .= </html>; $headers = MIME-Version: 1.0\r\n; $headers .= Content-type: text/html; charset=iso-88591\r\n; $headers .= From: Apache Error <host@yourdomain.com>\r\n; $headers .= Cc: webmaster@yourdomain.com\r\n; mail($to, $subject, $body, $headers); break; //script will continue //notices case E_NOTICE: //dont show notice errors break; } } /* set error handling to 0 we will handle all error reporting only notifying admin on warnings and fatal errors dont bother with notices as they are trivial errors really only meant for debugging */ error_reporting(0); //set the error handler to be used set_error_handler(handler); /* Create the rest of your page here. We will not be displaying any errors We will be e-mailing the admin an error message

- 252 -

Keep in mind that fatal errors will still halt the execution, but they will still notify the admin */ ?> N hot ng th no? Vi cch ny a ra thng bo n ngi dng nhng thng bo li thng thng nhng thn thin i vi ngi dng bng cch dng hm email . V vy, vi cch n gin bn chy trang ny v bn nhn mt li, i khi a ra thng tin c ch cho ngi dng.

9.3. Mt phng php khc ca vic thi hnh li


Bn va a ra nhng thng bo li thng thng, c mt phng php khc t nhin hn chn mnh echo kim tra gi tr ca bin v xem mnh iu kin ng hay cha. PHP cng cung cp vi thng bo li cho nhng li n gin.

9.3.1.

Nhng ngoi l

PHP5 gii thiu c tnh mi gi l nhng ngoi l. Nhng iu tng t nh ngn ng Java. Nhng iu kin iu khin ngai l trong ng dng Web v cho bn mt cch hiu qu iu khin nhng li gp phi. PHP5 s dng phng php tm kim, nm bt iu khin nhng ngoi l. V d v vic th nghim vi nhng ngoi l Trong bi ny, bn s to mt phin bn a ra vi ngoi l thy chng lm vic th no 1. To mt trang PHP vi on code sau: <?php //$x = ; //Throws null Exception //$x = 500; //Throws less than Exception $x = 1000; //Throws NO Exception try { if ($x == ) { throw new Exception(Variable cannot be null);
- 253 -

} if ($x < 1000) { throw new Exception(Variable cannot be less than 1000); } echo Validation Accepted!; } catch (Exception $exception) { echo $exception->getMessage(); echo - Validation Denied!; } ?> 2. Lu on code vi tn exceptions.php v chy n trong trnh duyt. Bn khng thy bt c li no 3. Thay $x= 1000 bng $x= 4. Lu file v chy mt ln na, bn s thy mt thng bo rng 5. Thay $x= bng $x= 500 6. Lu file li v bn s thy thng bo less than 1000 N hot ng th no? S hu ch ca khi ny l tt c nhng iu kin phi gp hoc thy. y l hu ch khi bn cn kim tra nhiu bin hay khng mun thng qua nhiu mnh if/else cho vic tm ra kt qu. Tt c yu cu trong mnh if m ng th s thc hin, s a ra thng bo li thch hp ph thuc vo ngoi l gp phi. Trong vng thy li, bn c th thi hnh li trong bt c phng php no bn thch. Bn mun gi n ngi dng l bn mun thit lp vi bin mc nh, kt ni c hai hoc bt c ci g m bn cn. Hu ch ca vic s dng nhng ngoi l l cch chng a ra nhng hm v code. V d, nu bn c mt hm gi l hm B m bn trong th gi hm C v mt ngoi l trong hm C thng qua vic s dng try{} , ngoi l s dng vic x l phin bn nu khi c tm thy

- 254 -

Nu khng tm thy try{}catch{} khi thi hnh code, li s xut hin trn mn hnh thng bo ngoi l xut hin. Ngoi l cng c th thng qua nh sau: <?php try { throw new Exception(This will be rethrown); } catch (Exception $e) { throw $e; } ?>

9.3.2.

Khng gp nhng iu kin

Khng phi trong bt c on m no cng gp li, n ch xut hin khi lin quan n PHP, bng vic s dng vi phng php khc nhau trong on m kim tra li xut hin. <input type=submit name=submit value=Submit> Bn ang kim tra thy nt nhn khi no hoc s khng thi hnh thng tin khi no. Bn c th lm iu ny nh sau: if ($_POST[submit] == submit) { //form has been submitted } else { //form has not been submitted }

9.3.3.

Phn tch li

Phn tch li l kiu li chnh, n xut hin khi bn qun mt du chm phy, Nhng li ny khng lm vi mnh iu kin, chng l c php chnh l nguyn nhn
- 255 -

dng vic thc thi. Phn tch li xu hn nhng li nng v chng khng th chy tt c nhng phin bn, chng cho bn thng tin v li.

9.4. Tm li.
Bn c c nhiu th trong chng ny, t vic bit c nhng li cho n vic phng nga nhng li, gip ngi lp trnh lm th no phng nga li, tm ra li.

- 256 -

You might also like