Hướng dẫn code multi language trong php mysql

Ứng dụng đã cơ bản hoàn thành. Chỉ còn viết sự kiện cho các button để thay đổi ngôn ngữ là xong:

protected void ibtEnglish_Click(object sender, ImageClickEventArgs e) { Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); LoadString(Thread.CurrentThread.CurrentCulture); } protected void ibtVietNamese_Click(object sender, ImageClickEventArgs e) { Thread.CurrentThread.CurrentCulture = new CultureInfo("vi-VN"); LoadString(Thread.CurrentThread.CurrentCulture); }

Trên đây chỉ là ứng dụng rất cơ bản và đơn giản với mục đích để giới thiệu là chính. Hy vọng các bạn sẽ nghiên cứu chuyên sâu hơn để có thể áp dụng vào thực tế.

To make your site extensible and easy to support future, additional languages; I’d suggest using MySQL in its intended fashion and create a relational schema.

If you have topics, and topic titles are to be translatable, then you’ll need three tables: a topics table, a languages table, and a table that joins the two.

Your topics table is easy: you just need a primary key, and any other language-independent columns (such as created, modified etc). For the languages table, store again a primary key, the language name, and maybe an ISO short code for consistent naming/identification.

Finally, your join table (could be called languages_topics) is where the associations happen. You would have two foreign keys (topic_id and language_id) and another column that actually holds the localised value.

For example, if English is language ID 1 and French is language ID 2, then your table could look as follows:

+----------+-------------+----------------+
| topic_id | language_id | value          |
+----------+-------------+----------------+
| 1        | 1           | Verbal Warning |
| 1        | 2           | Avis verbal    |
+----------+-------------+----------------+

As you can see, a topic can have multiple rows in this table, with a record per language to offer up the translations.

