Transcript PHP cơ bản
Chương 2:
Ngôn ngữ kịch bản PHP
Trainer: Ngô Đình Thưởng
Faculty of Information Technology
05- Nov, 2010
Room: 302-A5
1
NỘI DUNG CHÍNH
12345-
PHP cơ bản
Mảng
Chuổi ký tự
$_POST[] và $_GET[]
Hàm
Các nội dung: Upload, Ajax, Cookie, Session,
OOP sẽ được trình bày ở chương 3
Tham khảo:
www.w3schools.com
www.qhonline.info
-Các bài giảng sẽ upload lên mạng trước ngày học lý thuyết, để
tránh sinh viên đọc trước. Hãy đặt câu hỏi cho NDTFIT!
-Các link chỉ hoạt động trên máy của NDTFIT, khi Copy, Paste từ
sclide vào NetBeans chú ý hiệu chỉnh lại dấu nháy kép!
2
I- PHP cơ bản
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.3.3
Ư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ên gọi ban đầu :'Personal Home Page Tools’
Xem : http://en.wikipedia.org/wiki/PHP
3
I.2. Biến, hằng, kiểu dữ liệu
a- Kiểu dữ liệu:
Integer, Double, Boolean, String, Array và Object
b. Khai báo biến:
$tên_biến = giá_trị;
$tên_mảng = array();
$tên_object= new tên_lớp();
c. 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;
?>
4
I.3. Các phép toán
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
5
I.4. Các câu lệnh điều khiển
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 */}
6
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
7
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.
8
II- Mảng một chiều
1. Khai báo :
$n=100;
$arr1 = array($n);
$arr2 = array(giá_trị_1, giá_trị_2, .., giá_trị_n);
$arr3 = (); // mảng động
$arr4 = arrr(hoten=>“Hồ Tú”, quequan=>“Điện Bàn”,
tuoi=>20;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
9
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
$arr = array(10);
for($i=0; $i<10; $i++) $arr[$i] = rand(0,100);
for($i=0; $i<10; $i++) echo ($i+1).”-”.$arr[$i].”<br>”;
?>
Trên đây là phương pháp thông dụng để duyệt mảng. Các slide
sau sẽ trình bày các nét đặc sắc của PHP khi làm việc trên
mảng.
10
-Sử dụng foreach
foreach($arr as $key=>$value){
echo $key .“,”;
echo $value.”<br>”;
}
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)
------------------------------------------------------------------------------------------------------------------------
Trong slide sau sẽ trình bày cách duyệt mảng bằng while phối hợp
với :
Hàm each($arr)
Hàm list($key,$value)
11
-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”]. “<br>”;
}
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. “<br>”;
}
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
12
3- Các hàm về mảng
-Hàm count(), sizeof() : trả về kích thước của mảng
-Các hàm “di chuyển” trong 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
-Các hàm sắp xếp mảng :
+ sort() : sắp xếp mảng theo value của phần tử
+ ksort():sắp xếp mảng theo key của phần tử
- Kiểm tra một biến có phải là mảng : is_array() trả về 1
(true) và 0 (false)
13
-Dùng hàm each()
<?php
$arr=array(10);
for($i=1;$i<=10;$i++) $arr[$i]=rand(0,100);
while($item=each($arr)) echo $item['value']."<br>“;
?>
Dùng hàm list()
<?php
$arr=array(10);
for($i=1;$i<=10;$i++) $arr[$i]=rand(0,100);
while(list($k,$v)=each($arr)) echo $v."<br>";
?>
14
2- Duyệt mảng kết hợp
<?php
$arr=(hai=>”Học”,ba=>“Thực
hành”,tu=>“Picnic”,bay=>“Đìu hiu trên gác
trọ”,chunhat=>”Tôi với tôi một mình”);
while(list($index,$value)=each($arr))
echo $index." - ".$value."<br>";
?>
Đây là kỹ thuật tạo menu trong PHP
Demo
15
3- Sử dụng hàm ksort(): ai là bạn của ai?
In ra theo thứ tự tên sinh viên (là $key)
<?php
$arr=array(Lien=>"Vu Hong",Tu=>"Nguyet Hang",Hung=>"Ha
Giang",An=>"Bich Ngoc");
ksort($arr);
echo "Student - His frient<br>";
while(list($person,$frient)=each($arr))
echo $person."-".$frient."<br>";
?>
Demo
Dữ liệu kiểu mảng là một nét đặc sắc trong các NNLT, slide sau sẽ
nghiên cứu mảng động.
16
4- Mảng động : Cho mảng gồm 10 số tự nhiên,tạo một mảng con
chứa những số lẻ của mảng này, In ra mảng con này.
<?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)."<br />";
// In ra mảng con gồm các số lẻ từ mảng $arr
for($i=0;$i<count($child);$i++) $child[$i]."<br />"
?>
Demo
Chú ý vấn đề thừa/thiếu 1 trong các vòng lặp!
17
III- Chuổi ký tự
1- Khai báo biến
$str =“Chiều nội trú buồn”;
2- Các hàm về kiểu chuổi ký tự:
- chop(), trim(), ltrim() ~ rtrim, trim,ltrim trong Visual Basic 6.0
- nl2br(): định dạng HTML, biến ký tự \n thành “<br>”
- 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
- 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.
18
Ví dụ:
<?php
$str="Vũ Huy Hùng,Hồ Ngọc Tú,Võ Thị Hà Giang,Võ Tòng";
$arr=array();
$arr=explode(",",$str);
echo "<h2>Danh sách những ông tướng 07SPT:</h2>";
foreach($arr as $key=>$value) echo ($key+1)."-".$value."<br />";
?>
Demo
19
$_POST[],$_GET[] và $_REQUEST[]
Đâ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
<form action=receive.php method=POST>
<input type=text name=“hoten”>
<- - các phần tử khác - ->
</form>
Receive.php
<?php
hten=$_POST[‘hoten’];
echo hten;
?>
20
Trường hợp đặc biệt: nhận dữ liệu gởi từ các checkbox cùng tên:
Goi.html
<form action=Nhan.php method=post>
<input type=checkbox name=box[] value=1>Một
<input type=checkbox name=box[] value=2>Hai
<input type=checkbox name=box[] value=3>Ba
<input type=submit name=“Sumit”>
</form>
Nhan.php
<?php
$val = $_POST[‘box’]; // $val là mảng các phần tử
foreach($val as $k=>$v) echo $v.”<br>”;
?>
21
2- Phương thức GET
Giả sử trang goi.html chứa đoạn mã:
<a href=“nhan.php?hoten=Hà Giang”>Đăng ký </a>
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
Demo
22
IV- HÀM CỦA NGƯỜI DÙNG ĐỊNH NGHĨA
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.
23
A- Hàm không có giá trị trả về:
<?php
$arr = array(hoten=>”Hà Giang”,diachi=>”Đà Nẵng”,tuoi=>15,phai=>“Nữ”);
function display($a){
echo “<table border=1>”;
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 “<tr><td>”.$value.”</td></tr>”;
$value=next($a); // phần tử kế tiếp của mảng a
}
echo “</table>”
}
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
24
<?php
$arr = array(hoten=>”Hà Giang”,diachi=>”Đà Nẵng”,tuoi=>15,phai=>“Nữ”);
function display($a){
echo “<table border=1>”;
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
$str=“”;
while($value){
$str.=“<tr><td>”.$value.”</td></tr>”;
$value=next($a); // phần tử kế tiếp của mảng $a
}
$str.= “</table>”;
echo $str;
}
display($arr);
?>
Đây là phương pháp yêu thích của nhiều lập trình viên ! Demo
25
B- Hàm có giá trị trả về
<?php
$arr=array(hoten=>"Hà Giang",diachi=>"Đà Nắng");
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?
26
Demo
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
- 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
function tên_hàm($x){
global $total; // bây giờ $total trở thành biến chung
// 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
}
27
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(), tuy
nhiên một số lập trình viên khuyên không lạm dụng, vì làm chậm thực
thi script
- 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 <html>...<body>
-menu.php : gồm các liên kết
-footer.php: gồm các thông tin về website và </body></html>
28
Header.inc
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
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!
</style>
<title>My Page</title>
</head><body> <H2> Ví dụ về include()</H2>
<? echo "<div>Hôm nay:" . date("d-m-Y")."</div><br>";?>
Footer.php
<?php
$copyright="<hr /><div class=ft>Copyright by NDTFIT,1995-".date("Y");
$copyright.="<br />Khoa Tin học, Trường Đại học Sư phạm</div>";
// năm hiện thời tự động cập nhật
echo $copyright;
?>
</body></html>
29
Menu.php
<?php
$strMenu.="<a href='#'>Trang chu</a><br />";
$strMenu.="<a href='#'>Array</a><br />";
$strMenu.="<a href='#'>String</a><br />";
$strMenu.="<a href='#'>Post, Get</a><br />";
$strMenu.="<a href='#'>Cookie, Session</a><br />";
echo $strMenu;
?>
Sinh viên đọc trên ndtfit.brinkster.net để nghiên cứu các dùng include
để tạo bố cục trang chủ. Mục Bài thực hành (Layout)
Demo
30
Thank you!
http://ndtfit.brinkster.net
31