Chương 4 Ngôn ngữ kịch bản PHP cơ bản

Lịch sử: PHP(Hypertext Preprocessor)là ngônngữ scrip ttrên server được thiết kế để dễ dàng xây dựng các trang Webđộng. Ngôn ngữ PHPra đời năm1994 RasmusLerdorf(1968, GreenLand)sau đó đượcphát triển bởi nhiều người trải qua nhiều phiên bản. Phiên bản đang phổ biến là PHP5.0 đã được công bố 7/2004. Phiên bản mới nhất là 5.5.12

pdf48 trang | Chia sẻ: lylyngoc | Lượt xem: 1458 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Chương 4 Ngôn ngữ kịch bản PHP cơ bản, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
NGÔN NGỮ KỊCH BẢN PHP CƠ BẢN Giảng viên : ThS. Nguyễn Minh Thành Email : thanhnm@itc.edu.vn Chương 4 : Môn Các Hệ Thống Mã Nguồn Mở 1 Nội Dung 1. Giới thiệu về PHP 2. Chuỗi kí tự 3. Dữ liệu Ngày 4. Mảng 5. Phương thức nhận dữ liệu POST & GET 6. Hàm Môn Các Hệ Thống Mã Nguồn Mở 2 Giới Thiệu về PHP Môn Các Hệ Thống Mã Nguồn Mở 3 I.1 Lịch sử : PHP (Hypertext Preprocessor) là ngôn ngữ script trên server được thiết kế để dễ dàng xây dựng các trang Web động. Ngôn ngữ PHP ra đời năm 1994 Rasmus Lerdorf (1968, GreenLand) sau đó được phát triển bởi nhiều người trải qua nhiều phiên bản. Phiên bản đang phổ biến là PHP 5.0 đã được công bố 7/2004.Phiên bản mới nhất là 5.5.12 Ưu điểm :Mã nguồn mở (open source code) - Miễn phí, download dễ dàng từ Internet. - Ngôn ngữ rất dễ học, dễ viết. - Mã nguồn không phải sửa lại nhiều khi viết chạy cho các hệ điều hành từ Windows, Linux, Unix - Tương thích với nhiều ứng dụng Server khác nhau như : Apache, IIS,… - Hỗ trợ nhiều hệ quản trị CSDL khác nhau Tên gọi ban đầu :'Personal Home Page Tools’ Xem : Tính năng của PHP • Tạo ra các trang web động • Tạo, mở, đọc, ghi, xóa và đóng các file trên Server • Nhận dữ liệu từ các biểu mẫu trên trang web • Gửi và nhận Cookies • Thêm xóa sửa dữ liệu trong Database • Ngăn chặn người dùng truy cập các trang trên website • Mã hóa dữ liệu Môn Các Hệ Thống Mã Nguồn Mở 4 Viết Script PHP • Script PHP có thể nhúng trược tiếp trong các thẻ HTML. • Được đặt trong cặp thẻ Môn Các Hệ Thống Mã Nguồn Mở 5 <?php echo “Chào bạn đến với PHP”; ?> Quá Trình Thông Dịch file PHP Môn Các Hệ Thống Mã Nguồn Mở 6 Ghi Chú Trong PHP • Thẻ ghi chú giúp cho trình thông dịch bỏ qua các lệnh đó không thực hiện. • Nên chèn các thẻ ghi chú sẽ giúp cho việc đọc và bảo trì code dễ dàng hơn. Môn Các Hệ Thống Mã Nguồn Mở 7 <?php // This is a single line comment # This is also a single line comment /* This is a multiple lines comment block that spans over more than one line */ ?> Phân biệt hoa thường ? • Trong PHP, các hàm, lớp, từ khóa (if, while,…) không phân biệt hoa thường • Nhưng các biến có phân biệt hoa thường Môn Các Hệ Thống Mã Nguồn Mở 8 <?php ECHO "Hello World!"; echo "Hello World!"; EcHo "Hello World!"; ?> <?php $color="red"; echo "My car is " . $color . ""; echo "My house is " . $COLOR . ""; echo "My boat is " . $coLOR . ""; ?> Hằng – Biến Môn Các Hệ Thống Mã Nguồn Mở 9 a. Khai báo biến: Biến là nới lưu trữ dữ liệu trong chương trình Cách khai báo: $tên_biến = giá_trị; Khai báo biến mảng : $tên_mảng = array(); Khai báo biến đối tượng : $tên_object= new tên_lớp(); b. Khai báo hằng : define(“tên_hằng”, giá_trị); Ví dụ : <?php define(“PI”,3.14); $r=4; echo “Diện tích hình tròn :’.$r*$r*PI; ?> Ví dụ <?php $x = 5; $y=6; $z=$x+$y; echo $z; ?> Luật đặt tên biến – hằng • Tên biến bắt đầu bởi dấu $, theo sau là tên biến • Tên biến phải bắt đầu bằng một kí tự hoặc dấu _ • Tên biến không được bắt đầu bằng số • Tên biến chỉ có thể chứa các kí tự, kí số và dấu _ • Tên biến phân biệt hoa thường Môn Các Hệ Thống Mã Nguồn Mở 10 Kiểu dữ liệu – Phạm Vi Biến Kiểu dữ liệu • PHP là một ngôn ngữ lỏng lẻo về kiểu dữ liệu • PHP sẽ tự động chuyển kiểu dữ liệu đúng cho biến tùy thuộc vào dữ liệu nó chứa. • Các kiểu dữ liệu chính : • Integer, Double, Boolean, String, Array và Object, NULL Phạm Vi Biến • Biến có thể được định nghĩa bất kì đâu trong script PHP • Phạm vị của biến là vùng mà biến được sử dụng • Có 3 mức phạm vi • Local • Global • Static Môn Các Hệ Thống Mã Nguồn Mở 11 Phạm vi Local và Global • Biến được định nghĩa bên ngoài các hàm có phạm vi Global, chỉ được sử dụng bên ngoài các hàm. • biến được định nghĩa bên trong một hàm có phạm vi Local. Môn Các Hệ Thống Mã Nguồn Mở 12 <?php $x=5; // global scope function myTest() { $y=10; // local scope echo "Test variables inside the function:"; echo "Variable x is: $x"; echo ""; echo "Variable y is: $y"; } myTest(); echo "Test variables outside the function:"; echo "Variable x is: $x"; echo ""; echo "Variable y is: $y"; ?> Từ khóa Global • Từ khóa Global được định nghĩa để truy cập biến global bên trong hàm. Môn Các Hệ Thống Mã Nguồn Mở 13 <?php $x=5; $y=10; function myTest() { global $x,$y; $y=$x+$y; } myTest(); echo $y; // outputs 15 ?> Mảng $GLOBALS • PHP cũng lưu trữ các biến Global trong một mảng gọi là $GLOBALS[index]. Index chính là tên biến. Môn Các Hệ Thống Mã Nguồn Mở 14 <?php $x=5; $y=10; function myTest() { $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; } myTest(); echo $y; // outputs 15 ?> Từ khóa static • Khi một hàm hoàn tất thì giá trị biến sẽ tự động mất. Tuy nhiên, thỉnh thoảng ta muốn giữ lại giá trị của nó cho lần sau, ta sử dụng từ khóa Static Môn Các Hệ Thống Mã Nguồn Mở 15 <?php function myTest() { static $x=0; echo $x; $x++; } myTest(); myTest(); myTest(); ?> Các thao tác trên biến Môn Các Hệ Thống Mã Nguồn Mở 16 Chuyển kiểu dữ liệu $newint = (int) $var1; $newfloat = (float) $var1; $newstring = (string) $var1; Xuất thông tin biến var_dump($myvariable); Kiểm tra nội dung biến isset($varname) empty($varname) is_int ($varname) is_array ($varname) is_float ($varname) is_null ($varname) is_numeric ($varname) is_string ($varname) Xuất dữ liệu echo $myvariable; print $myvariable; Các phép toán Môn Các Hệ Thống Mã Nguồn Mở 17 a. Phép gán : $biến = biểu_thức; b. Các phép toán số học : +,-,*,/,% c. Các phép toán so sánh : ==, !=, >=,,< d. Các phép toán kết hợp : ++,--,+=,-=,*=,/= e. Các phép toán logic : !, &&, || f. Toán tử tam phân : (điều_kiện ? giá_trị_1 : giá_trị_2) g. Phép ghép chuỗi : . (dấu chấm) h. Toán tử error : @, ngăn không cho thông báo lỗi. Ví dụ : $a=10; $b=0; $c=@$a/$b Một số ví dụ dữ liệu kiểu số • Ví dụ 1 : $var1 = “1”; $var2 = 2; $total = $var1 + $var2; • Ví dụ 2 : $var1 = “x”; $var2 = 2; $total = $var1 + $var2; • Ví dụ 3 $var1 = “2,000”; $var2 = 2; $total = $var1 + $var2; Môn Các Hệ Thống Mã Nguồn Mở 18 Các hàm trên dữ liệu số • Sqrt : căn bậc 2 • Ceil : làm tròn lên • Floor : làm tròn xuống • Number_format : định dạng số Môn Các Hệ Thống Mã Nguồn Mở 19 <? $x=12345678.456789; echo $x.""; echo number_format($x).""; echo number_format($x,2).""; echo number_format($x,2,",",".").""; ?> kết quả: 12345678.4568 12,345,678 12,345,678.46 12.345.678,46 • pow : lũy thừa • rand : tạo số ngẫu nhiên • round : làm tròn • Max, min : lấy giá trị lớn, nhỏ • Abs : trị tuyệt đối Các câu lệnh điều khiển Môn Các Hệ Thống Mã Nguồn Mở 20 a- Câu lệnh if. Các cú pháp thông dụng: - if(điều_kiện) { /* nhóm lệnh */} - if(điều_kiện) { /* nhóm lệnh1 */} else { /* nhóm lệnh2 */} - if(điều_kiện) { ….. } elseif(điều_kiện_1) {….} elseif(điều_kiện_2) {….} ………. elseif(điều_kiện_n) {….} else {/* nhóm lệnh cuối cùng */} Các câu lệnh điều khiển (tt) Môn Các Hệ Thống Mã Nguồn Mở 21 b. Câu lệnh switch Cú pháp : switch($biến){ case giá_trị_1: nhóm lệnh 1 ; break; case giá_trị_2: nhóm lệnh 2 ; break; … case giá_trị_n: nhóm lệnh n ; break; default : nhóm_lệnh_n+1; } Lưu ý : giá trị của $biến phải là đếm được, rời rạc Các câu lệnh điều khiển (tt) Môn Các Hệ Thống Mã Nguồn Mở 22 Trong PHP có 4 câu lệnh lặp, trong đó foreach có cách sử dụng đặc sắc so với các NNLT khác. Muốn thoát khỏi vòng lặp : sử dụng lệnh exit c- Câu lệnh while : Cú pháp : while(điều_kiện_lặp) { /* nhóm lệnh */} d- Câu lệnh do … while : Cú pháp : do { /* nhóm lệnh */} while(điều_kiện_lặp) e- Câu lệnh for(;;) : Cú pháp : for(khởi_tạo; điều_kiện_lặp; tăng_giảm) { /* nhóm lệnh */} f- Câu lệnh foreach : duyệt qua tất các các phần tử của một mảng, nhất là mảng kết hợp. Chuỗi Kí Tự Môn Các Hệ Thống Mã Nguồn Mở 23 1- Khai báo biến $str =“Trường cao đẳng CNTT TpHCM”; Phân biệt ngoặc đơn và kép : - Chuỗi sử dụng ngoặc đơn được lưu trữ như một chuỗi bình thường. - Chuỗi sử dụng ngoặc kép được lượng giá các biến và kí tự đặc biệt trong chuỗi trước khi lưu trữ. $number = 10; $string1 = “There are ‘$number’ people in line.”; $string2 = ‘There are “$number” people waiting.’; echo $string1,”\n”; echo $string2; Chuỗi Kí Tự Môn Các Hệ Thống Mã Nguồn Mở 24 2- Các hàm về kiểu chuổi ký tự: - chop(), trim(), ltrim() - nl2br(): định dạng HTML, biến ký tự \n thành “” - addslashes() : để biến một chuổi có thể lưu trữ trong CSDL, ví dụ: dấu “ -> \” - substr($str,$pos,$len) : tách một chuổi con từ một chuổi - strpos($str,$sub) : vị trí chuổi $sub trong chuổi $str - str_replace($rep,$with,$str) : thay $rep bằng $with trong $str - explode($separator,$str) : tách chuổi $str thành các chuổi con dựa trên dấu phân cách $separator và lưu kết quả vào mảng, ~ phương thức split của JavaScript. Ngược lại là hàm implode hay join. - str_repeat(“str”,n) : lặp lại str n lần - str_chr(“str”,”chr”) : trả về 1 chuỗi bắt đầu từ kí tự chr trong str. - stristr(“str”,”chr”) : giống str_chr nhưng không phân biệt hoa thường - strlen(“str”) : chiều dài chuỗi str - strrev(“str”) : đảo ngược chuỗi str Chuỗi Kí Tự (tt) Môn Các Hệ Thống Mã Nguồn Mở 25 Ví dụ: Chuẩn hóa một chuổi văn bản(dạng đơn giản) : không có ký tự trống ở hai đầu, giữa 2 từ chỉ có duy nhất một ký tự trống. <?php $str=“ Thầy Nguyễn Minh Thành “; echo “Độ dài chuổi ban đầu “.strlen($str); function normalize($st){ $str=trim($str); // cắt các ký tự trống ở hai đầu $twoSpace=" "; $oneSpace=" "; while(strpos($st,$twoSpace)>0) {$st=str_replace($twoSpace,$oneSpace,$st);} return $st;} echo ““Độ dài sau khi chuẩn hóa “.strlen(normalize($str)); ?> Chuỗi Kí Tự (tt) Môn Các Hệ Thống Mã Nguồn Mở 26 <?php $str=“Nguyễn Minh Thành,Hồ Ngọc Tú,Võ Thị Hà Giang,Võ Tòng"; $arr=array(); $arr=explode(",",$str); echo "Danh sách giáo viên:"; foreach($arr as $key=>$value) echo ($key+1)."-".$value.""; ?> Dữ Liệu Ngày – Giờ Môn Các Hệ Thống Mã Nguồn Mở 27 • ĐỊnh dạng ngày $mydate = date(“format”,$timestamp); • Lấy ngày hệ thống $today = date(“Y/m/d”); • Lấy giờ hệ thống $today = time(); hoặc $today = strtotime(“today”); • Tạo một ngày chỉ định $importantDate = mktime(h,m,s,mo,d,y); • Ví dụ : $importantDate = mktime(0,0,0,1,15,2003); Hoặc $importantDate = strtotime(“January 15 2003”); Dữ Liệu Ngày – Giờ Môn Các Hệ Thống Mã Nguồn Mở 28 Mảng Một Chiều Môn Các Hệ Thống Mã Nguồn Mở 29 1. Khai báo : $n=100; $arr1 = array($n); $arr2 = array(giá_trị_1, giá_trị_2, .., giá_trị_n); $arr3 = range(100,900);// range(“z”, “a”); $arr4 = arrr(hoten=>“Minh Thành”, quequan=>“HCM”, tuoi=>27;IQ=“Rất cao”); // mảng kết hợp Câu lệnh lặp foreach rất hiệu quả khi duyệt mảng kết hợp Mảng Một Chiều (tt) Môn Các Hệ Thống Mã Nguồn Mở 30 2- Sử dụng -Truy cập một phần tử mảng : $arr[$key] $key có ý nghĩa rộng hơn Index, dùng tham chiếu đến một phần tử của mảng. Ví dụ 1: Tạo mảng gồm 10 phần tử là các số nguyên lấy ngẫu nhiên trong [0,100]. Khởi tạo $key là 0. <?php // tạo mảng $arr = array(10); //nhập mảng for($i=0; $i<10; $i++) $arr[$i] = rand(0,100); //xuất mảng for($i=0; $i”; ?> Mảng Một Chiều (tt) Môn Các Hệ Thống Mã Nguồn Mở 31 -Sử dụng foreach foreach($arr as $key=>$value){ echo $key .“,”; echo $value.””; } Có thể thay thế key và value bằng tên khác, chẳng hạn $k=>$v, miễn rẳng đảm bảo khai báo : $chỉ_số=>$giá_trị (của phần tử mảng) Mảng Một Chiều (tt) Môn Các Hệ Thống Mã Nguồn Mở 32 -Truy cập một phần tử mảng : sử dụng hàm each() while($item=each($arr)){ echo $item[“key”] .”,”; echo $item[“value”]. “”; } Hàm each() trả về phần tử kế tiếp của mảng. ~ hàm next() - Truy cập một phần tử mảng : sử dụng hàm list() while(list($k,$v)=each($arr)){ echo $k .”,”; echo $v. “”; } Hàm list($k,$v) tách cặp giá trị (key, value) của phần tử có “chỉ số” là $key ra hai biến $k và $v Các Hàm Về Mảng Môn Các Hệ Thống Mã Nguồn Mở 33 -Hàm count(), sizeof() : trả về kích thước của mảng + current()/end() : trả về phần tử đầu tiên/ cuối cùng của mảng + prev() / next() : trả về phần tử liền trước / kế kiếp + sort() , asort(), rsort(), arsort(): sắp xếp mảng theo value của phần tử + ksort(), krsort() :sắp xếp mảng theo key của phần tử - is_array() kiểm tra mảng - Print_r() hoặc var_dump(): xem nội dung mảng - Unset($arr[$key]) : xóa phần tử $key khỏi mảng - array_slice($arrayname,n1,n2) : ngắt mảng - array_merge($array1,$array2,...); : trộn mảng - array_sum($array) : tính tổng - array_unique($names) : loại trùng - array_flip($testarray) : hoán đổi key và value Môn Các Hệ Thống Mã Nguồn Mở 34 Mảng động : kiểu dữ liệu mảng trong PHP là mảng động, tức là ta có thể thêm dữ liệu vượt quá phạm vi ban đầu, mảng sẽ tự tăng số phần tử lên. Để gán phần tử tiếp theo cho mảng : $a[] = giá trị; <?php $arr=array(2,4,9,2,3,5,8,1); $child=array(); // sử dụng mảng động while(list($k,$v)=each($arr)) if($v%2!=0) $child[]=$v; echo "So phan tu cua mang con ".count($child).""; // In ra mảng con gồm các số lẻ từ mảng $arr for($i=0;$i" ?> Các Mảng Xây Dựng Sẵn Môn Các Hệ Thống Mã Nguồn Mở 35 Các Mảng Xây Dựng Sẵn Môn Các Hệ Thống Mã Nguồn Mở 36 Ví dụ : xuất các thành phần trong mảng $_SERVER foreach($_SERVER as $key =>$value) { echo “Key=$key, Value=$value\n”; } Hàm Môn Các Hệ Thống Mã Nguồn Mở 37 1- Cú pháp: function tên_hàm([các_tham_số]) { // Khai báo biến riêng // Câu lệnh PHP [ return giá_trị; ] } [các_tham_số] : các tham số là tùy chọn 2- Sử dụng hàm -Hàm không có giá trị trả về : tên_hàm([các_tham_số]); -Hàm có giá trị trả về : tham gia vào các biểu thức, gán giá trị cho biến. Hàm (tt) Môn Các Hệ Thống Mã Nguồn Mở 38 A- Hàm không có giá trị trả về: <?php $arr = array(hoten=>”Minh Thành”,diachi=>”HCM”,tuoi=>27,phai=>“Nam”); function display($a){ echo “”; reset($a); // trỏ về phần tử đầu tiên của mảng $a; $value=current($a); // phần tử hiện thời của mảng $a while($value){ echo “”.$value.””; $value=next($a); // phần tử kế tiếp của mảng a } echo “” } display($arr); ?> Đây là một hàm không trả về giá trị. Hàm display in ra các giá trị của mảng Hàm (tt) Môn Các Hệ Thống Mã Nguồn Mở 39 B- Hàm có giá trị trả về <?php $arr=array(hoten=>“Minh Thành",diachi=>“HCM"); function is_hoten($mang){ // trả về value của phần tử có key là hoten while(list($k,$v)=each($mang)){ if($k=="hoten") {return $v;exit;} } } echo is_hoten($arr); ?> Lưu ý : có cần exit khỏi vòng lặp không? Môn Các Hệ Thống Mã Nguồn Mở 40 3- Tầm vực của biến trong trang PHP - Biến chung : được khai báo ngoài phạm vi các hàm, hoặc global ... - Biến riêng: khai báo bên trong hàm (nếu không có global) - Biến $_SESSION : có giá trị toàn cục, cho mọi trang trong phiên. PHP xây dựng sẵn một số biến toàn cục với tên quy ước $_TÊN (in hoa) function tên_hàm($x){ global $total; $total=giá_trị; static $index; $index=giá_trị; // các lệnh PHP } 4- Tham trị và tham biến -Hàm trên được gọi với tham trị -Hàm sau đây sẽ được gọi với tham biến : function tên_hàm(&$y){ // các lệnh PHP } Phương Thức Truyền Dữ Liệu Môn Các Hệ Thống Mã Nguồn Mở 41 Đây là những biến toàn cục nhận các giá trị gởi từ client đến server bằng phương thứ Post hay Get. 1- Phương thức POST Receive.php <?php hten=$_POST[‘hoten’]; echo hten; ?> Phương Thức Truyền Dữ Liệu (tt) Môn Các Hệ Thống Mã Nguồn Mở 42 Trường hợp đặc biệt: nhận dữ liệu gởi từ các checkbox cùng tên: Goi.html Một Hai Ba Nhan.php <?php $val = $_POST[‘box’]; // $val là mảng các phần tử foreach($val as $k=>$v) echo $v.””; ?> Phương Thức Truyền Dữ Liệu (tt) Môn Các Hệ Thống Mã Nguồn Mở 43 2- Phương thức GET Giả sử trang goi.html chứa đoạn mã: Đăng ký Ta gọi: gởi dữ liệu đến trang nhan.php theo phương thức GET, các biến khác được ghép bởi ký hiệu & Nhan.php <?php $hten=$_GET[‘hoten’]; echo $hoten; ?> Chú ý: hoten=Hà Giang, không đóng dấu nháy kép! $_REQUEST : là biến toàn cục thay thế cho $_POST và $_GET Môn Các Hệ Thống Mã Nguồn Mở 44 V- Sử dụng lại mã PHP -Sử dụng hàm include(), require() để chèn tệp tin PHP, HTML vào một trang PHP khác. Ngoài ra còn có: include_once(), require_once(), - Phân biệt include() và require() include(“tên_tệp”) : nếu tên_tệp không tồn tại thì PHP thông báo lỗi và vẫn tiếp tục thực thi script còn lại. require(“tên_tệp”) : nếu tên_tệp không tồn tại thì PHP dừng thực thi script. -Sử dụng include(), require() là một cách tái sử dụng đoạn mã đã viết. Ví dụ :Trang Index.php bao gồm 3 khối: -header.inc : gồm các khai báo ... -menu.php : gồm các liên kết -footer.php: gồm các thông tin về website và Môn Các Hệ Thống Mã Nguồn Mở 45 V- Sử dụng lại mã PHP Trang Index.php <?php include(“header.inc”); include(“menu.php”); include(“footer.php”); ?> Môn Các Hệ Thống Mã Nguồn Mở 46 V- Sử dụng lại mã PHP Header.inc body{margin:10 10 10 60; font: normal 18pt Arial; color:navy} // khai báo để DEMO hiển thị rõ ràng khi trình bày trên LCD Projector! My Page Ví dụ về include() Hôm nay:" . date("d-m-Y")."";?> Footer.php <?php $copyright="Copyright by NDTFIT,1995-".date("Y"); $copyright.="Khoa Tin học, Trường Đại học Sư phạm"; // năm hiện thời tự động cập nhật echo $copyright; ?> Môn Các Hệ Thống Mã Nguồn Mở 47 V- Sử dụng lại mã PHP Menu.php <?php $strMenu.="Trang chu"; $strMenu.="Array"; $strMenu.="String"; $strMenu.="Post, Get"; $strMenu.="Cookie, Session"; echo $strMenu; ?> Hỏi Đáp ? Môn Các Hệ Thống Mã Nguồn Mở 48