I know this maybe doesn’t exactly answer your question, but should set you on the right path on how best to store your data. Languages can easily be added in the future without needing to modify your database schema.

  • 1. cntt cña c¬ quan ®¶ng PHP & MySQL 1 Ban chØ ®¹o c«ng nghÖ th«ng tin cña c¬ quan ®¶ng *** TµI liÖu tham kh¶o Ng«n ng÷ lËp tr×nh pHP Hµ néi, 2003
  • 2. cntt cña c¬ quan ®¶ng PHP & MySQL 2 PhÇn I : Giíi thiÖu ng«n ng÷ lËp tr×nh PHP ch−¬ng i : Ng«n ng÷ lËp tr×nh pHP I. Giíi thiÖu PHP vµ m«i tr−êng lËp tr×nh web. 1. PHP lµ g× ? C¸i tªn PHP ban ®Çu ®−îc viÕt t¾t bëi côm tõ Personal Home Page, vµ ®−îc ph¸t triÓn tõ n¨m 1994 bëi Rasmus Lerdorf. Lóc ®Çu chØ lµ mét bé ®Æc t¶ Perl, ®−îc sö dông ®Ó l−u dÊu vÕt ng−êi dïng trªn c¸c trang web. Sau ®ã, Rasmus Lerdorf ®· ph¸t triÓn PHP nh− lµ mét m¸y ®Æc t¶ (Scripting engine). Vµo gi÷a n¨m 1997, PHP ®· ®−îc ph¸t triÓn nhanh chãng trong sù yªu thÝch cña nhiÒu ng−êi. PHP ®· kh«ng cßn lµ mét dù ¸n c¸ nh©n cña Rasmus Lerdorf vµ ®· trë thµnh mét c«ng nghÖ web quan träng. Zeev Suraski vµ Andi Gutmans ®· hoµn thiÖn viÖc ph©n tÝch có ph¸p cho ng«n ng÷ ®Ó råi th¸ng 6 n¨m 1998, PHP3 ®· ra ®êi (phiªn b¶n nµy cã phÇn më réng lµ *.php3). Cho ®Õn tËn thêi ®iÓm ®ã, PHP ch−a mét lÇn ®−îc ph¸t triÓn chÝnh thøc, mét yªu cÇu viÕt l¹i bé ®Æc t¶ ®−îc ®−a ra, ngay sau ®ã PHP4 ra ®êi (phiªn b¶n nµy cã phÇn më réng kh«ng ph¶i lµ *.php4 mµ lµ *.php). PHP4 nhanh h¬n so víi PHP3 rÊt nhiÒu. PHP b©y giê ®−îc gäi lµ PHP Hypertext PreProcesor. 2. T¹i sao ph¶i sö dông PHP Nh− chóng ta ®· biÕt, cã rÊt nhiÒu trang web ®−îc x©y dùng bëi ng«n ng÷ HTML (HyperText Markup Language). §©y chØ lµ nh÷ng trang web tÜnh, nghÜa lµ chóng chØ chøa ®ùng mét néi dung cô thÓ víi nh÷ng dßng v¨n b¶n ®¬n thuÇn, h×nh ¶nh ,vµ cã thÓ ®−îc sù hç trî bëi ng«n ng÷ JavaScript, hoÆc Java Apple. Nh÷ng trang web nh− vËy ng−êi ta th−êng gäi lµ client- side. Tuy nhiªn, Internet vµ Intranets ®· ®−îc sö dông cho c¸c øng dông cÇn tíi c¬ së d÷ liÖu. C¸c trang øng dông nh− vËy ®−îc gäi lµ trang web ®éng, bëi v× néi dung cña chóng lu«n thay ®æi tïy thuéc vµo d÷ liÖu vµ ng−êi sö dông. PHP lµ ng«n ng÷ lµm ®−îc nh÷ng ®iÒu nh− vËy. B»ng c¸ch ch¹y ch−¬ng tr×nh PHP trªn m¸y chñ Web server, b¹n cã thÓ t¹o ra c¸c øng dông
  • 3. cntt cña c¬ quan ®¶ng PHP & MySQL 3 cã sù t−¬ng t¸c víi c¬ së d÷ liÖu ®Ó t¹o ra nh÷ng trang web vµ ®©y ®−îc gäi lµ trang web ®éng. Chóng ta h·y xem xÐt c¸ch ho¹t ®éng cña trang web ®−îc viÕt b»ng ng«n ng÷ HTML vµ PHP nh− thÕ nµo. Víi c¸c trang HTML : Khi cã yªu cÇu tíi mét trang web tõ phÝa ng−êi sö dông (browser). Web server thùc hiÖu ba b−íc sau : + §äc yªu cÇu tõ phÝa browser, + T×m trang web trªn server. + Göi trang web ®ã trë l¹i cho browser (nÕu t×m thÊy) qua m¹ng Internet hoÆc Intranet . Víi c¸c trang PHP : Kh¸c víi c¸c trang HTML, khi mét trang PHP ®−îc yªu cÇu, web server ph©n tÝch vµ thi hµnh c¸c ®o¹n m· PHP ®Ó t¹o ra trang HTML. §iÒu ®ã ®−îc thÓ hiÖn b»ng bèn b−íc sau : + §äc yªu cÇu tö phÝa browser. + T×m trang web trªn server. + Thùc hiÖn c¸c ®o¹n m· PHP trªn trang web ®ã ®Ó söa ®æi néi dung cña trang. + Göi trë l¹i néi dung cho browser (®©y lµ trang HTML cã thÓ hiÓn thÞ ®−îc bëi tr×nh duyÖt Internet Explorer hoÆc tr×nh duyÖt nµo ®ã). Tãm l¹i, sù kh¸c nhau gi÷a HTML vµ PHP lµ HTML kh«ng ®−îc thùc hiÖn trªn m¸y chñ Web server cßn c¸c trang *.php viÕt b»ng c¸c ®o¹n m· PHP ®−îc thùc hiÖn trªn m¸y chñ Web server do ®ã nã linh ®éng vµ mÒm dÎo h¬n . Trang html Web server + Đọc yêu cầu từ browser + Tìm file.htm trên server + Gửi lại cả file.htm cho browser Request http://domain/file.htm Web server + Đọc yêu cầu từ browser + Tìm trang web(file.php) trên server + Thực hiện các đoạn mã PHP + Gửi trả lại nội dung cho browser Request http://domain/file.php Kết xuất
  • 4. cntt cña c¬ quan ®¶ng PHP & MySQL 4 3. Nh÷ng ®iÓm m¹nh cña PHP -PHP thùc hiÖn víi tèc ®é rÊt nhanh vµ hiÖu qu¶ .Mét Server b×nh th−êng cã thÓ ®¸p øng ®−îc hµng triÖu truy cËp tíi trong mét ngµy. PHP hç trî kÕt nèi tíi rÊt nhiÒu hÖ CSDL kh¸c nhau: PostgreSQL,mSQL,Oracle, dbm, filePro ,Hyperware, informix,InterBase, Sybase, ... Ngoµi ra cßn hç trî kÕt nèi víi ODBC th«ng qua ®ã cã thÓ kÕt nèi víi nhiÒu ng«n ng÷ kh¸c mµ ODBC hç trî. -PHP cung cÊp mét hÖ thèng th− viÖn phong phó : Do PHP ngay tõ ®Çu ®−îc thiÕt kÕ nh»m môc ®Ých x©y dùng vµ ph¸t triÓn c¸c øng dông trªn web nªn PHP cung cÊp rÊt nhiÒu hµm x©y dùng s½n gióp thùc hiÖn c¸c c«ng viÖc rÊt dÔ dµng : göi, nhËn mail ,lµm viÖc víi c¸c cookie, vµ nhiÒu thø kh¸c n÷a . -PHP lµ mét ng«n ng÷ rÊt dÔ dïng, dÔ häc vµ ®¬n gi¶n h¬n nhiÒu so víi c¸c ng«n ng÷ kh¸c nh− Perl, Java. NÕu b¹n ®· biÕt ng«n ng÷ C th× mäi viÖc sÏ hoµn toµn thuËn lîi . -PHP cã thÓ sö dông ®−îc trªn nhiÒu hÖ ®iÒu hµnh, chóng ta cã thÓ viÕt chóng trªn Unix, Lunix vµ c¸c phiªn b¶n cña Windows. Vµ cã thÓ ®em m· PHP nµy ch¹y trªn c¸c hÖ ®iÒu hµnh kh¸c mµ kh«ng ph¶i söa ®æi l¹i m·. -PHP lµ ng«n ng÷ m· nguån më. II. BiÕn, h»ng sè vµ kiÓu d÷ liÖu trong PHP. 1. KiÓu d÷ liªu . PHP cã ba kiÓu d÷ liÖu c¬ b¶n : interger, double vµ string. Ngoµi ra cßn cã c¸c kiÓu d÷ liÖu kh¸c (nh−ng kh«ng ph¶i c¸c kiÓu d÷ liÖu c¬ b¶n) nh− arrays (c¸c kiÓu d÷ liÖu m¶ng), objects (c¸c kiÓu d÷ liÖu ®èi t−îng). Interger lµ kiÓu chiÕm 4 byte bé nhí ,gi¸ trÞ cña nã trong kho¶ng –2 tû tíi + 2 tû. KiÓu Double lµ kiÓu sè thùc ,ph¹m vi biÓu diÔn ± (10-308 ÷ 10308 ). KiÓu string dïng ®Ó chøa c¸c gi¸ trÞ bao gåm c¸c ký tù vµ con sè . VÝ dô : 2 // ®©y lµ kiÓu interger 1.0 // ®©y lµ kiÓu double “2” // ®©y lµ kiÓu string
  • 5. cntt cña c¬ quan ®¶ng PHP & MySQL 5 “2 hours” // ®©y lµ mét kiÓu string kh¸c 2. H»ng sè H»ng sè lµ nh÷ng gi¸ trÞ kh«ng ®æi. Chóng ta th−êng dïng h»ng sè ®Ó l−u c¸c gi¸ trÞ kh«ng ®æi trong suèt ch−¬ng tr×nh nh− : nhiÖt ®é (00 C), c¸c gi¸ trÞ thêi gian chØ sù chuyÓn giao gi÷a s¸ng ,ch−a ,chiÒu ,tèi ... a. Khai b¸o h»ng sè : Ta dïng hµm define() ®Ó khai b¸o h»ng sè : define(“COMPANY”, “Phop’s Bicycles”); define(“YELLOW”, “

    FFFF00”); define(“VERSION”, 4); define(“NL”, “
    n”); Trong vÝ dô trªn chóng ta ®· dïng hµm define() ®Ó khai b¸o h»ng sè NL. H»ng sè nµy lµ mét thÎ ng¾t dßng trong HTML. Chóng ta sÏ sö dông c¸c h»ng sè trong PHP nh− sau : echo (“Employment at ”. COMPANY. NL); C¸ch viÕt trªn còng gièng nh− c¸c viÕt sau: echo (“Employment at Phop’s Bicycles
    n”); Chó ý : h»ng sè ph¶i ë ngoµi hai dÊu “ vµ ”. Trêng hîp sau lµ kh«ng cã hiÖu lùc : echo (“Employment at COMPANY NL”);. Khi thùc hiÖn nã sÏ cho kÕt qu¶ lµ : “Employment at COMPANY NL”. Hµm defined() : hµm nµy dïng ®Ó kiÓm tra xem mét h»ng sè nµo ®ã ®· ®−îc khai b¸o ch−a. VÝ dô : if ( defined (“YELLOW”)) { echo (“n”); }

  • 6. cntt cña c¬ quan ®¶ng PHP & MySQL 6 b. C¸c h»ng sè ®· ®−îc ®Þnh nghÜa trong PHP (Built-in Constants): §Ó hç trî cho ng−êi lËp tr×nh, PHP cung cÊp s½n c¸c h»ng sè nh− : c¸c biÕn m«i trêng, c¸c biÕn cña Web server Apache ... Ngêi lËp tr×nh cã thÓ sö dông hµm phpinfo() ®Ó xem c¸c gi¸ trÞ nµy. + H»ng sè nguyªn : ®©y lµ nh÷ng gi¸ trÞ cã kiÓu integer. VÝ dô : 10 + H»ng sè thùc: ®©y lµ nh÷ng gi¸ trÞ cã kiÓu double. VÝ dô : 10.00 + H¾ng ký tù : ®©y lµ mét x©u ký tù ®Æt trong dÊu ngoÆc ®¬n hoÆc kÐp. VÝ dô : “Ng«n ng÷ lËp tr×nh PHP”.
  • 7. cntt cña c¬ quan ®¶ng PHP & MySQL 7 3. BiÕn vµ gi¸ trÞ logic. + Còng gièng víi C/C++, PHP kh«ng cã kh¸i niÖm TRUE vµ FALSE. C¸c gi¸ trÞ TRUE ®−îc hiÓu lµ nh÷ng gi¸ trÞ b»ng 1 vµ gi¸ trÞ FALSE lµ nh÷ng gi¸ trÞ b»ng 0 hoÆc x©u rçng . + Khi sö dông biÕn chóng ta kh«ng cÇn khai b¸o kiÓu . VÝ dô : $a = 1; // $a lµ mét biÕn kiÓu integer. $a = 1.2; // b©y giê $a lµ mét biÕn kiÓu double. $a = “A” ; // b©y giê $a l¹i lµ mét biÕn kiÓu string. + NÕu nh− thùc hiÖn phÐp to¸n gi÷a biÕn cã kiÓu sè vµ kiÓu string, PHP sÏ coi chuçi lµ mét d·y sè nh− sau : $str = “222B Baker Street”; Ta thÊy biÕn $str cã gi¸ trÞ kiÓu string, vµ nÕu céng sè 3 víi gi¸ trÞ nµy th× : $x = 3 + $str ; // $x = 225 khi ®ã biÕn $x nhËn ®−îc gi¸ trÞ 255 v× PHP ®· céng 3 víi ba sè ®Çu. Nhng nÕu ta in gi¸ trÞ cña biÕn $str th× echo ($str); // print : “222B Baker Street” Chó ý r»ng c¸c phÐp to¸n gi÷a sè vµ chuçi chØ ®óng khi ký tù ®Çu cña chuçi lµ sè . + Ta còng cã thÓ lµm thay ®æi kiÓu gi¸ trÞ cña mét biÕn b»ng c¸ch Ðp kiÓu $a = 11.2; // biÕn $a cã kiÓu double $a = (int) $a; // b©y giê $a cã kiÓu integer ,gi¸ trÞ lµ 11 $a = (double) $a; // b©y giê $a l¹i cã kiÓu double, gi¸ trÞ lµ 11.0 $b = (string) $a ; // biÕn $b cã kiÓu string ,gi¸ trÞ lµ “11” Còng ph¶i biÕt r»ng PHP tù ®éng chuyÓn ®æi kiÓu rÊt tèt. NÕu thËt sù cÇn thiÕt chóng ta míi ph¶i dïng c¸ch trªn.
  • 8. cntt cña c¬ quan ®¶ng PHP & MySQL 8 + C¸c hµm lµm viÖc víi biÕn gettype() : hµm nµy tr¶ l¹i kiÓu cña mét biÕn nµo ®ã. Gi¸ trÞ tr¶ vÒ cã thÓ lµ : “integer” “double” “string” “array” “object” “class” “unknown type” vÝ dô : if (gettype($user_input) == “integer”) { $age = $user_input; } settype() : hµm nµy Ðp kiÓu cho mét biÕn nµo ®ã. NÕu thµnh c«ng hµm tr¶ vÒ gi¸ trÞ 1 (true) ,ng−îc l¹i lµ 0 (false). vÝ du : $a = 7.5; settype($a, “integer”); if (settype($a, “array”)){ echo (“Conversion succeeded. ”); }else{ echo (“Conversion error. ”); } isset() vµ unset() : Hµm isset() kiÓm tra mét biÕn ®· ®−îc g¸n gi¸ trÞ hay ch−a, hµm unset() sÏ gi¶i phãng bé nhí cho mét biÕn nµo ®ã . vÝ dô :
  • 9. cntt cña c¬ quan ®¶ng PHP & MySQL 9 $id = “323bb”; if (isset($id)) { echo (“D÷ liÖu ®· ®−îc g¸n”); }else{ echo (“D÷ liÖu ch−a ®−îc g¸n”); } unset($id); if(!isset($id)) { echo (“D÷ liÖu ®· ®−îc gi¶i phãng”); } empty() : Còng gièng hµm isset(), hµm empty() sÏ tr¶ vÒ gi¸ trÞ 1 (true) nÕu mét biÕn lµ rçng vµ ng−îc l¹i 0 (false). §èi víi biÕn cã kiÓu sè gi¸ trÞ b»ng 0 ®−îc coi lµ rçng, biÕn kiÓu string ®−îc coi lµ rçng nÕu x©u lµ x©u rçng. vÝ dô: echo empty($new) ; // true $new = 1; echo empty($new); // false $new = “”; echo empty($new); // true $new = 0; echo empty($new); // true $new = “So 323”; echo empty($new); // false unset($new); echo empty($new); // true
  • 10. cntt cña c¬ quan ®¶ng PHP & MySQL 10 III. C¸c to¸n tö + B¶ng c¸c phÐp to¸n sè häc PhÐp to¸n ý nghÜa VÝ dô Gi¶i thÝch + - * / % PhÐp céng PhÐp trõ PhÐp nh©n PhÐp chia Chia d 7 + 2 7 – 2 7 * 2 7 / 2 7 % 2 Thùc hiÖn phÐp céng gi÷a 7 vµ 2 : 9 Thùc hiÖn phÐp trõ gi÷a 7 vµ 2 : 5 Thùc hiÖn phÐp nh©n gi÷a 7 vµ 2 : 14 Thùc hiÖn phÐp chia gi÷a 7 vµ 2 : 3.5 Thùc hiÖn phÐp chia d gi÷a 7 vµ 2 : 1 Ta cã thÓ viÕt c¸c phÐp to¸n ng¾n gän nh− b¶ng sau : Khi viÕt T−¬ng ®−¬ng víi $h += $i $h -= $i $h *= $i $h /= $i $h %= $i $h = $h + $i $h = $h - $i $h = $h * $i $h = $h / $i $h = $h % $i + PhÐp g¸n : vÝ dô : $x = 1; $y = $x + 1; $length = $area / $width;
  • 11. cntt cña c¬ quan ®¶ng PHP & MySQL 11 + B¶ng c¸c phÐp to¸n quan hÖ PhÐp to¸n ý nghÜa VÝ dô Gi¶i thich == < > <= >= != <> So s¸nh b»ng So s¸nh nhá h¬n So s¸nh lín h¬n Nhá h¬n hoÆc b»ng Lín h¬n hoÆc b»ng So s¸nh kh¸c So s¸nh kh¸c $h == $i $h < $i $h > $i $h <= $i $h => $i $h != $i $h <> $i KiÓm tra $h vµ $i cã b»ng nhau kh«ng KiÓm tra $h cã nhá h¬n $i kh«ng KiÓm tra $h cã lín h¬n $i kh«ng KiÓm tra $h cã nhë h¬n hoÆc b»ng $i KiÓm tra $h cã lín h¬n hoÆc b»ng $i KiÓm tra $h cã kh¸c $i kh«ng KiÓm tra $h cã kh¸c $i kh«ng C¸c phÐp so s¸nh th−êng dïng kiÓm tra ®iÒu kiÖn trong c¸c c©u lÖnh ®iÒu khiÓn mµ ta sÏ häc ë bµi sau . + B¶ng c¸c phÐp to¸n logic PhÐp to¸n logic cïng víi to¸n h¹ng t¹o thµnh biÓu thøc logic. BiÓu thøc logic cã thÓ cã gi¸ trÞ lµ 1 (true) hoÆc 0 (false) . To¸n h¹ng a To¸n h¹ng b a && b a || b !a !b 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 0 1 1 0 1 0 1 + C¸c phÐp to¸n víi biÕn kiÓu string .
  • 12. cntt cña c¬ quan ®¶ng PHP & MySQL 12 Ta sö dông dÊu “. “ ®Ó ghÐp hai biÕn kiÓu string víi nhau . vÝ dô : $first = “Phineas”; $last = “Phop”; $full = $first. “ ”. $last; // $full = “Phineas Phop” ; echo ($full); Ta cã thÓ ghÐp hai x©u nh− sau: echo ($last. “’s Bicycles”); //print : Phop’s Bicycles §Ó cã thÓ chÌn mét biÕn vµo trong hµng cã kiÓu string th× tªn biÕn ph¶i ®Ó trong dÊu ®ãng më ngoÆc nhän. echo (“${last}’s Bicycles”); + C¸c phÐp to¸n thao t¸c møc bit. C¸c phÐp to¸n thao t¸c møc bit t¸c ®éng lªn tõng bit cña to¸n h¹ng . Ký hiÖu ý nghÜa & | AND bit OR bit XOR bit B¶ng c¸c phÐp to¸n nh− sau : & KÕt qu¶ | KÕt qu¶ KÕt qu¶ 1&1 1&0 0&1 0&0 1 0 0 0 1 | 1 1 | 0 0 | 1 0 | 0 1 1 1 0 1^1 1^0 0^1 0^0 0 1 1 0 PHP còng hç trî c¸c phÐp dÞch ph¶i vµ dÞch tr¸i >> : dÞch ph¶i << : dÞch tr¸i Gi¶ sö $a lµ mét biÕn nguyªn th× phÐp to¸n : $a >> n lµm cho c¸c bit trong $a bÞ dÞch ph¶i ®i n vÞ trÝ. T−¬ng tù ta cã phÐp dÞch tr¸i .
  • 13. cntt cña c¬ quan ®¶ng PHP & MySQL 13 vÝ dô : 11 >> 2 = 2 ; v× : 11 (1011) >> 2 2 (0010) + C¸c phÐp to¸n t¨ng gi¶m : - PhÐp t¨ng : phÐp t¨ng (to¸n tö t¨ng) t¨ng gi¸ trÞ cña to¸n h¹ng lªn mét ®¬n vÞ. $a : $a ®−îc sö dông råi míi t¨ng $a : $a t¨ng råi míi ®−îc sö dông - PhÐp gi¶m : t−¬ng tù nh− phÐp t¨ng, kh¸c lµ gi¸ trÞ bÞ gi¶m ®i mét ®¬n vÞ. $a : $a ®−îc sö dông råi míi gi¶m $a : $a gi¶m råi míi ®−îc sö dông vÝ dô : $a = 10; // $a b»ng 10 $b = $a++ ; // $a b»ng 11 nh−ng $b b»ng 10 $a = 10; // $a b»ng 10 $b = -- $a ; // $a b»ng 9 vµ $b b»ng 9 + PhÐp to¸n ®iÒu kiÖn. ? : PhÐp to¸n ®iÒu kiÖn cïng víi to¸n h¹ng t¹o nªn biÓu thøc ®iÒu kiÖn. Ta ký hiÖu e1 ,e2, e3 lµ ba to¸n h¹ng. BiÓu thøc cã d¹ng : e1 ? e2 : e3 NÕu e1 != 0 th× gi¸ trÞ cña biÓu thøc ®iÒu kiÖn lµ e2 NÕu e1 == 0 th× gi¸ trÞ cña biÓu thøc ®iÒu kiÖn lµ e3 vÝ dô : t×m max max = $a>$b ? a : b ;
  • 14. cntt cña c¬ quan ®¶ng PHP & MySQL 14 + To¸n tö sizeof (®èi t−îng) : PhÐp to¸n sizeof cho biÕt kÝch th−íc (tÝnh b»ng byte ) « nhí mµ ®èi t−îng chiÕm trong bé nhí. §èi t−îng ë ®©y cã kiÓu lµ integer, double, string. vÝ dô : $a = 10; echo sizeof($a); //sÏ in ra mµn h×nh lµ : 4 IV. C¸c c©u lÖnh ®iÒu khiÓn 1. LÖnh if_else : ®©y lµ lÖnh rÏ nh¸nh cã ®iÒu kiÖn . a. D¹ng 1 : if ( biÓu thøc ) c©u lÖnh; C©u lÖnh ë ®©y t−¬ng ®−¬ng víi mét khèi lÖnh. Mét khèi lÖnh ®−îc ®Æt trong dÊu ngoÆc kÐp. ý nghÜa : + NÕu biÓu thøc kh¸c kh«ng ,th× c©u lÖnh ®−îc thùc hiÖn. + NÕu biÓu thøc b»ng kh«ng, th× c©u lÖnh kh«ng ®−îc thùc hiÖn b. D¹ng 2 : if ( biÓu thøc ) c©u lÖnh 1; else c©u lÖnh 2; ý nghÜa : + NÕu biÓu thøc kh¸c kh«ng ,th× c©u lÖnh 1 ®−îc thùc hiÖn. + NÕu biÓu thøc b»ng kh«ng, th× c©u lÖnh 2 ®−îc thùc hiÖn Chó ý : * C©u lÖnh 1 ë d¹ng 2 lµ lÖnh if_else
  • 15. cntt cña c¬ quan ®¶ng PHP & MySQL 15 + NÕu l−îng else b»ng l−îng If th× else thuéc vÒ If gÇn nhÊt theo tõng cÆp tõ trong ra ngoµi. VÝ dô : $a = 10; $b = 10; $c = 3; $d = 3; $e = 12; $f = 8; if($a == $b) if($c == $d) if($e == $f) $max = $e; else $max = $f; else $max = $d; else $max = $b echo $max ; //printf max = 8 + NÕu l−îng else Ýt h¬n l−îng If th× else thuéc vÒ If ngÇn nhÊt theo tõng cÆp tõ trong ra ngoµi. VÝ dô : T−¬ng ®−¬ng víi : * C©u lÖnh 2 cña d¹ng 2 lµ elseif :
  • 16. cntt cña c¬ quan ®¶ng PHP & MySQL 16 B¾t nguån tõ : if ( biÓu_thøc1 ) c©u_lÖnh 1; else if ( biÓu_thøc 2 ) c©u_lÖnh 2; else if ( biÓu_thøc 3 ) c©u_lÖnh 3; ... else if ( biÓu_thøc i ) c©u_lÖnh i; ... else c©u_lÖnh n; Cã thÓ viÕt l¹i nh− sau: if ( biÓu_thøc1 ) c©u_lÖnh 1; elseif (biÓu_thøc 2) c©u_lÖnh 2; elseif (biÓu_thøc 3) c©u_lÖnh 3; ... elseif (biÓu_thøc i) c©u_lÖnh i; ... else c©u_lÖnh n; C©u lÖnh elseif t¹o ra lÖnh rÏ nh¸nh cã ®iÒu kiÖn trong ®ã thùc hiÖn 1 trong n c¸ch kh¸c nhau. - NÕu biÓu_thøc i kh¸c kh«ng (i = 1,..n-1) th× thùc hiÖn c©u lÖnh i . - NÕu biÓu_thøc i b»ng kh«ng (i = 1, ..n-1) th× c©u lÖnh thø n ®−îc thùc hiÖn. 2. C©u lÖnh switch : switch (biÓu_thøc n) { case n1: c©u lÖnh 1; break; case n2: c©u lÖnh 2; break; ... case nn: c©u lÖnh nn; [default: c©u lÖnh] }
  • 17. cntt cña c¬ quan ®¶ng PHP & MySQL 17 C©u lÖnh switch lµ c©u lÖnh rÏ nh¸nh cã ®iÒu kiÖn trong ®ã thùc hiÖn mét trong n c¸i rÏ nh¸nh. +NÕu biÓu_thøc n = ni (i = 1, .. n) th× c©u lÖnh sau case ni ®−îc thùc hiÖn cho ®Õn khi gÆp lÖnh break hoÆc dÊu ngoÆc “}” +NÕu biÓu_thøc n != mäi ni (i = 1, .. n) mµ cã nh¸nh Default th× c¸c c©u lÖnh sau Default ®−îc thùc hiÖn. VÝ dô : 3. C©u lÖnh FOR: D¹ng lÖnh : for (biÓu_thøc 1; biÓu_thøc 2; biÓu_thøc 3) c©u lÖnh ; LÖnh for lµ lÖnh t¹o chu tr×nh cã ®iÒu kiÖn. B−íc 1 : tÝnh biÓu_thøc 1 B−íc 2 : tÝnh biÓu_thøc 2 : NÕu biÓu_thøc 2 kh¸c 0 th× thùc hiÖn c©u lÖnh vµ sang b−íc 3.
  • 18. cntt cña c¬ quan ®¶ng PHP & MySQL 18 NÕu biÓu_thøc 2 b»ng 0 th× kÕt thóc vßng for B−íc 3 : tÝnh biÓu_thøc 3 vµ quay l¹i b−íc 2. + biÓu_thøc 1, biÓu_thøc 2, biÓu_thøc 3 lµ c¸c thµnh phÇn. Mçi thµnh phÇn cã thÓ gåm nhiÒu biÓu thøc. Khi ®ã mçi biÓu thøc ®−îc viÕt c¸ch nhau mét dÊu phÈy (“,”). +C¸c biÓu thøc ®−îc tÝnh lÇn l−ît tõ tr¸i qua ph¶i +BiÓu thøc trong biÓu_thøc 2 quyÕt ®Þnh thùc hiÖn th©n cña for. VÝ dô : ”); } ?> +Cã thÓ v¾ng mÆt bÊt kÓ thµnh phÇn nµo. NÕu v¾ng mÆt biÓu_thøc 2 th× c©u lÖnh lu«n ®−îc thùc hiÖn. MÆc dï v¾ng mÆt vÉn ph¶i cã dÊu chÊm phÈy (“;”) VÝ dô : +NÕu v¾ng biÓu_thøc 1 vµ biÓu_thøc 3 th× : for ( ; biÓu_thøc 2 ; ) cau_lenh ; t−¬ng ®−¬ng víi : while (biÓu_thøc 2) cau_lenh ; 4. C©u lÖnh WHILE while (biÓu_thøc) c©u lÖnh ;
  • 19. cntt cña c¬ quan ®¶ng PHP & MySQL 19 LÖnh while lµ mét lÖnh t¹o chu tr×nh cã ®iÒu kiÖn. §iÒu kiÖn thùc hiÖn ®−îc kiÓm tra ë ®Çu chu tr×nh. B−íc 1 : TÝnh biÓu thøc NÕu biÓu thøc kh¸c kh«ng, sang b−íc 2 NÕu biÓu thøc b»ng kh«ng, kÕt thóc vßng while B−íc 2 : Thùc hiÖn c©u lÖnh. Quay l¹i b−íc 1. Chó ý : + BiÓu thøc cã thÓ bao gåm nhiÒu biÓu thøc. Khi ®ã c¸c biÓu thøc ®−îc viÕt c¸ch nhau mét dÊu phÈy ,vµ ®−îc tÝnh lÇn l−ît tõ tr¸i qua ph¶i. BiÓu thøc cuèi cïng quyÕt ®Þnh thùc hiÖn c©u lÖnh. + Kh«ng ®−îc phÐp v¾ng mÆt biÓu thøc + §Ó t¹o chu tr×nh v« tËn th× while(1) { ... if (biÓu_thøc) break; ... } VÝ dô : $i = 11; while (--$i) { if (my_function($i) == “error”) { break; } ++ $number; }
  • 20. cntt cña c¬ quan ®¶ng PHP & MySQL 20 5. LÖnh DO ... WHILE D¹ng lÖnh : do { c©u lÖnh; }while (biÓu_thøc); LÖnh do ... while lµ lÖnh t¹o chu tr×nh cã ®iÒu kiÖn, trong ®ã ®iÒu kiÖn thùc hiÖn chu tr×nh ®−îc kiÓm tra ë cuèi chu tr×nh. Ho¹t ®éng : B−íc 1 : Thùc hiÖn c©u lÖnh B−íc 2 : TÝnh biÓu thøc biÓu_thøc +NÕu biÓu thøc biÓu_thøc kh¸c kh«ng th× quay l¹i b−íc 1 +NÕu biÓu thøc biÓu_thøc b»ng kh«ng th× kÕt thóc do ... while. VÝ dô : n”); $i = 0; $total = 10; do { echo (“t n”); }while(++ $i < $total); echo (“n”); ?> 6. LÖnh break Lµ lÖnh rÏ nh¸nh kh«ng ®iÒu kiÖn vµ th−êng dïng ®Ó ra khái th©n cña switch, while, do ... while, for .
  • 21. cntt cña c¬ quan ®¶ng PHP & MySQL 21 LÖnh break chØ cho phÐp tho¸t khái th©n c¸c lÖnh bªn trong nhÊt chøa nã. 7. LÖnh continue Lµ lÖnh rÏ nh¸nh kh«ng ®iÒu kiÖn .LÖnh th−êng dïng ®Ó b¾t ®Çu l¹i mét chu tr×nh míi trong c¸c lÖnh for, while, do ... while mµ kh«ng cÇn thùc hiÖn hÕt toµn bé th©n cña cña lÖnh t¹o chu tr×nh. 8. Khai b¸o tiÒn xö lý include vµ require . §Ó sö dông c¸c ®o¹n m· ë bªn ngoµi, chóng ta cã thÓ sö dông khai b¸o tiÒn xö lý include vµ require. Cho phÐp chóng ta x©y dùng c¸c hµm c¸c h»ng sè, vµ bÊt kú ®o¹n m· nµo sau ®ã cã thÓ chÌn vµo c¸c ®o¹n script. Require kh¸c include lµ, nã cã thÓ lµm thay ®æi néi dung cña trang hiÖn t¹i khi biªn dÞch, c¸c trang nµy dïng ®Ó khai b¸o c¸c biÕn, c¸c h»ng sè hay c¸c ®o¹n m· ®¬n gi¶n kh«ng cã vßng lÆp. Khi ®ã include cho phÐp thùc hiÖn c¸c c©u lÖnh phøc t¹p – cã c©u lÖnh t¹o chu tr×nh. Nã chØ sö dông c¸c hµm nh− nh÷ng hµm ngoµi cña ch−¬ng tr×nh. V. Hµm trong PHP 1. Quy t¾c x©y dùng hµm function tªn_hµm (danh s¸ch ®èi sè h×nh thøc) { Th©n hµm . } + §Þnh nghÜa hµm kh«ng nhÊt thiÕt ph¶i n»m ngoµi th©n mäi hµm, trong hµm cã thÓ cã hµm kh¸c. Nh−ng viÖc sö dông mét hµm kh«ng kh¸c nhau gi÷a x©y dùng hµm trong th©n mét hµm vµ ngoµi mäi hµm . + Tªn hµm tuú ®Æt vµ kh¸c tªn hµm chuÈn. + Hµm cã thÓ cã gi¸ trÞ tr¶ vÒ hoÆc kh«ng. + C¸c c©u lÖnh ®−îc quyÒn gäi bÊt kú hµm nµo ®· ®−îc khai b¸o vµ ®· ®−îc ®Þnh nghÜa.
  • 22. cntt cña c¬ quan ®¶ng PHP & MySQL 22 + Return : - Tr¶ mét gi¸ trÞ vÒ cho n¬i gäi hµm - Lµ n¬i b¸o kÕt thóc hµm 2. Gäi hµm . + Hµm ph¶i ®−îc x©y dùng (khai b¸o) tr−íc khi gäi . + Khi gäi hµm, nÕu cã gi¸ trÞ tr¶ vÒ th−êng ®−îc ®Æt trong biÓu thøc . 3. BiÕn toµn cô vµ biÕn côc bé. Th«ng th−êng PHP coi c¸c biÕn ®−îc sö dông trong th©n cña hµm lµ biÕn côc bé. NghÜa lµ biÕn trong th©n hµm kh«ng lµm thay ®æi gi¸ trÞ cña biÕn ë ngoµi hµm ®ã. Muèn hµm lµm thay ®æi gi¸ trÞ cña biÕn ngoµi ta cÇn khai b¸o global tr−íc biÕn ®ã trong th©n hµm . VÝ dô : $position = “m”; function change_pos() { $position = “s”; } change_pos(); echo (“$position”); //Prints “m” Ta thÊy biÕn $position gi¸ trÞ kh«ng ®æi sau khi gäi hµm change_pos(). $position = “m”; function change_pos() { global $position; $position = “s”; } change_pos(); echo (“$position”); //Prints “s”
  • 23. cntt cña c¬ quan ®¶ng PHP & MySQL 23 Ta cã thÓ viÕt nh− trªn hoÆc ta cã thÓ viÕt : $position = “m”; function change_pos() { GOLOBALS[$position] = “s”; } change_pos(); echo (“$position”); //Prints “s” VI. BiÕn m¶ng trong PHP 1. M¶ng mét chiÒu M¶ng lµ mét biÕn bao gåm nhiÒu phÇn tö cã cïng tªn nh−ng kh¸c nhau vÒ chØ sè (c¸c chØ sè nµy t¨ng dÇn tõ 0 ®Õn n). Víi ng«n ng÷ lËp tr×nh C, c¸c phÇn tö cña m¶ng cã cïng kiÓu d÷ liÖu ,nh−ng víi PHP th× mÒm dÎo h¬n. C¸c phÇn tö cña m¶ng kh«ng nhÊt thiÕt ph¶i cïng kiÓu. a. Khai b¸o m¶ng mét chiÒu. Ta cã thÓ khai b¸o m¶ng b»ng c¸ch g¸n tªn m¶ng víi dÊu ®ãng më ngoÆc vu«ng kh«ng cã chØ sè. Chóng ta h·y xÐt vÝ dô sau : $countries[] = “cr”; $countries[] = “de”; $countries[] = “us”; VÝ dô trªn t¹o ra mét m¶ng gåm ba phÇn tö cã chØ sè lµ 0, 1 vµ 2. ViÖc ®ã còng t−¬ng tù nh− ta g¸n : $countries[0] = “cr”; $countries[1] = “de”; $countries[2] = “us”; Ngoµi ra c¸c chØ sè cña m¶ng kh«ng nhÊt thiÕt ph¶i t¨ng dÇn mµ cã thÓ ®−îc khai b¸o nh sau : $countries[50] = “cr”;
  • 24. cntt cña c¬ quan ®¶ng PHP & MySQL 24 $countries[20] = “de”; $countries[10] = “us”; echo (“$countries[20]”); // prints de Khi ®ã ®Ó thªm mét phÇn tö míi vµo m¶ng chóng ta cã thÓ viÕt $countries[] = “uk”; // chØ sè sÏ lµ 51 Mét phÇn tö míi ®−îc thªm vµo víi chØ sè lµ chØ sè lín nhÊt cña m¶ng céng thªm mét. Ngoµi ra còng cã thÓ khai b¸o m¶ng mét chiÒu b»ng c©u lÖnh array $countries = array (“cr”, “de”, “us”) ; echo (“$countries[2]”); //prints “us” §Ó chØ sè kh«ng b¾t ®Çu tõ kh«ng ta cã thÓ khai b¸o l¹i nh− sau $countries = array (1 => “cr”, “de”, “us”); echo (“$countries[2]”); //prints “de” To¸n tö => cã thÓ ®−îc sö dông tr−íc bÊt kú mét phÇn tö nµo trong m¶ng $countries = array (“cr”, 7 => “de”, “us”); vµ khi ®ã phÇn tö cã gi¸ trÞ “cr” cã chØ sè lµ 0 cßn phÇn tö cã gi¸ trÞ “de”, “us” lÇn l−ît lµ 7 vµ 8. Kh¸c víi ng«n ng÷ lËp tr×nh C, chØ sè cña m¶ng mét chiÒu kh«ng chØ lµ c¸c sè nguyªn mµ cßn lµ x©u ký tù. Ta cã thÓ khai b¸o nh− sau : $countries[“ca”] = “Canada”; $countries[“cr”] = “Costa Rica”; $countries[“de”] = “Germany”; $countries[“uk”] = “United Kingdom”; $countries[“us”] = “United States”; echo (“$countries[“ca”]); // print Canada NÕu dïng array th× sÏ lµ : $countries = (“ca” => “Canada”,
  • 25. cntt cña c¬ quan ®¶ng PHP & MySQL 25 “cr” => “Costa Rica”, “de” => “Germany”, “uk” => “United Kingdom”, “us” => “United States”);
  • 26. cntt cña c¬ quan ®¶ng PHP & MySQL 26 b. Lµm viÖc víi c¸c phÇn tö cña m¶ng Cã thÓ sö dông vßng lÆp for xÐt tõng phÇn tö cña m¶ng. $countries = array (“cr”, “de”, “us”); $num_elements = count($countries); for ($i = 0 ; $i < $num_elements ; $i ++) { echo (“$countries[$i]
    n”); } VÝ dô trªn sÏ ®óng khi chØ sè cña c¸c phÇn tö t¨ng dÇn ®Òu. NÕu chØ sè c¸c phÇn tö kh«ng theo mét thø tù nµo c¶ ta cã thÓ sö dông hµm list() vµ each(). reset ($countries); while (list ($key, $value ) = each ($countries)) { echo (“ChØ sè $key, gi¸ trÞ $value”); } §Ó di chuyÓn con trá tíi phÇn tö tiÕp theo hoÆc tr−íc ®ã ta còng cã thÓ dïng hµm next() - hµm next() tr¶ vÒ lµ 1 (true) nÕu phÇn tö tiÕp theo kh«ng ph¶i lµ phÇn tö cuèi cïng, ng−îc l¹i lµ 0 (false) vµ prev() - hµm prev() cho gi¸ trÞ tr¶ vÒ lµ 1 (true) nÕu phÇn tö tiÕp theo kh«ng ph¶i lµ phÇn tö ®Çu tiªn, ng−îc l¹i lµ 0 (false). Hµm key () sÏ cho biÕt chØ sè vµ hµm current() sÏ cho biÕt gi¸ trÞ cña phÇn tö ®ã . $arr = array (3, 4, 5, 6, 7); do { $k = key ($arr); $val = current ($arr); echo (“PhÇn tö $k = $val”); }while 2. M¶ng hai chiÒu Chóng ta cã thÓ khai b¸o m¶ng hai chiÒu nh− sau :
  • 27. cntt cña c¬ quan ®¶ng PHP & MySQL 27 $countries = array (“Europs” => array (“de”, “uk”), “North America” => array (“ca”, “cr”, “us”)); echo ($countries[“Europs”][1]); // print “uk” echo ($countries[“North America”][2]); // print “us” Ta cã cÊu tróc cña m¶ng trªn nh− sau : $countries[“Europs”] $countries[“North America”] [0] [1] [0] [1] [2] “de” “uk” “ca” “cr” “us” Còng gièng nh− m¶ng mét chiÒu ta sÏ dïng vßng lÆp nh− for, while, do ... while ®Ó duyÖt qua c¸c phÇn tö cña m¶ng. VÝ dô : $countries = array (“Europs” => array (“de”, “uk”), “North America” => array (“ca”, “cr”, “us”)); while (list ($key1) = each ($countries)) { echo (“$key1 :
    n”); while (list ($key2, $val) = each($countries[“$key1”])) { echo (“ - $val
    n”) } } Khi ch¹y ch−¬ng tr×nh sÏ in ra mµn h×nh lµ : Europ : - de - uk North America : - ca - cr - us
  • 28. cntt cña c¬ quan ®¶ng PHP & MySQL 28 3. C¸c hµm s¾p xÕp m¶ng . PHP cung cÊp cho chóng ta c¸c hµm ®Ó s¾p xÕp m¶ng. Víi mçi lo¹i m¶ng sÏ cã mét hµm t−¬ng øng. Víi m¶ng cã chØ sè lµ kiÓu nguyªn chóng ta cã hµm sort() ®Ó s¾p xÕp t¨ng dÇn c¸c phÇn tö cña m¶ng, hµm rsort() sÏ s¾p xÕp c¸c phÇn tö cña m¶ng gi¶m dÇn . $countries = array (“us”, “uk”, “ca”, “cr”, “de”); sort ($countries); while (list ($key, $val) = each ($countries)) { echo (“Element $key equals $val
    n”); } Khi ch¹y ch−¬ng tr×nh sÏ lµ : Element 0 equals ca Element 1 equals cr Element 2 equals de Element 3 equals uk Element 4 equals us Víi m¶ng chØ sè cã kiÓu string th× dïng hµm asort (), arsort () ®Ó s¾p xÕp m¶ng theo chiÒu t¨ng dÇn vµ gi¶m dÇn. NÕu b¹n dïng c¸c hµm sort() vµ rsort() th× c¸c chØ sè cã kiÓu string sÏ chuyÓn thµnh c¸c chØ sè cã kiÓu nguyªn. $countries = array(“us” => “United States”, “uk” => “United Kingdom”, “ca” => “Canada”, “cr” => “Costa Rica”, “de” => “Germany”); asort ($countries); while (list($key, $val) = each($countries)) { echo “Chi so $key bang $val
    n”;
  • 29. cntt cña c¬ quan ®¶ng PHP & MySQL 29 } KÕt qu¶ khi ch¹y ch−¬ng tr×nh : Chi so ca bang Canada Chi so cr bang Costa Rica Chi so de bang Germany Chi so uk bang United Kingdom Chi so us bang United States Nh−ng nÕu thay dßng asort ($countries); b»ng sort ($countries); kÕt qu¶ sÏ lµ Chi so 0 bang Canada Chi so 1 bang Costa Rica Chi so 2 bang Germany Chi so 3 bang United Kingdom Chi so 4 bang United States §Ó s¾p xÕp m¶ng t¨ng dÇn hay gi¶m dÇn theo chØ sè chóng ta cã hµm ksort() – t¨ng dÇn vµ krsort() – gi¶m dÇn . $countries = array(“e” => “United States”, “d” => “United Kingdom”, “c” => “Canada”, “b” => “Costa Rica”, “a” => “Germany”); ksort ($countries); while (list($key, $val) = each($countries)) { echo “Chi so $key bang $val
    n”; } KÕt qu¶ : Chi so a bang Germany
  • 30. cntt cña c¬ quan ®¶ng PHP & MySQL 30 Chi so b bang Costa Rica Chi so c bang Canada Chi so d bang United Kingdom Chi so e bang United States VII. LËp tr×nh h−íng ®èi t−îng (OOP) 1. §Þnh nghÜa líp . Chóng ta cã thÓ ®Þnh nghÜa líp b»ng to¸n tö class, vµ trong mçi mét líp chóng ta sÏ x©y dông c¸c ph−¬ng thøc vµ thuéc tÝnh cho líp ®ã . Gi¶ sö muèn ®Þnh nghÜa líp “Sesssion” chóng ta lµm nh− sau : §Ó ®Þnh nghÜa thuéc tÝnh cho líp chóng ta ®Æt tõ kho¸ var tr−íc thuéc tÝnh ®ã.
  • 31. cntt cña c¬ quan ®¶ng PHP & MySQL 31 var $linkid; var $seshid; var $sessdata; var $userid; var $error_no; var $err; ... // §Þnh nghÜa c¸c ph−¬ng thøc ë ®©y } //KÕt thóc ®Þnh nghÜa líp ?> TiÕp theo chóng ta sÏ ®Þnh nghÜa c¸c ph−¬ng thøc cho líp trªn. Ph−¬ng thøc cÇn x©y dùng ®Çu tiªn lµ Session() sau ®ã ®Õn c¸c ph−¬ng thøc kh¸c. seshid = $localSeshID; $this->userid = $localUserID; // KÕt nèi tíi MySQL $this->linkid=mysql_connect($this->sqlhost, $this->sqluser, $this- >sqlpass);
  • 32. cntt cña c¬ quan ®¶ng PHP & MySQL 32 if (!$this->linkid) { $this->err=mysql_error(); $this->error_no=102; } } ... // §Þnh nghÜa c¸c ph−¬ng thøc kh¸c } ?> 2. Sö dông líp ®· ®−îc ®Þnh nghÜa. §Ó khai b¸o mét ®èi t−îng cã kiÓu thuéc líp ®· x©y dùng ta dïng to¸n tö new nh− sau : error_no) { //Th«ng b¸o cã lçi } $user = $mysesh->sessdata[userid]; ?> Welcome to my website, <? echo $user ?> ”>Next Page
  • 33. cntt cña c¬ quan ®¶ng PHP & MySQL 33
    ”>
    VIII. T×m hiÓu thªm vÒ HTML PhÇn mét chóng ta ®· t×m hiÓu s¬ l−îc vÒ ng«n ng÷ HTML. Trong môc nµy chóng ta sÏ tr×nh bµy thªm vÒ nã víi träng t©m lµ FORM cña HTML. Lý do lµ v× khi muèn giao tiÕp gi÷a HTML vµ PHP script th× kh«ng thÓ kh«ng biÕt ®Õn FORM. FORM lµ c«ng cô phæ biÕn nhÊt ®Ó chuyÓn d÷ liÖu tõ HTML ®Õn PHP script (client lªn server). Th«ng th−êng, khi viÕt mét script, ng−êi ta thiÕt kÕ mét FORM sao cho nã cung cÊp ®Çy ®ñ nh÷ng th«ng tin mµ script cÇn ®Ó xö lý. 1. CÊu tróc cña mét FORM Mét FORM ®−îc më ®Çu b»ng thÎ
    vµ kÕt thóc b»ng thÎ
    . Trong FORM cã : - Thuéc tÝnh : FORM th−êng cã ba thuéc tÝnh, ba thuéc tÝnh nµy n»m trong thÎ FORM më ®Çu cña mét FORM : action, method, enctype . - C¸c thÎ ®−îc dïng trong FORM : input, select, textarea, hn, p, hr, dir, dl, menu, ol, ul, address, blockquote, [isindex]. pre . - FORM cã ba thµnh phÇn chÝnh : textarea, select, input . - FORM cã thÓ ®−îc dïng trong c¸c thÎ : blockquote,body,dd, li. 2. C¸c thuéc tÝnh Khi t¹o mét FORM ,c«ng viÖc ®Çu tiªn lµ x¸c ®Þnh thuéc tÝnh cña nã. - Thuéc tÝnh action : Action=”URL” chØ ®Õn script mµ FORM sö dông. Ngoµi ra nã còng cã thÓ lµ mailto url, khi ®ã néi dung cña FORM ®−îc mail ®Õn ®Þa chØ trong url .
  • 34. cntt cña c¬ quan ®¶ng PHP & MySQL 34 - Thuéc tÝnh method : Method cã thÓ ®−îc g¸n b»ng “GET” hoÆc “POST” ,nã chØ ra ph−¬ng thøc Post hay Get sÏ ®−îc sö dông trong FORM, gi¸ trÞ ngÇm ®Þnh lµ Get. - Thuéc tÝnh enctype : Enctype=”Mime_type” :chØ ra lo¹i d÷ liÖu sÏ göi ®i. Gi¸ trÞ ngÇm ®Þnh lµ application/x-www-form-urlencode. Trong mét trang chóng ta cã thÓ sö dông nhiÒu FORM nhng kh«ng ®−îc lång chóng vµo nhau. 2. C¸c thµnh phÇn c¬ b¶n cña FORM. Mét FORM ,th«ng th−êng cã ba thµnh phÇn chÝnh : +Textarea +Select +Input a - Textarea §−îc b¾t ®Çu b»ng thÎ vµ kÕt thóc b»ng thÎ . Bªn trong chøa c¸c ký tù, thÎ nµy ®−îc dïng lång vµo trong FORM. C¸c thuéc tÝnh cña Texterea . - Name : §Þnh nghÜa tªn cña thµnh phÇn, thuéc tÝnh nµy lu«n lu«n ph¶i cã. - Rows : Cho biÕt sè hµng cña hép v¨n b¶n. - Cols : Cho biÕt sè cét cña v¨n b¶n. Wrap : ChØ ra c¸ch xö lý word_wraping (c¨n chiÒu dµi cña dßng v¨n b¶n theo kÝch th−íc cña hép v¨n b¶n) trong hép tho¹i. NÕu wrap=”off”, chøc n¨ng word_wraping bÞ cÊm. NÕu wrap=”vitual”, chøc n¨ng nµy ®−îc bËt lªn, khi gâ v¨n b¶n vµo, ta thÊy con trá tù ®éng xuèng hµng mçi khi nã ch¹y ®Õn biªn cña hép v¨n b¶n, ký tù newline (OA hex) tù ®éng ®−îc thªm vµo nh−ng kh«ng ®−îc göi ®i cïng FORM. NÕu wrap=”physical”, chøc n¨ng nµy còng ®−îc bËt vµ ho¹t ®éng nh− trªn nh−ng ký tù newline ®−îc göi ®i cïng víi FORM.
  • 35. cntt cña c¬ quan ®¶ng PHP & MySQL 35 V¨n b¶n n»m gi÷a hai thÎ sÏ ®−îc thÓ hiÖn nh− ®o¹n v¨n b¶n ngÇm ®Þnh trong vïng d÷ liÖu. VÝ dô: .. . b. Select §−îc b¾t ®Çu b»ng thÎ n”; } ?>
    i i^i
    $i”.pow($i,$i).”
    Ph−¬ng ph¸p nµy ®−îc dïng kh¸ phæ biÕn víi nh÷ng ng−êi b¾t ®Çu häc lËp tr×nh PHP. Tíi mét lóc nµo ®ã ,nh÷ng ng−êi míi lËp tr×nh b»ng ph−¬ng ph¸p nhóng tiÕn tíi sù thµnh th¹o ë c¸c møc cao h¬n, nh−ng thËt ®¸ng tiÕc, c¸ch lËp tr×nh nµy l¹i ng¨n c¶n ®iÒu ®ã . 2. Separating common parts
  • 55. cntt cña c¬ quan ®¶ng PHP & MySQL 55 MÆc dï kÜ thuËt nµy cã sö dông l¹i c¸c m· code/HTML vµ viÖc thay ®æi còng dÔ dµng h¬n ,nh−ng nã vÉn thõa h−ëng hÇu hÕt c¸c nh−îc ®iÓm cña ph−¬ng ph¸p PHP nhóng . C¸ch lµm th«ng th−êng lµ b¾t ®Çu víi c¸c HTML header vµ footer, chóng ®−îc viÕt thµnh c¸c hµm. C¸c hµm nµy cã thÓ ®−îc gäi khi cÇn ®Õn chóng vµ do ®ã linh ho¹t h¬n khi sö dông. Sù thay ®æi c¸c hµm sÏ ®−îc ph¶n ¸nh trong tÊt c¶ c¸c tr−êng hîp. Ta t¸ch vÝ dô PHP nhóng ë trªn ra hai file . TÖp prepend.inc chøa hai hµm :hiÓn thÞ mét HTML header vµ mét HTML footer . <?php echo $title ?>

