PHP được phát triển từ ngôn ngữ kịch bản (script) với mục đích xây dựng trang Web cá nhân (Personal Home Page). Sau đó đã được phát triển thành một ngôn ngữ hoàn chỉnh và được ưa chuộng trên toàn thế giới trong việc phát triển các ứng dụng Web based
Theo NetCraft:
Tháng 11 năm 1999, hơn 1 triệu máy chủ
Tháng 9 năm 2000, hơn 1.4 triệu máy
PHP (PHP: Hypertext Perprocessor) là ngôn ngữ kịch bản lập trình phía máy chủ (server-side) phổ biến nhất thế giới.
PHP thường hoạt động theo thứ tự sau:
Người dùng gửi yêu cầu lên máy chủ
Máy chủ xử lý yêu cầu (Thông dịch mã PHP và chạy chương trình, mã PHP có thể truy xuất CSDL, tạo hình ảnh, đọc ghi file, tương tác với máy chủ khác.)
Máy chủ gửi dữ liệu về cho người dùng (thường là dưới dạng HTML)
164 trang |
Chia sẻ: tuandn | Lượt xem: 3061 | Lượt tải: 4
Bạn đang xem trước 20 trang tài liệu Bài giảng PHP, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
PHP (PHP: Hypertext Preprocessing) Người lập: Nguyễn Phú Quảng Bộ môn: Tin học Xây dựng Nội dung trình bày Làm quen với PHP PHP Căn bản Các tính năng cho ứng dụng Web base Làm việc với Form Các hàm làm việc với MySQL Làm việc với File Các hàm làm việc với hình ảnh Các hàm trên ngày tháng Các hàm trên dữ liệu Cookies và QueryString Session Gỡ lỗi I. Làm quen với PHP I.1. PHP là gì? I.2. Lịch sử phát triển của PHP I.3. Lý do chọn PHP I.4. Zend Engine I.5. Cài đặt PHP I.6. Chương trình PHP đầu tiên I.7. Các IDE cho PHP I.1. PHP là gì? PHP được phát triển từ ngôn ngữ kịch bản (script) với mục đích xây dựng trang Web cá nhân (Personal Home Page). Sau đó đã được phát triển thành một ngôn ngữ hoàn chỉnh và được ưa chuộng trên toàn thế giới trong việc phát triển các ứng dụng Web based Theo NetCraft: Tháng 11 năm 1999, hơn 1 triệu máy chủ Tháng 9 năm 2000, hơn 1.4 triệu máy PHP (PHP: Hypertext Perprocessor) là ngôn ngữ kịch bản lập trình phía máy chủ (server-side) phổ biến nhất thế giới. PHP thường hoạt động theo thứ tự sau: Người dùng gửi yêu cầu lên máy chủ Máy chủ xử lý yêu cầu (Thông dịch mã PHP và chạy chương trình, mã PHP có thể truy xuất CSDL, tạo hình ảnh, đọc ghi file, tương tác với máy chủ khác...) Máy chủ gửi dữ liệu về cho người dùng (thường là dưới dạng HTML) I.1. PHP là gì? (2) I.2. Lịch sử phát triển của PHP Phiên bản đầu tiên của PHP được phát triển năm 1994, bao gồm các macro cho trang Web cá nhân (Personal Home Page) Sau đó, PHP được phát triển thêm một số chức năng mới gọi là Form Interpreter (PHP/FI) và có được sự quan tâm lớn từ phía cộng đồng Phiên bản tiếp theo, PHP3, được viết lại bởi một nhóm các lập trình viên (Zeev Suraski, Andi Gutmans). PHP3 được bổ sung thêm một số tính năng và các cú pháp ngôn ngữ khác, đã trở thành ngôn ngữ kịch bản phía máy chủ được ưa chuộng nhất I.3. Lý do chọn PHP Khi sử dụng PHP, người dùng sẽ có được tốc độ nhanh hơn nhiều so với các ngôn ngữ kịch bản khác, bởi PHP là phần mềm mã nguồn mở, được hỗ trợ bởi nhiều lập trình viên giỏi, có số lượng người dùng đông đảo. Ngoài ra PHP chạy được trên nhiều hệ điều hành khác nhau I.3. Lý do chọn PHP (2) Rút ngắn thời gian phát triển PHP cho phép bạn tách phần HTML code và phần script, do đó có thể độc lập giữa công việc phát triển mã và thiết kế. Điều này vừa giúp lập trình viên dễ dàng hơn vừa có thể làm cho chương trình mềm dẻo hơn trong việc thay đổi giao diện PHP là phần mềm mã nguồn mở PHP không chỉ là phần mềm mã nguồn mở mà còn thực sự miễn phí (kể cả khi bạn sử dụng cho mục đích thương mại) Do là phần mềm mã nguồn mở, các lỗi (bug) của PHP được công khai và nhanh chóng được sửa chữa bởi nhiều chuyên gia I.3. Lý do chọn PHP (3) Tốc độ Nhờ vào sức mạnh của Zend Engine, khi so sánh PHP với ASP, có thể thấy PHP vượt hơn ở một số test, vượt trội ở tốc độ biên dịch. Tính khả chuyển PHP được thiết kế để chạy trên nhiều nền tảng khác nhau, có thể làm việc với nhiều phần mềm máy chủ, cơ sở dữ liệu (ví dụ: bạn có thể phát triển dự án trên UNIX, sau đó chuyển sang NT mà không gặp phải bất cứ vấn đề gì) I.4. Zend Engine Zend là scripting engine nằm bên trong PHP Zend Engine thực sự là sự cải tiến đáng kể. Hầu hết các đoạn mã viết trên PHP3 đều có thể chạy trên PHP4 với tốc độ tăng gấp 200 lần I.5. Cài đặt PHP Bạn có thể tìm phiên bản mới nhất của PHP tại địa chỉ PHP là phần mềm mã nguồn mở, bạn có thể download cả mã nguồn của PHP Bạn có thể tìm tài liệu tham khảo của PHP tại địa chỉ I.5. Cài đặt PHP (2) Cài đặt PHP với IIS Control Panel/Add Remove Programs/Add Remove Window Components Bật Internet Information Services Download PHP Installer (Windows Binaries) từ Cài đặt PHP (chọn server IIS) Cài đặt Apache Download Apache tại Cài đặt Apache I.5. Cài đặt PHP (3) Download bản PHP zip package (Window Binaries) Giải nén vào thư mục C:\PHP Sửa file conf/httpd.conf, thêm vào nội dung sau ScriptAlias /php/ "c:/php/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php.exe" Hoặc (Copy php5ts.dll vào thư mục c:/windows/system32) LoadModule php5_module "c:/php/sapi/php5apache2.dll" AddType application/x-httpd-php .php I.5. Cài đặt PHP (4) Thêm alias (vào trong httpd.conf) Alias fake “realname” Alias /pm/ "C:/PMNM/47PM1/47PM1/” Chú ý: fake phải bắt đầu bằng / nếu fake kết thúc bằng / thì realname cũng phải kết thúc bằng / I.6. Chương trình PHP đầu tiên Chương trình đầu tiên (bạn có thể soạn bằng bất kỳ trình soạn thảo văn bản nào) Lưu file dưới tên hello.php tại c:\inetpub\wwwroot\php (IIS) hoặc trong thư mục ứng với Alias vừa tạo ra Tại trình duyệt, nhập vào địa chỉ I.6. Chương trình PHP đầu tiên (2) Khối chương trình PHP I.6. Chương trình PHP đầu tiên (3) Chuong trinh PHP dau tien I.7. Các IDE cho PHP Như đã biết, bạn có thể viết chương trình PHP bằng bất cứ hệ soạn thảo văn bản nào. Tuy nhiên, để có được các chức năng hỗ trợ như AutoComplete, Debug... cần phải sử dụng các IDE dành riêng cho PHP Macromedia DreamWaver Nusphere PHPED Zend Studio II. PHP Căn bản II.1. Biến, kiểu và hằng II.2. Toán tử và biểu thức II.3. Các câu lệnh điều khiển II.4. Hàm II.5. Lớp & đối tượng II.6. Tham chiếu (reference) II.1. Biến, kiểu và hằng II.1.1. Biến II.1.1.1. Tên biến II.1.1.2. Tham chiếu II.1.1.3. Biến động II.1.1.4. Phạm vi (scope) của biến II.1.2. Kiểu II.1.3. Hằng II.1.1.1. Tên biến Biến được ký hiệu bởi ký tự $ Tên biến phải được bắt đầu bởi 1 chữ cái hoặc ký tự gạch chân Tên biến không chứa các dấu và ký tự cách II.1.1.2. Tham chiếu Giống ngôn ngữ C, trong PHP bạn có thể sử dụng tham chiếu $quang"); $q = &$quang; $q = "quangnp"; echo("$quang");?> II.1.1.3. Biến động (Dynamic Variable) Vì PHP là ngôn ngữ thông dịch nên bạn có thể sử dụng các biến có tên chưa biết trước (tên biến thay đổi) "); // In ra gia tri cua bien a echo("$quang"); // In ra gia tri cua bien quang ${"quang"} = 13432; // Gian truc tiep bien dong echo("$quang"); $c = "quang"; ${$c} = 1000; // Mot cach khac de truy cap den bien dong quang echo("${$c}");?> II.1.1.4. Phạm vi của biến Phạm vi của biến [a] có tác dụng trong cả b.inc Biến [a] ở ngoài và trong hàm Test khác nhau II.1.1.4. Phạm vi của biến (2) Từ khóa global Hoặc sử dụng cú pháp II.1.1.4. Phạm vi của biến (3) II.1.1.4. Phạm vi của biến (4) II.1.2. Kiểu Các kiểu đơn II.1.2.1. boolean II.1.2.2. integer II.1.2.3. float II.1.2.4. string Các kiểu phức II.1.2.5. array II.1.2.6. object Các kiểu đặc biệt II.1.2.7. resource II.1.2.8. NULL II.1.2. Kiểu (2) Bạn có thể ép kiểu bằng hàm settype() II.1.2.1. Kiểu boolean ");$q = (1=="1");echo("$q");// this is not necessary...if ($show_separators == TRUE) { echo "\n";}// ...because you can simply typeif ($show_separators) { echo "\n";}?> II.1.2.2. Kiểu integer ");$a=100000000;var_dump($a); echo("");$a=1000000000;var_dump($a); echo("");$a=10000000000;var_dump($a); echo("");?> II.1.2.3. Kiểu float II.1.2.4. Kiểu string String trong PHP là một chuỗi các ký tự 1 byte. PHP không hỗ trợ Unicode, để làm việc với Unicode bạn phải sử dụng UTF8 với các hàm utf8_encode() – utf8_decode() String của PHP hỗ trợ chiều dài rất lớn (?) Trong PHP, string được xác định theo 3 cách Dấu nháy đơn (single quote) Dấu nháy kép (double quote) Heredoc Truyền biến trong string Truyền kiểu đơn giản Truyền kiểu phức Truy cập đến từng ký tự trong string Các toán tử trên string II.1.2.4. Kiểu String (2) Kiểu dấu nháy đơn II.1.2.4. Kiểu String (3) Kiểu dấu nháy kép: kiểu này giống với kiểu dấu nháy đơn nhưng có nhiều hỗ trợ cho các ký tự đặc biệt hơn II.1.2.4. Kiểu String (4) Kiểu Heredoc spanning multiple linesusing heredoc syntax.EOA;echo($str);$name = "quang";$d = date("d/m/y");$str = Ngay $dEOQ;echo($str);?> II.1.2.4. Kiểu String (5) Truyền biến kiểu đơn giản Truyền biến kiều phức (truyền biến kiểu mảng vào string) – sẽ đề cập đến ở phần mảng II.1.2.4. Kiểu String (6) Truy cập đến từng ký tự của String $str"; $str{strlen($str)-1} = "s"; // Sua ky tu cuoi cung echo "$str";?> Các toán tử trên string "; echo $str1 + $str2, "";?> II.1.2.5. Kiểu Array Kiểu Array của PHP thực sự là kiểu ánh xạ (map) có thứ tự. Tức là kiểu dữ liệu gồm các cặp khóa (key) và giá trị (value). Với kiểu mảng này, bạn có thể sử dụng như một mảng thuần túy (vector), hay dùng cho các kiểu dữ liệu collection, stack, queue, tree... II.1.2.5. Kiểu Array (2) Khai báo "; $ar = array(5=>10, 20, 30, "q"=>40); echo var_dump($ar), ""; $ar = array(5=>10, 6=>20, 7=>30, "q"=>40); echo var_dump($ar), ""; $ar = array("a"=>10, 20, 30, 40); echo var_dump($ar), ""; $ar = array("a"=>array(1,2,3,4,5), 20, 30, 40); echo var_dump($ar);?> II.1.2.5. Kiểu Array (3) Sử dụng array 1, 12 => 2); $arr[] = 56; // This is the same as $arr[13] = 56; // at this point of the script $arr["x"] = 42; // This adds a new element to // the array with key "x" unset($arr[5]); // This removes the element from the array unset($arr); // This deletes the whole array?> II.1.2.6. Kiểu Object sobanh); }};$xe = new Xeco();$xe->sobanh = 4;$xe->BaoNhieuBanh();?> II.1.3. Hằng Định nghĩa hằng bằng cách sử dụng hàm define() Phạm vi của hằng là toàn cục (global) Chỉ có các dạng dữ liệu đơn giản (boolean, interger, float, string) Nếu tên hằng chưa được định nghĩa, PHP giả thiết rằng bạn đang sử dụng 1 hằng chứa giá trị là 1 string (chính là tên của hằng đó) Để xác định một hằng đã được định nghĩa hay chưa, bạn có thể sử dụng hàm defined II.1.3. Hằng (2) Các hằng được định nghĩa trước (các hằng này thường được sử dụng để phục vụ quá trình debug II.2. Toán tử và biểu thức II.2.1. Mức độ ưu tiên các toán tử II.2.2. Toán tử số học II.2.3. Toán tử gán II.2.4. Các toán tử trên bit II.2.5. Toán tử so sánh II.2.6. Toán tử điều khiển lỗi II.2.7. Toán tử thực thi II.2.8. Toán tử tăng, giảm II.2.9. Các toán tử logic II.2.10. Toán tử trên string II.2.11. Toán tử trên mảng II.2.1. Mức độ ưu tiên các toán tử II.2.2. Toán tử số học II.2.3. Toán tử gán Toán tử gán (=) cho phép bạn gán một biểu thức (vế phải) cho 1 biến (vế trái) Toán tử gán trả về giá trị của biểu thức vế phải, do đó có thể dùng nhiều phép gán liên tiếp nhau Ngoài ra, còn có các phép toán gọi là phép toán kết hợp cho hầu hết các toán tử số học để thay đổi giá trị 1 biến theo phép toán số học đó (+=, -=, *=, /=, .= ...) II.2.4. Các toán tử trên bit II.2.5. Toán tử so sánh II.2.6. Toán tử điều khiển lỗi Toán tử điều khiển lỗi (@) dùng để đặt trước các hàm, biểu thức. Khi đó tất cả các thông báo lỗi trong hàm, biểu thức đó bị bỏ qua II.2.7. Toán tử thực thi Toán tử thực thi (``) cho phép bạn gọi các lệnh trên console, (các thông tin tin này có thể viết ra output hoặc gán vào các biến) II.2.8. Toán tử tăng, giảm \n";echo "Should be 6: " . $a . "\n";$a = 5;echo "Should be 6: " . ++$a . "\n";echo "Should be 6: " . $a . "\n";$a = 5;echo "Should be 5: " . $a-- . "\n";echo "Should be 4: " . $a . "\n";$a = 5;echo "Should be 4: " . --$a . "\n";echo "Should be 4: " . $a . "\n";?> II.2.9. Các toán tử logic II.2.10. Toán tử trên string Có 2 toán tử trên string ( . và .=) II.2.11. Toán tử trên mảng Đối với mảng, chỉ có toán tử +, toán tử này nối 2 mảng với nhau (các phần trùng khóa được lấy ở toán hạng trái) "apple", "b" => "banana"); $b = array("a" =>"pear", "b" => "strawberry", "c" => "cherry"); $c = $a + $b; var_dump($c);?> II.3. Các cấu trúc điều khiển II.3.1. Cấu trúc if, else, elseif, endif II.3.2. Cấu trúc while / do...while II.3.3. Cấu trúc for / for...each II.3.4. Sử dụng break, continue trong các vòng lặp II.3.5. Cấu trúc switch II.3.1. Cấu trúc if, else, elseif, endif $b) { echo "a is bigger than b"; $b = $a;}if ($a > $b) { echo "a is bigger than b";} else { echo "a is NOT bigger than b";}if ($a > $b) { echo "a is bigger than b";} elseif ($a == $b) { echo "a is equal to b";} else { echo "a is smaller than b";}?> A is equal to 5 II.3.2. Cấu trúc while / do...while 0); ?> II.3.3. Cấu trúc for / for...each 10) break; print "$i\n";} echo "--------------------\n";$i = 1;for (;;) { if ($i > 10)break; print "$i\n"; $i++;}echo "--------------------\n";for ($i = 1; $i II.3.3. Cấu trúc for / for...each (2) foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement \n"; } foreach ($arr as $value) { echo "Value: $value\n"; } foreach ($arr as $key => $value) { echo "Key: $key; Value: $value\n"; } foreach (array(1, 2, 3, 4, 5) as $v) { print "$v\n"; }?> II.3.4. Sử dụng break, continue trong các vòng lặp \n";}while (list ($key, $value) = each ($arr)) { if (!($key % 2)) // Bỏ qua số lẻ continue; do_something_odd ($value);} ?> II.3.4. Sử dụng break, continue trong các vòng lặp (2) $i = 0;while ($i++ \n"; while (1) { echo " Middle\n"; while (1) { echo " Inner\n"; continue 3; } echo "This never gets output.\n"; } echo "Neither does this.\n";}?> II.3.5. Cấu trúc switch II.4. Hàm II.4.1. Hàm tự định nghĩa (user-defined) II.4.2. Truyền tham số II.4.3. Giá trị trả về II.4.4. Biến hàm II.4.1. Hàm tự định nghĩa (user-defined) II.4.2. Truyền tham số PHP hỗ trợ truyền tham số vào hàm, truyền tham số dưới dạng tham chiếu (reference), truyền tham số với giá trị mặc định II.4.2. Truyền tham số (2) function makecoffee ($type = "cappuccino") { return "Making a cup of $type.\n";}echo makecoffee ();echo makecoffee ("espresso");function makeyogurt ($type = "acidophilus", $flavour) { return "Making a bowl of $type $flavour.\n";} // won't work as expected echo makeyogurt ("raspberry");function makeyogurt ($flavour, $type = "acidophilus") { return "Making a bowl of $type $flavour.\n";} // works as expected echo makeyogurt ("raspberry"); II.4.2. Truyền tham số (3) Bạn có thể truyền tham số với số lượng không xác định. Khi đó sẽ sử dụng các hàm sau func_num_args(): Số lượng tham số func_get_args(): Lấy danh sách các tham số II.4.3. Giá trị trả về Để trả về giá trị của hàm, sử dụng lệnh return. Có thể sử dụng bất cứ kiểu nào trong giá trị trả về của hàm (kể cả mảng và đối tượng) II.4.4. Biến hàm Bạn có thể sử dụng các biến hàm (tức là bạn có thể gọi hàm dưới dạng ten_bien() ). Biến hàm thường được sử dụng cho các hàm callback \n"; } function bar($arg = '') { echo "In bar(); argument was '$arg'.\n"; } // This is a wrapper function around echo function echoit($string) { echo $string; } $func = 'foo'; $func(); // This calls foo() $func = 'bar'; $func('test'); // This calls bar() $func = 'echoit'; $func('test'); // This calls echoit()?> II.4.4. Biến hàm (2) $name(); // This calls the Bar() method } function Bar() { echo "This is Bar"; }}$foo = new Foo();$funcname = "Var";$foo->$funcname(); // This calls $foo->Var() ?> II.5. Lớp & đối tượng II.5.1. Serializing đối tượng – đối tượng trong session II.5.2. Tham chiếu bên trong constructor II.5.3. So sánh đối tượng trong PHP4 II.5.4. So sánh đối tượng trong PHP5 II.5.1. Serializing đối tượng – đối tượng trong session Hàm serialize() dùng để lưu trữ đối tượng, hàm trả về một chuỗi các byte để lưu thông tin của đối tượng Hàm unserialize() dùng để khôi phục đối tượng được lưu giữ bởi hàm serialize() a = 10;$ob1->b = 100;$ob1->c = "Nguyen Phu Quang"; $luu = serialize($ob1);echo "$luu\n";$ob2 = unserialize($luu);var_dump($ob2);?> II.5.2. Tham chiếu bên trong constructor setName($name); } function setName($name) { $this->m_name = $name; } function echoName() { echo "$this->m_name\n"; }}; $a = new AClass("a");$b =& new AClass("b");$a->setName("quang1");$global_ref[0]->echoName();$b->setName("quang2");$global_ref[1]->echoName();?> II.5.3. So sánh đối tượng trong PHP4 m_flag = true; }}; $a = new AClass();$b = new BClass();$a->m_flag = true;$b->turnOn();$c = new BClass();$c->turnOn();var_dump($b==$c);var_dump($a==$b);?> Trong PHP4, phép so sánh các đối tượng thực hiện theo quy tắc đơn giản sau: Hai đối tượng là bằng nhau nếu chúng có các thuộc tính bằng nhau và cùng thuộc 1 lớp. Quy tắc so sánh này cùng được áp dụng với phép === II.5.3. So sánh đối tượng trong PHP4 set[$key] = $value; } function removeFlag($key) { unset($this->set[$key]); } }; $a = $b = new AClass(); $a->addFlag("quang", 1); $a->addFlag("quang2", 2); $b->addFlag("quang", 1); $b->addFlag("quang2", 2); var_dump($a==$b); $b->removeFlag("quang"); var_dump($a==$b);?> II.5.4. So sánh đối tượng trong PHP5 So sánh đối tượng trong PHP5 có một số thay đổi so với PHP4 Đối với phép so sánh ==, hai đối tượng bằng nhau nếu có chung các thuộc tính và cùng thuộc 1 lớp Đối với phép so sánh ===, hai đối tượng được gọi là bằng nhau nếu chúng cùng tham chiếu đến 1 phiên bản của 1 lớp II.6. Tham chiếu (reference) II.6.1. Các trường hợp sử dụng tham chiếu II.6.2. Các trường hợp ko sử dụng tham chiếu II.6.3. Truyền tham chiếu II.6.4. Trả về tham chiếu II.6.5. Unset tham chiếu II.6.1. Các trường hợp sử dụng tham chiếu Tham chiếu cho phép bạn sử dụng 1 biến với nhiều tên khác nhau Đối với đối tượng, nên sử dụng phép gán tham chiếu khi dùng toán tử new để tránh phép gán tạo ra thêm 1 phiên bản của đối tượng Để thay đổi giá trị của tham số truyền vào trong hàm, bạn có thể sử dụng tham chiếu II.6.2. Các trường hợp ko sử dụng tham chiếu Tham chiếu gần giống con trỏ nhưng bản chất không phải là con trỏ Trong trường hợp tại ví dụ dưới đây, $var trong hàm foo đầu tiên được tham chiếu đến biến $var (global). Tuy nhiên sau đó $var lại được tham chiếu điến biến $quang (global) II.6.3. Truyền tham chiếu Bạn có thể truyền các dạng tham chiếu sau: Biến foo($a) Lệnh new foo(new AClass()); Tham chiếu trả về từ hàm II.6.4. Trả về tham chiếu Hàm có thể trả về tham chiếu, khi đó bạn đặt toán tử tham chiếu đứng trước tên hàm Nếu hàm trả về tham chiếu, để nhân được tham chiếu bạn phải dùng toán tử gán với tham chiếu đến hàm (xem ví dụ) II.6.5. Unset tham chiếu Bạn có thể sử dụng lệnh unset() để loại bỏ một biến khỏi bộ nhớ Nếu unset được sử dụng với 1 biến tham chiếu, PHP sẽ kiểm tra xem còn biến nào cùng tham chiếu đến vùng nhớ hay không rồi mới loại bỏ biến khỏi bộ nhớ III. Làm việc với Form III.1. Các biến SuperGlobal III.2. Biến $_SERVER III.3. Lấy thông tin từ form III.4. Kết hợp mã HTML và PHP trong 1 trang III.5. Sử dụng Hidden field để lưu trạng thái III.6. Redirect III.7. Form Upload file III.1. Các biến SuperGlobal Các biến global là các biến được khai báo ở mức ngoài cùng của PHP được sử dụng chung cho mọi module Các biến SuperGlobal là các biến (mảng) được PHP tạo ra để lưu các thông tin cần thiết III.2. Biến $_SERVER III.2. Biến $_SERVER (2) Đoạn lệnh sau liệt kê tất cả các thông tin của biến $_SERVER $value) { echo "[$key]=$value\n";}?> III.3. Lấy thông tin từ form III.3.1. Lấy thông tin từ form bằng các mảng superglobal III.3.2. Import thông tin của form vào các biến global III.3.3. Lấy thông tin của form bằng mảng do người dùng định nghĩa III.3.1. Lấy thông tin từ form bằng các mảng superglobal Dữ liệu từ form được submit lên server thông qua các phương thức: get, post Để lấy được thông tin từ form, bạn có thể sử dụng các mảng superglobal tương ứng $_POST[tên_control], $_GET[tên_control], $_REQUEST[tên_control] (REQUEST có thể sử dụng cho cả POST và GET) III.3.2. Import thông tin của form vào các biến global Để thuận tiện cho người lập trình, PHP cung cấp hàm import_request_variables() cho phép đưa các tham số GET, POST và COOKIE vào thành các biến global Cú pháp bool import_request_variables(string types, [string prefix]) types: Chỉ ra loại thông tin nào được import, có thể kết hợp giữa các giá trị g, p, c (get, post, cookie) prefix: tiền tố cho tên biến III.3.3. Lấy thông tin của form bằng mảng do người dùng định nghĩa Những cách lấy thông tin từ form đã nêu trên cho phép chúng ta làm việc tốt với các control đơn (có 1 giá trị) Đối với các control có nhiều giá trị như select hay checkbox, nảy sinh vấn đề là làm sao nhận được tất cả các control được lựa chọn Để giải quyết vấn đề này, đ