Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin
Trang 1Bài tập PHP
Trang 3Lời giới thiệu
Sách bài tập do tập thể giáo viên AiTi-Aptech thiết kế và được sử dụng như một phần không thể tách rời khỏi giáo trình đang học của Aptech Ấn Độ với các học viên đang theo học tại Trung tâm.Tập sách bài tập này là tài liệu lưu hành nội bộ, chỉ dành cho các học viên theo học tại Trung tâm đào tạo Lập trình viên Quốc tế AiTi-Aptech Mọi hình thức sao chép lại nội dung của sách là vi phạm bản quyền và không tuân thủ Luật Sở hữu trí tuệ của Nhà nước Việt Nam
AiTi-Aptech luôn mong mỏi tạo dựng một môi trường học tập tốt cho các bạn học viên theo học tại trung tâm Mọi ý kiến đóng góp về xây dựng Sách bài tập, cải tiến hệ thống xin gửi mail về
contact.aiti@gmail.com hoặc đường dây nóng (04) 6 64 8848 Chúng tôi sẽ ghi nhận và cải
tiến để có thể cung cấp cho các bạn một môi trường học tập ngày một tốt hơn
“Sự nghiệp tương lai của các bạn là thành công của chúng tôi”
Đội thiết kế Sách bài tập
Việt Nam luôn thiếu Lập trình viên đẳng cấp Quốc tế
Trang 4Nội dung
Ch ng 1 Gi i thi u PHPươ ớ ệ 3
A.Tóm t t lý thuy tắ ế 3
1 Đ nh nghĩaị 3
2.Cách s d ng ử ụ 3
B Bài t pậ 3
C.Tham kh oả 3
Ch ng 2 X lý Form trong PHPươ ử 3
A.Tóm t t lý thuy tắ ế 3
B Bài t pậ 3
C.Tham kh oả 4
Ch ng 3 S d ng bi n và bi u th c trong PHPươ ử ụ ế ể ứ 4
A.Tóm t t lý thuy tắ ế 4
B Bài t pậ 12
C.Tham kh oả 12
Ch ng 4 : Câu l nh đi u khi n và vòng l p trong PHPươ ệ ề ể ặ
12
A : Tóm t t lý thuy t ắ ế 12
B - Tham kh o ả 14
C - Bài t pậ 14
3- Dùng vòng l p gi i quy t bài toán : V a gà v a chó,bó l i cho tròn, 36 con, 100 chân ch n?ặ ả ế ừ ừ ạ ẵ 15
Ch ng 5 : S d ng hàm trong PHPươ ử ụ 15
A.Tóm t t lý thuy tắ ế 15
B.Tham kh oả 21
C.Bài t pậ 21
Ch ng 6 : Làm vi c v i m ng trong PHPươ ệ ớ ả
21
A.Tóm t t lý thuy tắ ế 21
B.Tham kh oả 24
C.Bài t pậ 25
Trang 5Ch ng 7 : Thao tác v i CSDLươ ớ 25
A.Bài t pậ
25
Ch ng 8 Cookie và Session trong PHPươ 27
A Bài t pậ 27
Ch ng 9 : Email và OOPươ 29
A.Bài t pậ 29
Chương 1 Giới thiệu PHP
A.Tóm tắt lý thuyết
1 Định nghĩa
PHP (viết tắt hồi quy "PHP: Hypertext Preprocessor") là một ngôn ngữ lập trình kịch bản hay một loại
mã lệnh chủ yếu được dùng để phát triển các ứng dụng viết cho máy chủ, mã nguồn mở, dùng cho mục đích tổng quát Nó rất thích hợp với web và có thể dễ dàng nhúng vào trang HTML Do được tối
ưu hóa cho các ứng dụng web, tốc độ nhanh, nhỏ gọn, cú pháp giống C và Java, dễ học và thời gian xây dựng sản phẩm tương đối ngắn hơn so với các ngôn ngữ khác nên PHP đã nhanh chóng trở thành một ngôn ngữ lập trình web phổ biến nhất thế giới
2.Cách sử dụng
Mã php được lồng vào mã HTML
1 <html>
2 <head>
3 <title>Mã mẫu</title>
4 </head>
5 <body>
6 <?php
7 echo "Chào thế giới PHP!";
8 ?>
9 </body>
10 </html>
Thẻ <?php và thẻ ?> sẽ đánh đấu sự bắt đầu và sự kết thúc của phần mã PHP qua đó máy chủ biết để
xử lý và dịch mã cho đúng Đây là một điểm khá tiện lợi của PHP giúp cho việc viết mã PHP trở nên khá trực quan và dễ dàng trong việc xây dựng phần giao diện ứng dụng HTTP
Trang 6Ngôn ngữ, các thư viện, tài liệu gốc của PHP được xây dựng bởi cộng đồng và có sự đóng góp không nhỏ của công ty Zend
B Bài tập
1.Cài đặt PHP và Apache web server bản mới nhất lên máy tính cá nhân
2 lưu file sau vào thư mục web của apache với tên vd1.php và chạy thử bằng trình duyệt:
<html><head><title>Testing page</title></head>
<body><?php echo "Hello, world!"; ?></body>
</html>
C.Tham khảo
1.Phpvietnam group http://groups.google.com/group/phpvietnam
2.Diễn đàn phpviet http://www. php vn.org
3.Chuẩn viết mã php http://pcdinh.googlepages.com/phpvietnamcodingstandards
Chương 2 Xử lý Form trong PHP
A.Tóm tắt lý thuyết
Dữ liệu của người dùng từ trình duyệt sẽ được gửi lên máy chủ dưới dạng từng cặp biến=giá_trị và
có thể đi theo 3 con đường khác nhau Tuỳ theo từng con đường cụ thể, trên máy chủ ta cũng có các cách khác nhau để lấy dữ liệu được gửi lên 3 con đường đó là: GET, POST và COOKIES
1 Truyền dữ liệu thông qua phương thức GET
Dữ liệu gửi từ trình duyệt lên qua phương thức GET là phần dữ liệu được nhập trực tiếp theo sau địa chỉ URL do trình duyệt gửi lên, được phân biệt với tên file script bằng dấu hỏi chấm (?) Ví dụ, khi ta gõ vào trình duyệt địa chỉ URL sau:
http://www.phpvn.org/topic.php?TOPIC_ID=161
Khi đó, trình duyệt sẽ gửi theo địa chỉ trên một cặp biến = giá trị, trong đó biến có tên là TOPIC_ID
Trang 7và giá trị là 161 (TOPIC_ID=161).
Chúng ta cũng có thể đưa lên nhiều cặp biết=giá_trị bằng cách phân cách chúng bởi dấu &:
http://www.phpvn.org/index.php?method=Reply&TOPIC_ID=161&FORUM_ID=20
Với địa chỉ URL trên, chúng ta sẽ gửi lên 3 cặp biến=giá_trị theo phương thức GET, đó là:
method=Reply, TOPIC_ID=161 và FORUM_ID=20
Khi trình duyệt gửi các thông tin này lên máy chủ, PHP sẽ tự động sinh ra một mảng có tên là
$HTTP_GET_VARS[] để nắm giữ tất cả các cặp biến và giá trị đó, trong đó, chỉ số của mảng chính
là một chuỗi mang tên của tên biến và giá trị của chỉ số đó chính là giá trị của biến do trình duyệt gửi lên Ví dụ, với địa chỉ URL sau:
http://www.phpvn.org/post.php?method=Reply&TOPIC_ID=161&FORUM_ID=20
Thì PHP sẽ tự động sinh ra một mảng $HTTP_GET_VARS có nội dung sau:
$HTTP_GET_VARS["method"] = "Reply" // tương ứng với cặp method=Reply
$HTTP_GET_VARS["TOPIC_ID"] = 161 // tương ứng với cặp TOPIC_ID=161
$HTTP_GET_VARS["FORUM_ID"] = 20 // tương ứng với cặp FORUM_ID=20
Sau đó, trong trang web của mình, các bạn có thể tha hồ sử dụng các biến này Ví dụ, tôi làm một đoạn chương trình sau để khi người dùng nhập vào biến user=sinh thì cho hiển thị "Hello, my Boss", còn nếu biến user khác sinh thì "Hello " + giá trị của biến:
Trang 8Hãy xem kết quả hiển thị trên màn hình, sau đó thay chữ sinh bằng một cái tên gì đó xem kết quả
ra sao
II Phương thức POST
Post là phần dữ liệu được gửi qua các form HTML có method ="POST" (xin xem lại bài về HTML)
Để lấy các biến theo kiểu POST, PHP sẽ tự động sinh ra mảng có tên là $HTTP_POST_VARS[] Mảng này có chỉ số chính là tên của các phần tử trong form (các thẻ input, select có thuộc tính name)
và giá trị là nội dung giá trị do người sử dụng nhập vào các phần tử có tên tương ứng Chẳng hạn với mẫu biểu HTML sau:
<input type="password" name="T2" size="20"></p>
<p>Sex: <Select name ="sex">
<option value =1>Male </option>
<option value =0>Female </option>
Sau khi lấy được các giá trị này rồi, các bạn có thể thoải mái sử dụng
Đây là ví dụ một chương trình giải phương trình bậc nhất (cho nó đơn giản )
<form method="POST">
<p style="margin-top: 0; margin-bottom: 0">
Nhập a:<input type="text" name="a" size="20"></p>
<p style="margin-top: 0; margin-bottom: 0">Nhập b:<input type="text" name="b" size="20"></p>
Trang 91.Viết chương trình cộng 2 số được nhập từ form
2.Viết trang login.php yêu cầu người dùng nhập username và password
Xác nhận username là admin và password là 123456 thì in ra dòng “Hello Admin”
Nếu sai thì yêu cầu đăng nhập lại
Trang 10• 2 kiểu dữ liệu tổ hợp: array, object
• 2 kiểu dữ liệu đặt biệc: resource, NULL
//phép toán == kiểm tra xem 2 biểu thức có giá trị bằng nhau hay không
$c = ( ==2 ; //vì 1 khác 2 nên $c mang giá trị FALSE
$d = ("abc" == "def"); //$d mang giá trị TRUE
• chuỗi rỗng "", hoặc chuỗi "0",
• mảng rỗng (không chứa phần tử nào) Array(),
• đối tượng không chứa phần tử nào (chỉ đúng với PHP4),
$c = 0123; //giá trị 123 ở hệ cơ số 8, tương đương với 83 ở hệ cơ số 10
$d = 0x1F; //giá trị 1F ở hệ cơ số 16, tương đương với 31 ở hệ cơ số 10
?>
Kiểu Float (Double)
Kiểu float (hoặc double) là kiểu số thực, có thể mang bất cứ giá trị số thực nào Trên hầu hết các hệ thống, kiểu số thực có kích thước 64 bit Ví dụ:
Trang 11$b = "Đây là 1 chuỗi được đặt giữa dấu nháy kép";
$c = 'Đây là 1 chuỗi được đặt giữa dấu nháy đơn với "vài dấu nháy kép ở giữa"';
$d = "Đây là 1 chuỗi được đặt giữa dấu nháy kép với 'vài dấu nháy đơn ở giữa'";
?>
Nếu bạn muốn sử dụng dấu nháy đơn ở trong 1 chuỗi được bọc bởi dấu nháy đơn, hoặc sử dụng dấu nháy kép đặt giữa chuỗi được bọc bởi dấu nháy kép thì bạn để thêm ký tự \ (gọi là ký tự escape) ở phía trước Ví dụ:
$c = "Dùng ký tự \\ ở giữa câu \\ thì sao?"; //$c mang giá trị: Dùng ký tự \ ở
giữa câu \ thì sao?
?>
Khi sử dụng dấu nháy đôi để bọc chuỗi, ngoài \', \" và \\, PHP có thể nhận dạng thêm một số chuỗi ký tự
escape đặt biệc nữa:
• \n: ký tự xuống hàng LF (ký tự có mã 10 trong bảng mã ASCII)
• \r: ký tự về đầu dòng CR (ký tự có mã 13 trong bảng mã ASCII)
• \t: ký tự tab (ký tự có mã 9 trong bảng mã ASCII)
• \$: ký tự $
• \ooo: (với o là 1 chữ số từ 0 đến 7) biểu thị 1 ký tự có mã ASCII ooo trong hệ cơ số 8.
Ví dụ \101 sẽ là ký tự 'A' (101 trong hệ cơ số 8 tương đương 65 trong hệ cơ số 10, ký tự ASCII
có mã 65 chính là ký tự 'A')
• \xhh: (với h là 1 chữ số từ 0 đến 9 hoặc 1 chữ cái từ A tời F) biểu thị 1 ký tự có mã ASCII hh
trong hệ cơ số 16.
Ví dụ \0x41 sẽ là ký tự 'A' (41 trong hệ cơ số 16 chính là 65 trong hệ cơ số 10)
Ngoài ra, nếu bạn để 1 biến vào giữa 1 chuỗi được bọc với dấu nháy kép, giá trị của biến sẽ được thay thế vào trong chuỗi ví dụ:
Các phần tử trong mảng $a được tạo ở trên sẽ được đánh số thứ tự từ 0, 1 cho đến 2
Để truy cập tới từng phần tử của $a
echo $a[ ]; //in ra giá trị 1
echo $a[ ]; //in ra giá trị 3
$a[ ] = 5; //giờ đây $a = Array(1,5,3)
?>
Trang 12Mảng còn có thể được tạo thành bởi các cặp (khoá, giá trị) Ví dụ:
Kiểu resource (tài nguyên) được sử dụng bởi các hàm đặt biệc của PHP (ví dụ hàm mysql_connect sẽ trả
về kiểu resource) Ta sẽ tìm hiểu kỹ hơn về kiểu resource trong các bài viết khác.
Kiểu NULL
Đây là 1 giá trị đặt biệc, báo cho PHP biết rằng 1 biến nào đó chưa/không mang giá trị nào cả Ví dụ:
<?php
$a = 1; //$a mang giá trị 1
$a = NULL; //bây giờ $a không mang giá trị nào cả
$a = 2; //giờ đây $a mang giá trị 2
//hàm unset sẽ làm cho 1 biến có giá trị là NULL
unset($a); //giừo $a lại là NULL
?>
BIẾN
Có lẽ hơi muộn khi tới tận bây giờ ta mới tìm hiểu tới biến trong PHP Một biến trong PHP được bắt đầu bằng ký tự $ và đi theo ngay sau đó là tên của biến Ví dụ:
$a: biến có tên là a
$abc123: biến có tên là abc123
Tuy nhiên vẫn còn nhiều điều thú vị về biến đang chờ ta khám phá
Trang 13• Biến trong PHP phân biệt chữ hoa và chữ thường Tức $Abc và $abc là 2 biến hoàn toàn khác nhau
• Tên biến chỉ được bao gồm các ký tự chữ cái (a z hoặc A Z), chữ số (0 9) và ký tự gạch dưới (_); nhưng tên biến không được bắt đầu bằng ký tự gạch dưới hoặc chữ số Các tên biến sau là
không hợp lệ!
$_abc Không hợp lệ! bắt đầu bằng ký tự gạch dưới
$1abc Không hợp lệ! bắt đầu bằng chữ số
$nguyễn Không hợp lệ! tên biến có ký tự đặt biệc (ễ)
Tầm vực (scope) của biến
Tầm vực của biến là ngữ cảnh mà ở trong đó biến được định nghĩa Ví dụ:
<?php
$a = 1; //tầm vực của biến $a bắt đầu từ đây
include 'b.php'; trải dài tới bên trong file b.php
//tới cuối file vẫn còn hợp lệ
Ở ví dụ trên, câu lệnh echo $a sẽ không in ra giá trị nào hết vì câu lệnh này nằm bên trong hàm test nên
$a ở đây được hiểu là biến cục bộ $a của hàm (mà hàm này ta chưa khai báo biến cục bộ nào cả).
Để truy cập tới các biến toàn cục ở bên trong 1 hàm do người dùng định nghĩa, ta có thể dùng 1 trong 2 cách sau: Cách 1:
<?php
$a = 1; //biến toàn cục
//hàm do tự tạo
function test()
//từ khoá global báo cho php biết là bên trong hàm test
//bây giờ ta sẽ dùng biến toàn cục $a
Trang 15While( biểu thức điều kiện)
While( biểu thức điều kiện)
Khối lệnh được thực thi nếu biểu thức điều kiện trả về giá trị False
Trang 17STT Tên sản phẩm Số lượng Đơn giá Thành tiền
Trang 18+ Loại thứ 1: Là những Hàm đã được xây dựng sẵn trong PHP.
+ Loại thứ 2 : Là những hàm mà lập trình viên tự xây dựng Mục đích chính
là áp dụng các hàm đó cho công việc của mình Lập trình viên giỏi, nhiều kinh nghiêm, làm việc lâu năm là người tự trang bị cho mình rất nhiều những hàm tự xây dựng Những hàm này được đúc kết từ các kinh nghiệm làm việc của lập trình viên trong các Project
Hàm đã được xây dựng sẵn trong PHP Các hàm này có mấy loại chính như sau:
+ Mathematical Function
+ String Function
+ Date and Time Function
+ Error Handling Function
+ Database Function
+ Array Function
+ Mail Function
Bạn có thể tham khảo thông tin về các Hàm loại này trên trang web php.net
3- Hàm tạo bởi người dùng
a- Cú pháp định nghĩa hàm
Function ten_ham()
{
Khối lệnh của hàm
Trang 19b- Định nghĩa hàm với đối số
Function ten_ham(doi_so1, doi_so2, …)
Trang 20Đối số loại này cho phép bạn chỉ định một giá trị mặc định cho đối số của hàm Các giá trị mặc định của bạn phải là một giá trị không đổi.
VD :
Function mac_dinh(&$num, $increment = 1)
{
$num += $increment }
$num =4;
mac_dinh($num);
mac_dinh($num,3);
- Đối số theo giá trị
Đối số loại này có thể là bất kỳ biểu thức hợp lệ nào Giá trị của nó sẽ được gán cho biến ở trong hàm.
Việc chuyển theo tham chiếu bắt buộc đối số phải là một biến Thay vì giá trị của một biến được chuyển đi thì biến tương ứng trong hàm sẽ trực tiếp tham chiếu đến biến được chuyển bất cứ khi nào được sử dụng
Trang 21c- Giá trị trả lại của hàm
Trong này ta sử dụng câu lệnh return để cho ra giá trị từ hàm hay nói cách khác một bản sao của giá trị được tạo và được trả về nơi gọi hàm.
Trang 22cho đến khi đạt đến những bài toán cơ bản, dễ giải quyết Một phương thức đệ quy được chia làm 2 phần
+ Phần neo : Phần này được thực hiện khi công việc quá đơn giản , có thể trả lại kết quả trực tiếp chứ không cần 1 phương thức con nào cả.
+ Phần đệ quy : Trong trường hợp phương thức chưa thể giải bằng phần neo, cần xác định phương thức con và gọi đệ quy giải các phương thức con đó, khi đã có
kết quả trả về của những phương thức con thì phối hợp kết quả của chúng lại để trả lại kết quả của phương thức ban đầu
Các đặc điểm của phương thức đệ quy :
+ Số lần gọi các phương thức là chiều sâu của đệ quy
+ Phương thức đệ quy có thể dẫn tới tràn vùng nhớ stack
+ Mọi phương thức đệ quy phải có điều kiện kết thúc đệ quy
Trang 24Chương 6 : Làm việc với mảng trong PHP
A Tóm tắt lý thuyết
Mảng là kiểu dữ liệu chứa một tập các biến đã được đặt tên và có cùng kiểu Mỗi biến trong mảng gọi là một thành phần của mảng Để tham chiếu đến một thành phần của mảng phải sử dụng chỉ mục của thành phần đó.
2- Cú pháp tạo mảng sử dụng hàm array()
$array_name = array([key => ] value, [key => ] value)
key : khóa của mảng khóa có thể là số hoặc là chuỗi value : là giá trị của khóa tương ứng.
Ví dụ về khởi tạo mảng.
array(1,2,3) giống như array(0 => 1, 1 => 2 , 2 => 3)
array(1=>”ONE”, “TWO”, “THREE”) tương đương với
array(1=>”ONE”, 2=> “TWO”, 3=> “THREE”)
Với những mảng có khóa là chuỗi thì cần phải để khóa ở trong dấu ngoặc