TÖp main.php sö dông tÖp prepend.inc
  • 56. cntt cña c¬ quan ®¶ng PHP & MySQL 56 n”; } ?>
    i i^i
    $i”.pow($i,$i).”
    3. FastTemplate Trong phÇn nµy chóng ta cïng t×m hiÓu vÒ ph−¬ng ph¸p thiÕt kÕ Web trong PHP lµ FastTemplate. §©y lµ ph−¬ng ph¸p hay, nã ®−îc g¾n kÌm víi c¸c gãi øng dông cña PHP, nã ®−îc x©y dùng trong tÖp tin cã tªn class. FastTemplate.php . Môc ®Ých cña ph−¬ng ph¸p nµy lµ gióp cho ch−¬ng tr×nh viÕt b»ng PHP cã nhiÒu giao diÖn kh¸c nhau trªn cïng mét c¬ së m·, vµ lµm gi¶m khèi l−îng c«ng viÖc do ch−¬ng tr×nh ®−îc t¸ch ra lµm hai phÇn : phÇn viÕt c¸c ®o¹n m· (code) vµ phÇn thiÕt kÕ giao diÖn cho ch−¬ng tr×nh. PhÇn viÕt c¸c ®o¹n m· sÏ tÝnh to¸n d÷ liÖu vµ thÓ hiÖn trªn c¸c trang HTML th«ng qua c¸c biÕn FastTemplate. PhÇn giao diÖn sÏ thiÕt kÕ giao diÖn cho ch−¬ng tr×nh b»ng ng«n ng÷ HTML. Trong phÇn nµy chóng ta cã thÓ lång vµo trang HTML c¸c ng«n ng÷ nh− Java Applet, JavaScript, ... cho trang web thªm sinh ®éng. ViÖc thªm vµo trang HTML nh÷ng ®o¹n m· nµy kh«ng lµm ¶nh h−ëng tíi phÇn ®o¹n m· PHP. Khi ®ã, ë vÞ trÝ nµo trªn trang web cÇn thÓ hiÖn c¸c kÕt qu¶ tÝnh to¸n tõ ®o¹n m· th× sÏ sö dông c¸c biÕn FastTemplate ®Ó thÓ hiÖn.
  • 57. cntt cña c¬ quan ®¶ng PHP & MySQL 57 II. Ph−¬ng ph¸p FastTemplate 1. BiÕn FastTemplate BiÕn FastTemplate lµ g× ? C¸c biÕn FastTemplate cã cÊu tróc nh− sau : {TEN_BIEN_FASTTEMPLATE} BiÕn ®−îc ®Æt trong dÊu ®ãng më ngoÆc nhän, tªn biÕn ë gi÷a, tªn cã thÓ lµ ch÷ hoa hoÆc ch÷ th−êng. Tuy nhiªn trong phÇn ®o¹n m· PHP b¹n còng ph¶i viÕt gièng nh− vËy. 2. VÞ trÝ ®Æt biÕn FastTemplate C¸c biÕn FastTemplatse cã thÓ ®Æt bÊt kú ®©u trong trang HTML. Nã cã thÓ lµ biÕn thÓ hiÖn th«ng tin trªn c¸c trang HTML khi ®−îc browser hiÓn thÞ hoÆc c¸c biÕn sÏ thªm vµo c¸c ®o¹n m· HTML . VÝ dô : ta ®Æt tªn tÖp lµ : vidu_template.tpl {TITLE} {CONTENT} Trong vÝ dô trªn cã hai biÕn FastTemplate lµ {TITLE} vµ {CONTENT}. BiÕn {CONTENT} sÏ thÓ hiÖn th«ng tin trªn trang web khi ®−îc hiÓn thÞ, biÕn {TITLE} ®−îc thªm vµo nh− mét thµnh phÇn cña m· HTML . 3. Mét vÝ dô minh häa Theo vÝ dô trªn chóng ta ®· cã tÖp “vidu_template.tpl”, b©y giê chóng ta ®i x©y dùng ®o¹n script sau :
  • 58. cntt cña c¬ quan ®¶ng PHP & MySQL 58 set_filenames(array(“body” => “vidu_template.tpl ”)); # G¸n c¸c gi¸ trÞ cho biÕn FastTemplate $tpl->assign_vars(array( “TITLE” => “Vi du”, “CONTENT” => “Néi dung cña trang web” )); # Cho hiÖn trang web nµy $tpl->pparse(“body”); ?> 4. Bèn b−íc cho mét trang web . Trong mét script cÇn thùc hiÖn bèn bíc theo thø tù sau : B−íc 1 : Khai b¸o mét ®èi t−îng thuéc líp FastTemplate B−íc 2 : G¸n c¸c tÖp chøa m· HTML (tÖp nµy cã phÇn më réng kh«ng nhÊt thiÕt lµ *.htm) cho c¸c phÇn tö cña m¶ng ®−îc ®Þnh nghÜa bëi ph−¬ng thøc set_filenames() ( b−íc nµy ®−îc gäi lµ “®Þnh nghÜa mét b¶n ®å c¸c tÖp FastTemplate” ) . B−íc 3 : G¸n gi¸ trÞ cho c¸c biÕn FastTemplate trong c¸c tÖp . B−íc 4 : Cho hiÖn trang web b»ng ph−¬ng thøc pparse(“tªn_trang_web”) Chó ý : + B−íc 2: Trong “®Þnh nghÜa mét b¶n ®å c¸c tÖp FastTemplate” cã thÓ nhiÒu tÖp ®−îc g¸n . + B−íc 4: Mçi lÇn gäi ph−¬ng thøc pparse(); chØ ®−îc mét tÖp FastTemplate.
  • 59. cntt cña c¬ quan ®¶ng PHP & MySQL 59 + C¸c b−íc 1,2,3,4 cã thÓ lÆp l¹i nhiÒu lÇn . + Thø tù gäi ph−¬ng thøc pparse(); lµ rÊt quan träng v× nã ¶nh h−ëng ®Õn c¸ch thÓ hiÖn cña trang web. 5. Khèi FastTemplate Th«ng tin trªn trang web cã thÓ ®−îc thÓ hiÖn d−íi d¹ng b¶ng, víi sè hµng kh«ng x¸c ®Þnh do ®ã FastTemplate cã hç trî “khèi FastTemplate”. Khèi FastTemplate sÏ lÆp ®i lÆp l¹i mét ®o¹n HTML nµo ®ã khi ®−îc ®¸nh dÊu khèi. XÐt vÝ dô sau : H·y thùc hiÖn phÐp tÝnh 2a víi a = 1, ..., n. KÕt qu¶ ®−îc thÓ hiÖn bëi mét b¶ng gåm hai cét, cét gi¸ trÞ cña a vµ cét kÕt qu¶ cña phÐp tÝnh 2a . Chóng ta t¹o tÖp “tinh_2_mu.htm” Tinh 2 mu a BEGIN block >
  • 60. cntt cña c¬ quan ®¶ng PHP & MySQL 60
  • END block >

    Gia tri a

    Tinh 2ª

    {block.GIATRI}

    {block.KETQUA}

    Ta thÊy tÖp nµy t¹o mét b¶ng hai hµng hai cét, hµng trªn lµ tiªu ®Ò cña c¸c cét, hµng d−íi cét thø nhÊt lµ gi¸ trÞ cña a vµ cét thø hai lµ kÕt qu¶ cña phÐp tÝnh 2a . Hµng d−íi ®−îc b¾t ®Çu bëi kho¸ BEGIN block > vµ kÕt thóc bëi kho¸ END block>. Hai kho¸ nµy cho biÕt phÇn bªn trong sÏ bÞ lÆp (block ë ®©y lµ tªn kho¸), c¸c biÕn FastTemplate bªn trong cã d¹ng {tenkhoa.TEN_BEN}. §o¹n PHP Script sÏ nh− sau : set_filenames(array( 'tinh_2_mu_a' => 'tinh_2_mu.htm' )); $n = 10; for ($i = 1 ; $i <= $n ; $i++) $tpl->assign_block_vars("block",array( 'GIATRI' => $i, 'KETQUA' => pow(2, $i) )); $tpl->pparse("tinh_2_mu_a"); ?> KÕt qu¶ khi ch¹y ch−¬ng tr×nh nh− h×nh vÏ.
  • 61. cntt cña c¬ quan ®¶ng PHP & MySQL 61 PhÇn II : HÖ C¥ Së D÷ LIÖU MYSQL Ch−¬ng I. Giíi thiÖu Ng«n ng÷ MySQL I. Giíi thiÖu chung MySQL rÊt phøc t¹p, nh−ng giao diÖn SQL trùc gi¸c vµ dÓ häc. Trong ch−¬ng nµy chóng ta m« t¶ kh¸i qu¸t vÒ c¸c lÖnh, c¸c kiÓu d÷ liÖu vµ c¸c hµm mµ chóng ta cÇn biÕn ®Ó sö dông Mysql mét c¸ch cã hiÖu qu¶ vµ cã hiÖu suÊt cao. Ch−¬ng nµy cung cÊp tÊt c¶ c¸c hµm tham kh¶o trong Mysql. §Ó sö dông ch−¬ng nµy cã hiÖu qu¶ b¹n cã thÓ t×m ®Õn hµng lo¹t c¸c b¶ng ®· ®−îc liÖt kª. C¸c −u ®iÓm cña MySQL: • MySQL lµ mét hÖ qu¶n trÞ nhá, b¶o mËt, vµ rÊt dÔ sö dông, th−êng ®−îc sö dông cho c¸c øng dông nhá vµ trung b×nh. Nã ®−îc sö dông cho c¸c øng dông client / server víi m¸y chñ m¹nh nh− UNIX, Windows NT vµ Windows 95/98, vµ ®Æc biÖt trªn m¸y chñ UNIX . • MySQL hç trî c¸c ®iÓm vµo lµ ANSI SQL92 vµ ODBC møc 0-2 SQL chuÈn. • MySQL hç trî nhiÒu ng«n ng÷ cho viÖc th«ng b¸o lçi nh− : Czec, Dutc, English, Estonian, French, German, Hungarian, Italian, Norwegian Nynorsk, Polish, Portuguese, Spanish and Swedish. Ng«n ng÷ ®−îc hç trî mÆc ®Þnh cho d÷ liÖu lµ ISO-8859-1 (Latin1), muèn thay ®æi ph¶i söa trong m· nguån . • Ng«n ng÷ lËp tr×nh sö dông viÕt c¸c hµm API ®Ó th©m nhËp c¬ së d÷ liÖu MySQL cã thÓ lµ C, Perl, PHP.. . • C¸c b¶ng (table) trong c¬ së d÷ liÖu MySQL cã kÝch th−íc rÊt lín vµ ®−îc l−u ë th− môc Datas. KÝch th−íc lín nhÊt cña mét b¶ng tèi thiÓu lµ 4GB vµ nã cßn phô thuéc vµ kÝch th−íc lín nhÊt cña mét file do hÖ ®iÒu hµnh quy ®Þnh .
  • 62. cntt cña c¬ quan ®¶ng PHP & MySQL 62 • C¬ së d÷ liÖu MySQL rÊt dÔ qu¶n lý vµ cã tèc ®é xö lý cao h¬n tíi ba bèn lÇn so víi c¸c hÖ qu¶n trÞ c¬ së d÷ liÖu kh¸c. • MySQL lµ mét hÖ qu¶n trÞ c¬ së d÷ liÖu m« h×nh quan hÖ, nã cã m· nguån më. Nã ®−îc cung cÊp miÔn phÝ trªn c¸c m¸y chñ UNIX, OS/2 vµ c¶ trªn Windows. Bªn c¹nh c¸c −u ®iÓm trªn MySQL còng cã mét vµi nh−îc ®iÓm : • MySQl kh«ng cho phÐp thùc hiÖn c¸c c©u lÖnh SQL select truy vÊn con. VÝ dô : SELECT deptno, ename, sal FROM emp x WHERE sal > (SELECT AVG(sal) FROM emp WHERE x.deptno = deptno) ORDER BY deptno • MySQL kh«ng hç trî Stored Procedures, Triggers, Transactions, Foreign Keys, vµ Views nh− c¸c hÖ qu¶n trÞ c¬ së d÷ liÖu kh¸c . II .CÊu tróc ng«n ng÷ 1. §−a ra mét x©u vµ mét sè nh− thÕ nµo Môc nµy m« t¶ nh÷ng c¸ch kh¸c nhau ®Ó ®−a ra x©u vµ sè trong Mysql. môc nµy còng bao gåm nhiÒu s¾c th¸i vµ ``gotchas'' ®iÒu mµ b¹n cã thÓ gÆp khi ®i s©u vµo c¸c kiÓu c¬ b¶n trong Mysql. 2. X©u X©u lµ mét d·y kÝ tù, ®−îc ®Æt trong dÊu nh¸y ®¬n ‘ ’ hoÆc dÊu nh¸y kÐp “ ” (nÕu ch¹y trong ph−¬ng thøc ANSI th× x©u chØ ®−îc ®Æt trong dÊu nh¸y ®¬n) VÝ dô: ‘trêi n¾ng’. “chµo buæi s¸ng”. Trong mét x©u, cã sù kÕt hîp cña c¸c kÝ tù t¹o nªn c¸c kÝ tù ®Æc biÖt. Mçi kÝ tù ®Æc biÖt nµy b¾t ®Çu b»ng dÊu chÐo ng−îc ( ) ®−îc xem nh− kÝ tù escape . Mysql nhËn biÕt c¸c kÝ tù ®Æc biÖt sau: 0 : kÝ tù 0 trong m· ASCII. ’ : KÝ tù nh¸y ®¬n ‘.
  • 63. cntt cña c¬ quan ®¶ng PHP & MySQL 63 ” : KÝ tù nh¸y kÐp “. b : KÝ tù Backspace. n : KÝ tù xuèng dßng míi. r : KÝ tù vÒ ®Çu dßng . t : NhÈy « (tab). z : KÝ tù 26 trong m· ASCII. KÝ tù nµy cã thÓ ®−îc m· ho¸ ®Ó ®øng ë cuèi file trong Windows. : KÝ tù chÐo ng−îc . % : KÝ tù % . _ : KÝ tù g¹ch d−íi _ . chó ý : nÕu nh− sö dông kÝ tù ‘%’ hoÆc kÝ tù g¹ch d−íi ‘ _’ trong mét sè tr−êng hîp cã thÓ tr¶ vÒ % vµ _ chø kh«ng ph¶i lµ % vµ _ . * cã mét sè c¸ch ®Ó x©u gåm c¶ dÊu nh¸y : - ®Ó mét dÊu nh¸y ®¬n ( ‘ ) n»m trong mét x©u ®−îc ®¸nh dÊu bëi dÊu nh¸y ®¬n th× ph¶i viÕt lµ: ‘ ‘ ’ ’ . - ®Ó mét dÊu nh¸y kÐp ( “ ) n»m trong mét x©u ®−îc ®¸nh dÊu bëi dÊu nh¸y ®¬n th× ph¶i viÕt lµ: ‘ “ ” ’ . - cã thÓ ®Æt kÝ tù (‘’) tr−íc kÝ tù ®¸nh dÊu . - mét dÊu nh¸y ®¬n trong cÆp dÊu nh¸y kÐp ®−a ra x©u chøa dÊu nh¸y ®¬n, mét dÊu nh¸y kÐp trong cÆp dÊu nh¸y ®¬n ®−a ra x©u chøa dÊu nh¸y kÐp. - VÝ dô : mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo',''hello'; ------ | hello | "hello" | ""hello"" | hel'lo | 'hello | ------- mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", ""hello"; ------- | hello | 'hello' | ''hello'' | hel"lo | "hello | ------- mysql> SELECT "ThisnIsnFournlines"; ---- | This Is Four lines | ----
  • 64. cntt cña c¬ quan ®¶ng PHP & MySQL 64 nÕu b¹n muèn chÌn d÷ liÖu nhÞ ph©n vµo trong cét BLOB. Nh÷ng kÝ tù sau ph¶i ®−îc thÓ hiÖn d−íi d¹ng nh÷ng kÝ tù ®Æc biÖt : - NUL : ASCII 0. ph¶i ®−îc thÓ hiÖn ‘ 0 ’ . - : ASCII 92. dÊu g¹ch ng−îc ph¶i ®−îc thÓ hiÖn ‘ ’ . - ’ :ASCII 39. dÊu nh¸y ®¬n ph¶i ®ù¬c thÓ hiÖn ‘ ’ ’ . - ” : ASCII 34. dÊu nh¸y kÐp ph¶i ®−îc thÓ hiÖn ‘ ” ’. - nÕu biÕt m· C, cã thÓ sö dông hµm CAPI lµ Mysql-escape-string() ®Ó ESC kÝ tù b»ng c©u lÖnh INSERT. - Nªn sö dông hµm ESC ®èi víi nh÷ng x©u chøa kÝ tù ®Æc biÖt ®−îc liÖt kª ë trªn. 3. Sè (Numbers) S« bao gåm sè nguyªn vµ sè thùc . Sè nguyªn ®−îc biÓu diÔn b»ng mét d·y sè. Cßn sè thùc sö dông dÊu chÊm ®Ó ph©n c¸ch phÇn thËp ph©n . DÊu g¹ch d−íi ®ù¬c ®Æt tr−íc sè ®Ó chØ sè ©m. VÝ dô: 1221 0 32 VÝ dô cho sè thùc: 94.42 32032.6809e10 48.00 chó ý : sè nguyªn ®−îc sö dông trong ng÷ c¶nh sè thùc ®−îc chuyÓn thµnh sè thùc cã gi¸ trÞ ngang b»ng vÝ dô : float 0 0.0 float 56 -> 56.0 Nh÷ng gi¸ trÞ hÖ Hexa (hÖ 16) Mysql hç trî c¸c gi¸ trÞ hÖ Hexa. Trong ng÷ c¶nh sè th× chóng gièng nh− mét sè nguyªn. Trong ng÷ c¶nh x©u th× chóng gièng nh− mét x©u nhÞ ph©n mµ mçi cÆp sè nguyªn Hexa ®−îc chuyÓn thµnh mét kÝ tù . VÝ dô: mysql> SELECT x'FF' -> 255 mysql> SELECT 0xa0; -> 10 mysql> select 0x5061756c; -> Paul
  • 65. cntt cña c¬ quan ®¶ng PHP & MySQL 65 ë vÝ dô trªn khi viÕt mét sè d−íi d¹ng Hexa b¹n ph¶i ®iÒn vµo vµo tr−íc sè ®ã chuçi ‘x’ hoÆc ‘0x’. Có ph¸p x ‘x©u Hexa’ dùa trªn ANSISQL, vµ có ph¸p 0x dùa trªn ODBC. X©u hÖ Hexa th−êng sö dông ODBC ®Ó ®−a gi¸ trÞ cho cét BLOB Cã thÓ chuyÓn mét x©u hoÆc sè thµnh hÖ Hexa b»ng hµm HEX(). 4. Gi¸ trÞ NULL Gi¸ trÞ NULL cã nghÜa lµ “kh«ng cã d÷ liÖu”(“no data”) kh¸c víi gi¸ trÞ 0 ®èi víi kiÓu sè vµ x©u rçng ®èi víi kiÓu x©u . Trong khu«n d¹ng xuÊt hoÆc nhËp File d÷ liÖu NULL cã thÓ ®−îc thÓ hiÖn b»ng ‘N’ (nh− LOAD DATA INFILE, SELECT...INTO OUTFILE). 5. Tªn cña C¬ së d÷ liÖu, b¶ng, chØ sè cét vµ bÝ danh Tªn cña c¬ së d÷ liÖu, b¶ng, chØ sè cét vµ bÝ danh tÊt c¶ ®Òu tu©n theo mét qui luËt chung trong Mysql. Nh−ng chó ý r»ng qui luËt nµy ®· ®−îc thay ®æi b¾t ®Çu víi Mysql Version 3.23.6 khi chóng ta d−a vµo lêi chó thÝch cho viÖc nhËn biÕt c¬ së d÷ liÖu, b¶ng vµ tªn cét víi dÊu ‘ ‘ ’ ’ .’ ” ’sÏ lµm viÖc nhËn ra lêi chó thÝch nÕu b¹n ch¹y trong chÕ ®é ANSI . §Þnh danh (Identifier) §é dµi C¸c kÝ tù cho phÐp Database (c¬ së d÷liÖu) 64 TÊt c¶ c¸c kÝ tù cho phÐp trong th− môc ngo¹i trõ ‘/’ vµ ‘.’ Table (B¶ng) 64 TÊt c¶ c¸c kÝ tù cho phÐp víi tªn File ngo¹i trõ ‘/’ vµ ‘.’ Column (Cét) 64 Cho phÐp tÊt c¶ c¸c kÝ tù Alias (BÝdanh) 256 Cho phÐp tÊt c¶ c¸c kÝ tù Chó ý: ë b¶ng trªn ®Þnh danh kh«ng thÓ cã kÝ tù ®¸nh dÊu, ASCII(0) hoÆc ASCII(255) . NÕu ®Þnh danh lµ mét tõ bÞ h¹n chÕ hoÆc trong ®ã cã chøa c¸c kÝ tù ®Æc biÖt th× b¹n ph¶i sö dông dÊu nh¸y ®¬n ®Ó chó thÝch khi sö dông chóng . VÝ dô: SELECT * from `select` where `select`.id > 100; Trong phiªn b¶n tr−íc cña Mysql, luËt ®Æt tªn nh− sau :
  • 66. cntt cña c¬ quan ®¶ng PHP & MySQL 66 - Mét tªn gåm c¸c kÝ tù trong b¶ng m·, còng cho phÐp kÝ tù g¹ch d−íi ‘_’ vµ ‘$’. - Tªn cã thÓ b¾t ®Çu bëi tÊt c¶ c¸c kÝ tù hîp ph¸p, trong thùc tÕ tªn cã thÓ b¾t ®Çu b»ng mét sè (®iÒu nµy kh¸c nhiÒu víi hÖ c¬ së d÷ liÖu )tuy nhiªn tªn kh«ng chØ gåm mét sè . - Kh«ng ®−îc sö dông kÝ tù ‘.’ Trong tªn bëi v× kÝ tù ®ã ®−îc sö dông ®Ó më réng khu«n d¹ng ®Ó truy nhËp ®Õn cét (xem ë b¶ng d−íi ®©y). Chóng ta kh«ng nªn dïng nh÷ng tªn nh− 1e bëi v× mét biÓu thøc nh− 1e1th× rÊt m¬ hå, nã cã thÓ ®−îc biªn dÞch lµ mét biÓu thøc 1e1 hoÆc lµ sè 1e1. Trong Mysql ta cã thÓ liªn hÖ tíi mét cét b»ng viÖc sö dông nh÷ng c¸ch sau: Cét tham chiÕu ý nghÜa Col_name Cét col_name tõ b¶ng sö dông trong c©u truy vÊn chøa cét víi tªn nµy. Tbl_name.col_name Cét col_name tõ b¶ng tbl_name cña c¬ së d÷ liÖu hiÖn thêi . Db_name.tbl_name. col_name Cét col_name tõ b¶ng tbl_name cña c¬ së d÷ liÖu Db_name. ‘column_name’ Mét cét cã chøa kÝ tù ®Æc biÖt hoÆc tõ kho¸ B¹n cÇn ph¶i chØ râ tbl_name hoÆc db_name.tbl_name ®èi víi nh÷ng cét cã cïng tªn trong nhiÒu b¶ng cña c¬ së d÷ liÖu, hoÆc b¶ng cã cïng tªn trong c¸c c¬ së d÷ liÖu kh¸c nhau ®Ó tr¸nh sù nhËp nh»ng . VÝ dô : gi¶ sö mçi b¶ng T1 ,T2 chø mét cét C b¹n cã thÓ lÊy C trong mét lÖnh SELECT sö dông c¶ T1 vµ T2. Trong tr−êng hîp nµy C nhËp nh»ng bëi v× nã kh«ng duy nhÊt gi÷a c¸c b¶ng ®−îc sö dông trong c©u lÖnh. B¹n ph¶i chØ ra tªn b¶ng b»ng c¸ch viÕt T1.C hoÆc T2.C. t−¬ng tù nÕu b¹n lÊy tõ mét b¶ng T trong c¬ së d÷ liÖu DB1 vµ tõ b¶ng T trong c¬ së d÷ liÖu DB2, b¹n ph¶i tham chiÕu ®Õn cét trong nh÷ng b¶ng ®ã nh− sau : DB1.T.col_name vµ DB2.T.col_name. Có ph¸p .Tbl_name cã nghÜa lµ b¶ng Tbl_name n»m trong c¬ së d÷ liÖu hiÖn thêi .có ph¸p nµy ®−îc chÊp nhËn cho t−¬ng thÝch ODBC bëi v× mét sè ch−¬ng tr×nh ODBC thªm vµo ®Çu tªn b¶ng mét dÊu chÊm ‘.’ 6. Ph©n biÖt ch÷ hoa vµ ch÷ th−êng ®èi víi tªn trong Mysql :
  • 67. cntt cña c¬ quan ®¶ng PHP & MySQL 67 Trong Mysql tªn c¬ së d÷ liÖu, b¶ng trong Windows th× kh«ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng, cßn trong Unix th× cã ph©n biÖt ch÷ hoa vµ ch÷ th−êng . Chó ý : mÆc dï trong windows kh«ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng, b¹n còng kh«ng nªn dïng tªn c¬ së d÷ liÖu, b¶ng víi c¸c tr−êng hîp kh¸c nhau trong cïng mét c©u truy vÊn . VÝ dô : mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1; c©u lÖnh trªn sÏ kh«ng thùc hiÖn ®−îc . Tªn cét kh«ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng trong tÊt c¶ c¸c tr−êng hîp . BÝ danh trªn b¶ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng VÝ dô: mysql> SELECT col_name FROM tbl_name AS a WHERE a.col_name = 1 OR A.col_name = 2; C©u lÖnh trªn sÏ kh«ng thùc hiÖn ®−îc v× bÝ danh ph©n biÖt ‘a’ vµ ‘A’ BÝ danh trªn cét sÏ kh«ng ph©n biÖt ch÷ hoa vµ ch÷ th−êng. NÕu b¹n muèn truy vÊn thùc hiÖn ®−îc trªn b¶ng th× chÊp nhËn mét qui −íc lu«n lu«n t¹o ra tªn c¬ së d÷ liÖu vµ tªn b¶ng sö dông ch÷ th−êng. Mét c¸ch tr¸nh vÊn ®Ò nµy lµ sÏ b¾t ®Çu mysql víi -0 lower_case_table_names = 1, Theo mÆc ®Þnh tïy chän nµy lµ 1 trªn Windows vµ 0 trªn Unix. NÕu lower_case_table_names lµ 1 MySQL sÏ chuyÓn ®æi tÊt c¶ c¸c tªn b¶ng vÒ ch÷ th−êng ,Chó ý r»ng nÕu b¹n thay ®æi tïy chän nµy, b¹n cÇn tr−íc hÕt chuyÓn ®æi nh÷ng tªn b¶ng cò cña b¹n vÒ ch÷ th−êng tr−íc khi b¾t ®Çu mysql. 7. BiÕn ng−êi sö dông Mysql hæ trî c¸c biÕn riªng cïng víi có ph¸p @variable name. Tªn biÕn bao gåm kÝ tù anpha t− tËp c¸c kÝ tù vµ thªm vao kÝ tù ‘_’, ’$’, vµ ‘.’ BiÕn kh«ng ph¶i khëi t¹o, NULL kh«ng xuÊt hiÖn trong biÕn, biÕn cã thÓ chøa sè nguyªn thùc hoÆc gi¸ trÞ x©u. TÊt c¶ c¸c biÕn sÏ tù gi¶i phãng vïng nhí khi chóng tho¸t ra. B¹n cã thÓ g¸n biÓu thøc vµo biÕn theo có ph¸p : @variable:=expr VÝ dô: select @t1:=(@t2:=1)@t3:=4,@t1,@t2,@t3; -------- | @t1:=(@t2:=1)@t3:=4 | @t1 | @t2 | @t3 | ------- | 5 | 5 | 1 | 4 | -------- chóng ta ph¶i sö dông có ph¸p:= ®Ó g¸n biÕn, bëi v× dÊu b»ng (= ) ®−îc sö dông ®Ó so s¸nh .
  • 68. cntt cña c¬ quan ®¶ng PHP & MySQL 68 biÕn cã thÓ ®−îc sö dông trong mét biÓu thøc l−u ý r»ng ®iÒu nµy kh«ng ®−îc sö dông trong ng÷ c¶nh mét sè ®−îc yªu cÇu râ rµng nh− trong mÖnh ®Ò LIMIT cña lÖnh select hoÆc mÖnh ®Ò IGNORE number LINES cña lÖnh LOAD DATA . chó ý : trong lÖnh SELECT mçi biÓu thøc chØ nhËn mét gi¸ trÞ khi nã ®−îc göi cho ng−êi dïng. §iÒu nµy còng ®óng trong mÖnh ®Ò HAVING, GROUP BY, ORDER BY. B¹n kh«ng thÓ tham chiÕu tíi mét biÓu thøc gåm tËp hîp c¸c biÕn trong SELECT. VÝ dô: SELECT (@aa:=id) AS a, (@aa3) AS b FROM table_name HAVING b=5; C©u lÖnh trªn kh«ng thùc hiÖn ®−îcbëi v× @aa sÏ kh«ng chøa gi¸ trÞ ë hµng hiÖn t¹i trõ phi gÝ trÞ cña id thay cho cét ®· ®−îc chÊp nh¹n tr−íc . 8. C¸c dßng chó thÝch Mysql cho phÐp chÌn c¸c c©u chó thÝch vµo trong kÞch b¶n cña Mysql, khi thùc hiÖn tr×nh th«ng dÞch sÏ bá qua tÊt c¶ c¸c ®o¹n v¨n b¶n lµ c©u chó thÝch Trong Mysql chó thÝch ®−îc ®Æt sau dÊu : # dßng chó thÝch dßng chó thÝch c¸ch viÕt nµy chØ cã t¸c dông trªn mét dßng . dïng cÆp kÝ hiÖu sau : /* ....*/ ®Ó chÌn c¸c c©u chó thÝch, lo¹i chó thÝch nµy ®−îc gäi lµ chó thÝch khèi . vÝ dô: mysql> select 11; # chó thÝch trªn mét dßng mysql> select 11; chó thÝch trªn mét dßng mysql> select 1 /* chó thÝch khèi*/ 1; mysql> select 1 /* chó thÝch trªn nhiÒu dßng chó thÝch khèi */ 1; l−u ý r»ng chó thÝch – yªu cÇu b¹n ph¶i cã Ýt nhÊt mét dÊu c¸ch sau --! MÆc dï vËy cã vµi h¹n chÕ trong c¸ch ghi chó *..* ®ã lµ: - kÝ tù nh¸y ®¬n vµ nh¸y ®«i dïng ®Ó chØ sù b¾t ®Çu cña mét x©u thËm chÝ sö dông bªn trong mét chó thÝch nÕu trong chó thÝch dÊu nh¸y thø nhÊt kh«ng phï hîp víi dÊu nh¸y thø hai th× hÖ ph©n tÝch sÏ kh«ng nhËn ra ®iÓm kÕt thóc cña ghi chó. - dÊu chÊm phÈy ( ; ) ®−îc dïng ®Ó b¸o kÕt thóc cña mét c©u lÖnh Mysql vµ sau dÊu ( ; ) lµ sù b¾t ®Çu cña c©u lÖnh tiÕp theo.
  • 69. cntt cña c¬ quan ®¶ng PHP & MySQL 69 Ch−¬ng II. C¸c thµnh phÇn cña My SQL Trong phÇn nµy chóng ta giíi thiÖu kh¸i qu¸t vÒ c¸c kiÓu d÷ liÖu cña c¸c tr−êng va c¸c thuéc tÝnh vÒ kiÓu trong mçi lo¹i d÷ liÖu.Sau ®ã lµ mét sè kiÓu b¶ng trong MySQL vµ cuèi cïng lµ mét sè hµm c¬ b¶n ®−îc cung cÊp bëi MySQL. I. C¸c kiÓu d÷ liÖu Trong MySQL cã c¸c kiÓu d÷ liÖu sau: KiÓu sè KiÓu kÝ tù (char,varchar,Blob,Text,Enum,Set) KiÓu x©u. KiÓu ngµy giê (Datetime,Date,TimeStamp,Time,year) 1. KiÓu sè KiÓu tinyint: Khai b¸o TINYINT[Cm] [UNSGNED] [ZEROFIU].§©y lµ kiÓu sè nguyªn víi gi¸ trÞ rÊt nhá: -NÕu khai b¸o víi tõ kho¸ nusigned th× gi¸ trÞ mµ cét cã kiÓu nµy cã thÓ n»m trong kho¶ng 0 ®Õn 255. -NÕu kh«ng cã tõ khãa nusiged th× gi¸ trÞ trong kho¶ng –128 ®Õn 127 KiÓu Smallint Khai b¸o:Smallint [Cm] [nusiged] [zerofill].§©y lµ kiÓu sè nguyªn cã gi¸ trÞ nhá: -NÕu lµ sè cã dÊu th× gi¸ trÞ n»m trong kho¶ng-32768 ®Õn 32767 -NÕu lµ sè kh«ng dÊu th× gi¸ trÞ trong kho¶ng 0 ®Õn 65536. KiÓu Mediumint Khai b¸o :Mediumint [cm] [nusiged] [zerofill] [(m)] -NÕucã dÊu th× gi¸ trÞ n»m trong kho¶ng –8388608 ®Õn 8388607. -NÕu lµ sè cã dÊu th× gi¸ trÞ n»m trong kho¶ng 0 ®Õn 16777215. KiÓu Int: Khai b¸o:Int:[Cm] [nusiged] [zerofill] -Víi sè cã dÊu gi¸ trÞ trong kho¶ng –2147483648 ®Õn 2147483647 -Víi sè kh«ng dÊu gi¸ trÞ trong kho¶ng 0 ®Õn 429467295 KiÓu Interger Khai b¸o:interger [Cm] [nusiged] [zerofill].T−¬ng tù kiÓu INT.
  • 70. cntt cña c¬ quan ®¶ng PHP & MySQL 70 KiÓu Bigint Khai b¸o :Bigint [Cm] [nusiged] [zerofill].§©y lµ kiÓu nguyªn mµ gi¸ trÞ lµ rÊt lín. -Víi sè cã dÊu gi¸ trÞ trong kho¶ng –9223372036854775808 ®Õn 9223372036854775807. -Víi sè kh«ng dÊu gi¸ trÞ trong kho¶ng 0 ®Õn 18446744073709551615 Note:tÊt c¶ c¸c phÐp to¸n sè häc sö dông sè cã dÊu bigint hoÆc double, v× vËy kh«ng sö dông sè kh«ng dÊu ,mµ gi¸ trÞ v−ît qu¸ sè nguyªn lín tøc lµ nÕu nh©n hai sè nguyªn lín th× gi¸ trÞ tr¶ vÒ sÏ v−ît qu¸ sè nguyªn lín cã dÊu. KiÓu float: Khai b¸o:float (precision)[zerofill].§èi víi sè thùc ®é chÝnh x¸c ®¬n th× ®é chÝnh x¸c <24.§èi víi sè thùc ®é chÝnh x¸c kÐp th× ®é chÝnh x¸c <255.Float(x) gièng kiÓu double,float nh−ng cì vµ sè ch÷ sè phÇn thËp ph©n ch−a ®−îc ®Þnh nghÜa Precision:sè ch÷ sè phÇn thËp ph©n mµ float cã thÓ nhËn.Float [Cm,d] [zerofill]:®©y lµ sè thùc víi ®é chÝnh x¸c kÐp víi m hiÓn thÞ ®é réng,d lµ sè c¸c ch÷ sè phÇn thËp ph©n. NÕu dïng float kh«ng cã ®èi hoÆc ®èi <=24,th× t−¬ng øng dïng sè thùc cã ®é chÝnh x¸c ®¬n. Double [(Cm,d)] [zerofill]:sè thùc víi ®é chÝnh x¸c kÐp víi m lµ ®é réng, d lµ sè ch÷ sè phÇn thËp ph©n.Nõu dïng double kh«ng ®èi hoÆcdïng float(x) víi 25<=x<=53 thay cho mét sè thùc ®é chÝnh x¸c kÐp. Double precision [(Cm,d)][zerofill] Real [(Cm,d)][zerofill] .t−¬ng tù nh− sè double. Decimal [(Cm,d)][zerofill] ®−îc coi nh− mét kiÓu char,®−îc l−u tr÷ nh− mét x©u mçi kÝ tù lµ mét kÝ sè cña gi¸ trÞ cÇn l−u tr÷. Nuneric [(Cm,d)][zerofill] t−¬ng tù decimal. 2.KiÓu ngµy giê 2.1 Datime, Date, TimeStamp. C¸c kiÓu Datime, Data, TimeStamp cã nh÷ng ®Æc tr−ng riªng nh−ng còng cã mèi liªn quan. Cã mét sè Y2K chóng ta ®· tõng biÕn ®æi víi c¸c kiÓu thêi gian kh«ng gian râ rµng trªn MySQL ®· gi¶i thÝch c¸c ngµy cïng víi gi¸ trÞ n¨m mËp mê theo quy luËt sau: -Gi¸ trÞ n¨m trong kho¶ng 70-69 ®−îc chuyÓn sang n¨m 2000-
  • 71. cntt cña c¬ quan ®¶ng PHP & MySQL 71 2069 -Gi¸ trÞ n¨m trong kho¶ng 70-99 ®−îc chuyÓn sang n¨m 1970- 1999. §ã lµ v× gi¸ trÞ n¨m ta chØ ®Ó hai ch÷ sè, cßn hai sè tr−íc mÆc ®Þnh lµ n¨m 1900.§Ó lµm cho kh«ng nhÇm lÉn n¨m th× ph¶I cung cÊp gi¸ trÞ n¨m lµ bèn sè.MySQL ®· lµm ®iÒu nµy. KiÓu datetime: §©y lµ kiÓu ngµy giê ®−îc dïng khi b¹n cÇn l−u tr÷ th«ng tin c¶ vÒ ngµy th¸ng vµ thêi gian.Gi¸ trÞ cña nã n»m trong kho¶ng 1000-01-10:00:00 ®Õn ‘9999-12-3123:59:59’ MySQL hiÓn thÞ datatime theo ®Þnh d¹ng: “yyyy-mm-dd hh:mm:ss” nh−ng nã còng cho phÐp Ên ®Þnh gi¸ trÞ cho kiÓu nµy b»ng d¹ng sè hoÆc x©u. KiÓu Date ®−îc dïng khi b¹n chØ cÇn l−u tr÷ gi¸ trÞ ngµy th¸ng. MySQL truy xuÊt vµ hiÓn thÞ gi¸ trÞ DATE víi ®Þnh d¹ng “yyyy- mm-dd” Gi¸ trÞ trong kho¶ng ‘1000-01-01’ ®Õn ‘9999-12-31’cã thÓ Ên ®inh b»ng sè hoÆc x©u. KiÓu TIMESTAMP [Cm] Cung cÊp 1 kiÓu mµ b¹n cã thÓ dïng ®Ó ®¸nh dÊu mét c¸ch tù ®éng ®èi víi phÐp INSERT hoÆc UPDATE cïng víi ngµy giê hiÖn t¹i.NÕu cã nhiÒu cét TIMESTAMP th× chØ cét ®Çu tiªn ®−îc cËp nhËt mét c¸ch tù ®éng. §Ó cËp nhËt vµo cét ®Çu nh− vËy còng ph¶i tho¶ m·n c¸c ®iÒu kiÖn sau: -Cét mµ chøa ®−îc x¸c ®Þnh chi tiÕt trong mÖnh ®Ò INSERT hoÆcLOADDATAINFILE -Cét mµ kh«ng x¸c ®Þnh chi tiÕt trong lÖnh UPDATE vµ mét sè cét kh¸c ®· thay ®æi gi¸ trÞ -B¹n ®Æt chi tiÕt cét TIMESTAMP lµ ngµy giê hiÖn t¹i b»ng c¸ch Ên ®Þnh gi¸ trÞ NULL C¸c cét kh¸c cã thÓ ®−îc ®Æt thêi gian vµ ngµy th¸ng hiÖn t¹i.ChØ cµ víi cét gi¸ trÞ NULL hoÆc NOW.Gi¸ trÞ cña TIMESTAMP lµ tõ 1970- 01-01:00:00:00.§Õn n¨m 2037 th× MySQL hiÓn thÞ TIMESTAMP theo ®Þnh d¹ng ‘yyyy mm dd hh mm ss’ ‘yyyy mm dd hh mm ss’.MySQL còng cho phÐp sö dông b»ng x©u hoÆc sè. KiÓu TIME MySQL ®Þnh d¹ng gi¸ trÞ thêi gian lµ ‘hh:mm:ss’ hoÆc HHH:MM:SS Nguyªn nh©n mµ phÇn giê cã thÓ lín h¬n t¹i v× kiÓu TIME kh«ng chØ biÓu diÔn thêi gian trong 1ngµy (giê ph¶i <24) mµ nã cßn lµ kho¶ng thêi gian gi÷a hai sù kiÖn (cã thÓ >24 hoÆc thËm chÝ lµ ©m).Gi¸ trÞ cña