1. Trang chủ
  2. » Giáo án - Bài giảng

Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2

297 1,5K 8
Tài liệu được quét OCR, nội dung có thể không chính xác

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 297
Dung lượng 9,08 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Thiết lập kết nối cơ sở đữ liệu Để kết nối cơ sở dữ liệu MySQL trong PHP, ban khai báo doan ma username 14 tai khoản của người sử dụng trong cơ sở dữ liệu My§QL, trong trường hợp này t

Trang 1

Pham HÍữŒu Khang (Chu bién)

Phương Lan (Hiéu dinh)

Trang 2

PHẠM HỮU KHANG (Chủ biên) Ea) PHUONG LAN (Hiệu đính)

_ Lap trinh web bang php 5.3 Ry

Trang 3

GIỚI THIỆU sim"?

GIỚI THIỆU

Tiếp theo tập 1, tập 2 của cuốn sách “Lập trình Web bằng PHP 5.38

và cơ sử dữ liệu MyS§QL 5.1” bao gồm 10 chương và ứng dụng đính kèm

lần lượt giới thiệu cùng bạn đọc các kiến thức liên quan đến Session,

Cookie, giỏ hàng trực tuyến, tìm kiếm và phân trang dữ liệu, lập trình

hướng đối tượng va sit dung Zend Framework

` Chương 8 trình bày kiến thức cơ bản của kính bản trình chủ PHP

và cơ sở đữ liệu MySQL

Sang chương 9, bạn tiếp tục tìm hiểu cách thiết kế trang Web cho phép người sử dụng tìm kiếm và phân trang dữ liệu trình bày với nhiều

hình thức khác nhau

Để xây dựng ứng dụng thương mại điện tử hoàn chỉnh và mang

tính chuyên nghiệp cao, bạn tiếp tục tìm hiểu cách sử dụng hàm Session

va Cookie trong chương 10 để lưu trữ thông tin của người sử dụng nhằm vào mục đích quản lý tài nguyên của Website

Mọi ứng dụng thương mại điện tử đều cung cấp chương giỏ hàng

trực tuyến, bạn cũng được tìm hiếu cách xây dựng giỏ hàng bằng cách sử

dụng Session lẫn Cookie trong chương 11

Khi có nhu cầu trình bày hình ảnh, đồ thi va 4m thant lẫn phim ảnh, bạn tìm hiểu cách sử dụng mã PHP trong chương 12

Tiếp theo, bạn có thể tìm hiểu cú pháp của kịch bản PHP trong chương 13 và học cách lập trình hướng đối tượng và sử dụng lớp này vào ứng dụng trong chương 14

Chương 15 giúp bạn sử dụng kịch bản trình khách Java Script dé

thay đổi góc nhìn và ứng xử của thẻ HTML trong trang Web

Sang chương 16, bạn khám phá thư viện mã nguồn mở Zend viết

bằng PHP dùng cho các loại cơ sở đữ liệu và học cách sử dụng các lớp trong thư viện này vào ứng dụng bán hàng trực tuyến trong chương 17.

Trang 4

4 GIỚI THIỆU

HƯỚNG DẪN SỬ DỤNG ỨNG DỤNG KÈM THEO SÁCH

Để sử dụng ứng dụng đính kèm theo sách (bạn download trên website www.minhkhai.com.vn), trước tiên bạn chép danh sách thư mục

(sau khi giải nén) vào ổ đĩa cứng

Sau đó, thao tác từng bước để sử dụng ứng dụng đính kèm theo

sách

Tạo cơ sở dữ liệu MySQL:

* Import phat bidu SQL tit tap tin MarketoHome.sql

Lap trinh PHP:

® Chép thư mục Chapter08 đến Chapter17 vào thư mục

C:\WampServer\www\

* Triéu gọi ứng dụng từ chương 8 đến 17 với địa chỉ

http:/localhost/Chapter08/ hoặc http:/IPAddress/ Chapter08/ Lập trình PHP và Zend Framework:

& Tải ZendFramework-1.9.6 từ địa chỉ

http://framework.zend.com/download/current/

* Chép thu muc Zend vao thu muc Chapterl6 va Chapterl7 ting với chương 16 và chương 17.

Trang 5

THƯ NGỎ 5 Al’

THU NGO

Kính thưa quỹ Bạn đọc gần xa!

Trước hết, Ban xuất bản xin bày tỏ lòng biết ơn và niềm vinh hạnh

được đông đảo Bạn đọc nhiệt tình ủng hộ tủ sách ME.PUB

Trong thời gian qua chúng tôi rất vui và cảm ơn các Bạn đã gửi e-mail đóng góp nhiều ý kiến quý báu cho tủ sách

Mục tiêu và phương châm phục vụ của chúng tôi là:

e© _ Lao động khoa học nghiêm túc

e Chất lượng và ngày càng chất lượng hơn

e Tất cả vì Bạn đọc

Một lân nữa, Ban xuất bản MK.PUB xin kính mời quý Ban doc

tiếp tục tham gia cùng chúng tôi để nâng cao chất lượng sách Cụ thể:

Trong quá trình sử dụng sách, nếu quý Bạn phát hiện thấy bất kỳ sai sót nào về phần nội dung (đởù nhở) thì hãy gửi thắc mắc của Bạn đến

địa chỉ:

Nhà sách Minh Khai

249 Nguyễn Thị Minh Khai, Q.1, Tp Hô Chí Minh

E-mail: mk.book@minhkhai.com.un hoac mk.pub@minhkhat.com.vun

Chúng tôi sẽ gửi tặng Bạn một cuốn sách trong Tủ sách ME.PUB Bạn có thể chọn cuốn sách này theo danh mục thích hợp sẽ gửi đến Bạn

Với mục đích ngày càng nâng cao chất lượng tủ sách MK.PUB,

chúng tôi rất mong nhận được sự hợp tác nhiệt tình của quý Bạn đọc gần

xa

“MK.PUB cùng Bạn đọc đồng hành” để nâng cao chất lượng sách Một lần nữa chúng tôi xin chân thành cảm ơn

MK.PUB

Trang 6

1.8 Truy uấn cơ sở dữ liệu

2 Liệt kê mẩu tin - - 5S sen HH2 re 2.1 Số lượng mếu tin

3 Thêm thông tin vào cơ sở đữ liệu -ccnhhhhhhrrrrre 28

4 Cập nhật dữ liệu - ác cnchnnhhhhthhhhrheHgờ it 33

5 Xóa mẩu tin

6 Kết nối cơ sở dữ liệu khác

6.1 PHP uò cơ sở đữ liệu ÔrdcÏ© cà Sen Hư hit 6.2 PHP va co sở dữ liệu PostgreSQL -.Ăcằằằiehhereriieeee 6.3 PHP va co sé dữ liệu MS SQL SerUeT ceŸeeehhhehhee

Lão

Chương 9: TÌM KIẾM VÀ PHÂN TRANG DỮ LIỆU

1 Chức năng tìm kiếm dit HOU ccc eee teeter renee renteeteneenereeenenes

LL Tim Ri@rn nan ae e

I8 nn anh ee

I8, 827018 8 nh 1.4 Kết quả tìm EiẾm ccccrenhhhhhhrhrrrrrrrerrrrrrerrterrereir

2 Liệt kê danh sách mẩu tin theo nhóm . -c+eserrrrrererre

3 Điều hướng và phân trang đữ liệu . -cscenerrrerrrrre 3.1 Tham số tìm kiếm uà phân trang trên chuỗi Query Strừng 63 3.2 Trang tìm kiếm uới phương thúc POST : 08

4 Kết chương nà cành 2112712717 72

Chuong 10: SESSION VA COOKIE 73

1 Khái niệm phiên làm việc

b: 18 8n

Trang 7

8 Mục lục

3.1 Chu kỳ sống của ®ŠeSSỈOH, LH HH se

2.2 Khơi báo khởi tạo SeSSiOH HH HH HH HH ng re

2.3 Khai báo lấy giá trị từ SesSiOi c.c

2.4 Khai bdo cập nhột giá trị của Session

2.6 Khai 660 x60 Session .cccccccecccsssssesssescesssessetenecsaceusseusestecsssensseces

2.6 Nhận dạng duy nhất của Session

2.7 Ứng dụng của biến Session .ccceccescessssssssssssesssessesssssecsecsessssessessees

3 Làm việc với biến Coolkie ác nn TH TH TH TH TH Ty nghe cay 3.1 Tạo CooRie

3.2 Léy gid tri ctia Cookie

bb‹( 9 a

4 Kết chương

Chương 11: GIỎ HÀNG VÀ ĐẶT HÀNG QUA MẠNG 91

1 Khái niệm về giỏ hàng trên mang ccc sscscsccecescecsesescecseseeseceseess 91

2 Xây dung gid hang cece ccc secssessscecsevecesceesscttscsacsecsevsvsecaceusassnene 92

2.1 Tạo uà thêm mới sản phẩm uào giỏ hàng cccccec.c.oce 95

2.2 Cập nhật hay thêm mới giỏ hùng à các nrecereeo 96 2.3 Liét ké gid hang

2.4 Cập nhật số lượng

"cổ nen 2.6 Hủy giỏ hùng

3 Đặt hàng trực tuyến

4 Kết chương

Chương 12: CHỨC NĂNG ĐẶC BIỆT 2.ss- 2ss22sseccssez 123

1 Gửi Email bằng mã PHP - Q00 TH reeee 123 1.1 Giới thiệu EimdiÏ neo 123

Trang 8

Mục lục 9 eal?

Chương 13: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

1 Khái niệm lớp và đối tượng - sàn stnnhhhtrirrrrrrrrir

3 Khai báo thuộc tính

4 Phương thức và tham số +cstnrnhhirehhthdtrrrrdtrrrrie

1S 810 0.8 ố

6 Kết chương

Chương 14: ỨNG DỤNG HƯỚNG ĐỐI TƯỢNG VÀO WEBSITE 159

1 Xây dựng lớp làm việc với cơ sở dữ liệu

2 Khai báo sử dụng lớp dùng chưng

Chương 15: KẾT HỢP JAVASCRIPT VÀO MÃ PHEP 177

1 Mã JavaScript tham chiếu đến thẻ HTML - 177

1.1 Nguyén tée trong ma JavaScript

1.3 Tham chiếu đến thẻ HTML

92 Biến cố thường dùng trong JavaScript

3 Hàm thường dùng trong JavaScript -eeseenrrrrrrrtrrrre

4 Khai báo và sử dụng biến trong JavaScript

4.1 Khơi báo uò sử dụng biến - cằeằhhhhthhhtrrrrrrrrrtrrtn

4.2 Các phép toán trong JavaScript

5 Phát biểu có điều khiển của JavaScript

5.2 Phat biéu if else

5.3 Phát biéu while .cseeeseeetee

E8 1 ng n n6 6 .aaa vn

Trang 9

7 Mã JavaScript với trình đơn 00 s02 203

7.1 Xây dựng trình đơn bằng thẻ <table> 203

?.2 Xây dựng trình đơn bằng thẻ span dọn Cây cv 207

8 Mã JavaScript và cửa sổ dạng PODUD QQQQQQ SH Hang 209

Trang 10

Sau khi tìm hiểu phát biểu SQL, đối tượng View và Stored

Procedure cia cơ sở dữ liệu MyS§QL trong chương trước, bây giờ

bạn có thể thiết kế trang PHP cho phép người sử dụng thao tác

dữ liệu theo ý mình

Trong chương này, chúng ta tập trung tìm hiểu cách kết

nối cơ sở đữ liệu, trình bày đữ liệu dang Unicode, thêm mới, cập

nhật và xóa mẩu tin

Ngoài ra, trong chương này bạn tham khảo chuỗi kết nối

cơ sở dữ liệu PostgreSQL, SQL Server và Oracle bằng mã PHP

Các vấn đề chính sẽ được đề cập:

v Rết nối cơ sở đữ liệu

* Liệt kê danh sách mẩu tin

Thêm mới dữ liệu

v' Cập nhật mẩu tin

v Xóa đữ liệu

Iết nối với PostgreSQL, SQL Server và Oracle

1 Kết nối cơ sở dữ liệu

Để kết nối cơ sở đữ liệu My8QL, bạn cũng khai báo chuỗi kết nối

tương tự như cách kết nối với cơ sở dữ liệu khác, ngoài tên máy chủ, địa chỉ IP hoặc là localhost của máy có chứa cơ sở dữ liệu MySQL, bạn cần cung cấp tài khoản (Ủser name) và mật khẩu (Password) để đăng nhập.

Trang 11

12 Chương 8: Kịch ban PHP và cơ sở dữ liệu MySQL

1.1 Thiết lập kết nối cơ sở đữ liệu

Để kết nối cơ sở dữ liệu MySQL trong PHP, ban khai báo doan ma

username 14 tai khoản của người sử dụng trong cơ sở dữ liệu My§QL, trong trường hợp này tài khoản mặc định là root và mật khẩu là

rỗng trừ khi bạn khai báo tài khoản khác hay thay đổi mật khẩu của

root

Sau khi kết nối thành công, bạn khai báo mã PHP để thực hiện mục khác nhau, nếu không sử dụng kết nối thì khai báo đóng như sau:

mysql_close(Sconnect) ;

Chẳng hạn, bạn khai báo đoạn mã PHP trong trang

connectmysql.php để kết nối cơ sở đữ liệu MySQL có tên MarketoHome như ví dụ 8-1

1: Khai báo kết nối cơ sở dữ liệu MySQL

Trang 12

mysql_close ($connect) ;

2>

</body>

</html>

Khi gọi trang connectmysql.php trên trình duyệt, kết quả trả về

như hình 8-1 nếu kết nối cơ sở đữ liệu thành công

i 5 vn Jatal Gees on Tớ "ng iia 2

sig Favorites | và 2} MySQL and stored proced

| | @ Connect to MySQL Data | i | th Y B] + [1 am v Pagey »

mysgl_select_ đb(“đatabase name”, $connect);

Tuy nhiên, bạn cũng có thể vừa kết nối MySQL vừa chọn tên cơ sở

dữ liệu như sau:

<?php

Sconnect = mysqi_connect (

Trang 13

14 Chương 8: Kịch bản PHP và cơ sở dữ liệu MySQL

"T1ocalhost", "rooC","*", "BookStore");

echo "Connected to MySQL <br>";

echo " selected BookStore database";

//do something }

mysql_close(S$connect);

2>

Chú $: Để làm việc với tiếng Việt Unicode, bạn khai báo chỉ định

bằng phát biểu như sau:

mysql_query ("SET NAMES 'utf£8'");

Chang han, ban khai báo mã PHP trong trang opendatabase.php để chọn cơ sở đữ liệu có tên MarketoHome như ví dụ 8-2

echo "Connected to MySQL <br>";

mysql_select_db ("MarketoHome", $connect); echo "Selected MarketoHome database";

mysql_query ("SET NAMES 'ut£8'");

echo "<br>Working with Unicode";

/ |do something }

mysgl_close ($connect) ;

?>

Trang 14

sự Favorites | sm i, MySQL and stored proced »

Hinh 8-2: Chon co sé dit liéu

Tuy nhiên, do chúng ta đã tham khảo cách khai báo trang PHP dùng chung cho Website, trong trường hợp này bạn khai báo trang cấu hình web.php với biến dùng để kết nối MySQL như ví dụ 8-3

Trang 15

require("top.php");

die('Could not connect MySQL: ' mysql_error());

include ("bottom.htm") ; }

else { mysql_select_db ($databasename, $connect) mysql_query ("SET NAMES 'utf8'"); ;

echo "Connected Database";

require("closeconnection.ini");

?>

</body>

</html>

Trang 16

Chương 8: Kịch bản PHP và cơ sở dữ liệu MySQL 17 IẠI”

File Edit View Favorites Tools Help

ug Favorites la ry MySQL and stored proced ”

: | @& Open MySQL Database TT] fey Br & am ~ Pager ”

1.3 Truy vấn cơ sở dữ liệu

Để thao tác dữ liệu trong cơ sở dữ liệu MySQL, bạn có thể sử dụng hàm mysql_queryO với tham số bắt buộc là phát biểu SQL và chuỗi kết nối cơ sở đữ liệu như sau:

Sresult = mysgl_ query (Sselect, Sccnnect);

Phát biểu trên trả về kết quả tùy thuộc vào phát biểu SQL dạng

SELECT hay INSERT/UPDATE/DELETE

2 Liét ké mau tin

Bạn có thể sử dụng hàm mysql_fetch array() với cú pháp như sau

để đọc từng mẩu tin trong biến $result Nếu mẩu tin không tổn tại trong biến $result, hàm này sẽ không thực hiện

Srow = mysql_fetch_array ($result) ;

Trang 17

18 Chương 8: Kịch ban PHP va co sé dit lisu MySQL

Ngoài ra, bạn cũng có thể truy lục dữ liệu bằng cách sử dụng hàm

mysql_fetch_rowQ với cú pháp như sau để đọc từng mẩu tin trong biến

$result

Srow = mysql_fetch_row(S$result) ;

Chang han, ban khai báo trang items.php dé liét kê danh sách

cuốn sách trong bảng viewitems với hai cột trình bày là Itemld và ItemName bang ham mysql_fetch_row() nhu vi du 8-4

í dụ 8-4: Khai báo liệt kê mẩu tin

"localhost", "root", "");

if (!$connect) { die('Could not connect MySQL: ' , mysql_error());

else { mysql_select_db ("MarketoHome", Sconnect);

mysql_query ("SET NAMES 'ucf8!'"*);, Sselect ="select Itemid, ItemName from Items";

Sresult = mysql_query ($select, $connect) ; while (Srow = mysgl_fetch_row($result) ) {

// Lấy giá trị của cột theo chỉ mục echo §row[0] "« Srow{1];

echo "<br>";

} } mysql_close ($connect);

Trang 18

| File Edit View Favorites Tools Help

‘yg Favorites ị J9 MySQL and stored proced 58 Using Stored procedure w

2 Lap trình chuyên nghiệp SQL Server 2000 Tap 1

3 Lập trỉnh chuyên nghiệp SQL Server 2000 Tap 2

§ Lập trình Visual Basic NET Tập 2

6 Lập trình Visual C Sharp NET Tập 1

7 Lap trinh chuyên nghiệp Visual C Sharp NET Tap 2

10 Xây Dựng va Trién Khai Ứng Dụng Thương Mại Điện Tir bang ASP, SQL

Server, Visual Basic, JavaScript

4 Thiét ké Web bang PHP and MySQL

13 Lap trinh tng dung Microsoft Access 2002 Tap 1

14 Lap trinh wng dung Microsoft Access 2002 Tap 2

16 Giáo trình lý thuyết va bai tap Delphi

17 Đô hoa voi Multimedia vdi PowerPoint 2000

18 Sử Dung & Khai Thac Microsoft Visual FoxPro 6.0

19 Tự Hoc Lap Trinh Chuyén Sau Visual Basic NET Trong 21 Ngày

20 Từng bước Lap trinh chuyén nghiép Visual C++ NET

21 Cau Trac Dir Liéu Voi Java

22 Tirng buoc Lap tinh voi Visual Basic NET

23 Vé Minh Hoa Véi CorelDRAW 10 - Tap 3

24 Lap trinh ASP.NET 3.5

@ Internet | Protected Mode: Off Yay S100% v7 :

Hinh 8-4: Danh sdch médu tin

Tuy nhiên, bạn có thể khai báo trang items.php chèn tập tin kết

nối và đóng kết nối cơ sở dữ liệu để liệt kê mẩu tin trong bảng Items như

Trang 19

20 Chương 8: Kịch bản PHP và cơ sở dữ liệu MySQL

$select = "select ItemId, ItemName from Items";

$result = mysql_query ($select, Sconnect) ;

while (Srow = mysql_fetch_row(S$result) )

echo Srow[0]."" $row[1] ; echo "<br>";

2 Lập trình chuyên nghiệp SQL Server 2000 Tap 1

3 Lập trình chuyên nghiệp SQL, Server 2000 Tap 2

le 2 Lập trình Visual Basic NET Tập 2

Ỷ 6 Lập trình Visual C Sharp NET Tap 1

|| 7 Lập trình chuyên nghigp Visual C Sharp 'NET Tập 2

10 Xây Dựng và Triển Khai Ứng Dụng Thương Mại Điện Tử bảng ASP, SQL

Server, Visual Basic, JavaScript

a 4 Thiết kế Web bảng PHP and MySQL

7 13 Lập trình ứng đụng Microsoft Access 2002 Tap 1

Ig 14 Lop tinh tg dang Microsoft Access 2002 Tip 2

ly 16 Gido trinh ly thuyét va bai tap Delphi

17 Dé hog véi Multimedia vei PowerPoint 2000

18 Sir Dyng & Khai Théc Microsoft Visual FoxPro 6.0

| 19 Tự Học Lập Trình Chuyên Sâu Visual Basic NET Trong 21 Ngày

lũ 20 Từng bước Lập trình chuyên nghiệp Visual C++ NET

Trong hai ví dụ trên bạn truy cập đến cột dữ liệu xuất bằng chỉ mục

(index) của cột đữ liệu trong bảng, nếu thứ tự cột đữ liệu thay đổi thì đữ

liệu trình bày sẽ có thứ tự khác nhau

Nếu có nhu câu chỉ định tên cột (column name), bạn khai báo trang itemarray.php với hàm mysql_fetch_array() nhu vi du 8-6

Trang 20

®

Chương 8: Kịch bản PHP và cơ sở dữ liệu MySQL 21 (AA ors

Ví dụ 8-6: Khai báo tên cột dữ liệu

Sselect = "select ItemId, ItemName from Items";

$result = mysql_query ($select, $connect);

while ($row = mysql_fetch_array ($result) )

{ //Léy giá trị của cột bằng tên cột

echo §row["TtemTd"] " "

.Šrow[ "TtemName"] ; echo "<br>";

đ{ 1 JSP/ServktlavaBcans

BỊ 2 Lặp trình chuyên nghiệp SQL Server 2000 Tap 1

E| 3 Lập trình chuyên nghiệp SỌL Server 2000 Tap 2

lÍ 5 Lập trình Visual Basic NET Tập 2

lị 6 Lập trình Visual C Shap NET Tập 1

l 7 Lập trình chuyên nghiệp Visual C Sharp NET Tap 2

HỆ 10 Xáy Dựng và Triển Khai Ứng Dụng Thương Mại Điện Tử bằng ASP, SQL

A) Server, Visual Basic, JavaScript

Rl 4 Thiét ké Web bang PHP and MySQL

|| 13 Lập trình ứng dụng Microsoft Access 2002 Tập 1

Dị 14 Lập trình ứng dụng Microsof Access 2002 Tập 2

F] 16 Gido trình lý thuyết va bài tập Delphi

lj 17 Đề hoạ với Mukrrnedia với PowerPoint 2000

18 Sử Dụng & Khai Théc Microsaft Visual FoxPro 6.0

iY 19 Tw Hoc Lap Trinh Chuyén Sau Visual Basic NET Trong 21 Ngày

F 20 Từng bước Lập trình chuyên nghiép Visual C++ NET

@ Internet | Protected Mode OF

Hình 8-6: Liệt kê mẩu tin.

Trang 21

22 Chương 8: Kịch ban PHP va cơ sở dữ liệu My§QL

2.1 Số lượng mẩu tin

Khi bạn truy vấn dữ liệu, để biết được số lượng mẩu tin do câu truy vấn trả về, bạn có thể sử dụng hàm mysql_num_rowsQ có cú pháp như sau:

$ rows = mysql_num_rows();

Chẳng hạn, trong trường hợp trang totalrows.php truy cập bảng đữ liệu có tên là Items, để biết tổng số mẩu tin trả về bạn sử dụng ham

mysql_num_rows() nhu trong vi du 8-7

Ví dụ 8-7: Đọc tổng số mấu tin trình bày

$select = "select ItemId, ItemName from Items";

$result = mysql_query.($select, Sconnect);

! Tổng số mẩu tin trả uê

Srows = mysql_num_rows ($result);

echo "<b>No of Records: ".$rows "</b><br>";

while (Srow = mysql_fetch_array ($result) )

echo $row["ItemId"] =" »

.$row["ItemName"} ; echo "<br>"; -

} Loe “ xequire ("closeconnection ini ");

?>

</body>

</html>

Nếu triệu gọi trang t totalrows, php trên trình duyệt thì kết quả trình

bày như hình 8-7 woe

~

Trang 22

¡Ì 2 Lập trình chuyên nghiệp SQL Server 2000 Tap 1

jj 3 Lập trình chuyên nghiệp SQL Server 2000 Tap 2

la 5 Lập trình Visual Basic NET Tập 2 -

1 6 Lập trinh Visual C Sharp NET Tap 1

1 7 Lập trình chuyên Visual C Shagp _NET Tập 2

Ì 10 Xây Dựng và Tỉ Khai Ứng Dụng Thương Mại Điện Tử bằng ASP, SQL

4] Server, Visual Basic, JavaScript

bì 4 Thiét ké Web bing PHP and MySQL

: 13 Lập trình ứng dụng Microsoft Access 2002 Tập 1

q 14 Lập trình ứng dụng Microsoft Access 2002 Tập 2

lÌ 16 Giáo trình lý thuyết và bài tập Deiphi

4 17 Đô hoa vai Multimedia voi PowerPoint 2000

18 Sử Dụng & Khai Thac Microsoft Visual FoxPro 6.0

1 19 Tự Học Lập Trình Chuyên Sân Visual Basic NET Trong 21 Ngay

Hình 8-7: Tổng số mẩu tin trẻ uễ

Ngoài ra, bạn cũng có thể đọc dữ liệu từ bảng vào đối tượng bằng cách sử dung ham mysql_fetch_object(), sau dé doc gid trị từng cột thông

qua thuộc tính tên cột với cú pháp là $row-> columnnname như ví dụ 8-8

Ví dụ 8-8; Đọc dữ liệu hing ham mysql fetch_object

<html>

ŠtiCle>TTEMS</title>

<meta http-equiv="Content-Type" ` content="text/html; charset=utf-8">

<?php ee

recwire ("connect oi; ini*);

$Sselect = "select ItemId, ItemName from Items";

$result = mysql_query ($select, $connect) ; Srows = mysql_num_rows ($result) ;°

echo "<b>No of Records: ".$rows."</b><br>"; //S2 dung ham mysql_fetch_object

while($row = mysql_fetch_object ($result) )

Trang 23

24 Chương 8: Kịch bản PHP và cơ sở dữ liệu MySQL

Sq Favorites = hy €) MySQL and stored proced 12 Using Stored procedure w ”

@mMws 7” ~) By By is deh ~ Pages Safety~ Tooke ”

ht 1 JSP’Serviet‘JavaBeans

4

|] 2 Lập trình chuyên nghiệp SQL Server 2000 Tap 1

L| 3 Lập trình chuyên nghiệp SQL Server 2000 Tap 2

[| 5 Lập trình Visual Basic NET Tap 2 ị

| 6 Lap tinh Visual C Sharp NET Tap 1 tài

| 7 Lập trình chuyên nghiệp Visual C Sharp NET Tap 2

10 Xây Dựng và Trién Khai Ung Dung Thương Mại Điện Từ bằng ASP, SQL

Server, Visual Basic, JavaScript

4 Thiét ké Web bang PHP and MySQL

13 Lap trinh tng dung Microsoft Access 2002 Tap 1 WAT A Ace ror A eee INNA TS 2

@ Intemet | Protected Made: Off Sey KI00% +

Hình 8-8: Đọc đữ liệu từ bang Items

Để thiết trang Web cho phép liệt kê đanh sách mẩu tin trộn với thé HTML, ban sao chép (copy) trang index.php thanh trang books.php

rồi khai báo doan ma PHP liệt kê danh sách mẩu tin của bảng Items trong phần thân (body) của chúng như ví dụ 8-9,

Trang 24

Sselect = "select * fromItems";

Sresult = mysql_query (S$select, $connect);

Srows = mysql_num_rows ($result);

echo "<tr><td valign='top' colspan=3><b>";

echo "No of Records: ".Srows."</b></td></tr>"; while(Srow = mysql_fetch_array ($result) )

sg Freontes «ca €; MySQL sndstoredoroced 2> Uning Stored procedure w @ Gohihabhe Magazine, W 5) Symantec Crime Store Sf Intemnatignal Stone Wab-S i

GB Mater To Home Ay + GY ON ek Bạn ĐieyY Tay Be”

` ‘The Works ti@av% cù cết

‘May be whatever wa set today couit

Soo Holiday

: 3e [Oy List 9 LÊ J4

‘S000 Amazon Dmiaveracinis B0900 , CBO actos tog +Neaduee rests

SACH BAN

SORE Mạng CCNA - Giáo

©€HA2Z”- Tính Hệ Thông Mạng

$6000 af Miy Tak CCNA Baa -

@ toternet | Protected Moxie: OM fa~ Atos +

Hình 8-9: Danh sdch mdu tin.

Trang 25

26 Chương 8: Kịch bản PHP và cơ sở dữ liệu MySQL

Một góc nhìn khác, bạn có thể khai báo cách trình bày danh sách mẩu tin theo bố cục tùy ý trong trang bookslphp (copy từ trang books.php) tương tự như hình 8-9-1

4 ASP-Semtet JavaBeans Price: 38000

Repel © Name: Lap tinh Visual Basic NET Tap 2

Hinh 8-9-1; Trinh bày danh sách mẩu tim

Ngoài ra, bạn cũng có thể khai báo để trình bày thông tin tóm tắt

của sách theo hai cột trong trang books2.php (copy từ trang books.php)

irre SE | ap minh chuyên nghiệp eight:

ee SQL Server 2000 Tap 1 mice: 42000 m¬.‹ - w 250

* Size: 320x420

Weight: 520 Size: 320x520

Se @3p tinh chuyén nghiệp ves

SQL Server 2050 Tap 2 Weight 420

Hinh 8-9-2: Trinh bay 2 cét

Trang 26

Chương 8: Kịch bản PHP và cơ sở dữ liệu MySQL 27 ES MỊ”

Nếu người sử dụng chọn vào liên kết tên sách, trang details.php sé

triệu gọi, bạn có thể sử dụng hàm $_GET để lấy mã sách từ chuỗi Query

String và liệt kê chúng như ví dụ 8-10

i du 8-10: Khai báo trình bày một mẩu tỉn

<table width="100%" border="1" cellspacing="0"

/ [Khai bdo SQL uới tham sé $id

Sselect = "select * from Items where

ItemId='".Sitemid "'";

Sresult = mysql_query ($select, $connect);

echo "<tr><td valign='top' colspan=2><b>"

echo "Details</b></td></tr>";

if (Srow = mysql_fetch_array ($result) )

{ echo "<tr><td valign='top'>ItemId</td>";

Khi triệu gọi trang books.php trên trình duyệt, tên sách thông tin

chỉ tiết của cuốn sách sẽ trình bày như hình 8-10

Trang 27

J few Favorites Toots Bele

Fy Frvonees | ay je: MySQL end stored peoced 1

Chương 8: Kịch bản PHP và cơ sở dữ liệu MySQL

ay « Jemld 32096 Hem Namie Lip winh chuyền nghigp SQi Server 2000 Tap 1

^ Description ip tinh chayén nehigp SQL Server 2000, Database Analsic and Design, whe ws Foneitons, Triggers, Transactions, Accouneng System Exam, SQL Language, Database Objects: Tables Views, Stored Procedure, RUies

[96 Mocket To Home Re a - Ef Wb > Boyes Sefety~ Tonks §§: i

“The te lẻ siqavs changes af 3

đ ™ (ay be hoteoer rao et fod ean 8 arate Ÿ

Meketotomd Sener ratessedtoamere

voy tes is TIỀN HỆ

Điền Thọai (0E)292504901

Mang CCNA - Giáo Trinh He Thong Mang 2! May Tinh CCNA Bia

fer RIOR T

Hình 8-10: Thông tin chỉ tiết của cuốn sách,

3 Thêm thông tin vào cơ sở dữ liệu

Thêm thông tin vào cơ sở dữ liệu cũng giống như lấy dữ liệu từ cơ

sở đữ liệu trình bày trên trình duyệt, thay vì truyền phát biểu SELECT vào hàm mysql_queryQ thì bạn có thể truyén phat biéu INSERT

Chẳng hạn, để thêm mẩu tin vào bảng Categories, bạn thiết kế

trang category.php như hình 8-11

Hình 8-11: Giao dién trang category.php

Kế đến, bạn khai báo đoạn mã đ bang Groups vao List/Menu như vi du 8-11 é liét kê danh sách mẩu tin trong

Trang 28

Sselect = "select * fromGroups";

Sresult = mysqi_query ($select, $connect); Srows = mysql_num_rows ($result);

while (Srow = mysql_fetch_array ($result) ) {

echo "<option value=";

Hinh 8-11-1: Danh sdch Groups

Chú ý: Thê <form> của trang category.php trỏ đến trang save.php, dựa vào giá trị của thể hidden có tên from để biết người sử dụng triệu gọi

Trang 29

30 Chương 8: Kịch bản PHP và cơ sở đữ liệu MySQL

Hinh 8-12: Trang caetgory.php

Chú ý: Một số vấn để cần tránh khi lưu dữ liệu là sử dụng hàm str_replace() dé thay thé chuỗi đữ liệu có dấu ' thành hai dau ' liên tiếp

Ví dụ, khi triệu gọi trang category.php và nhập tên loại sách là

“Analysỉs” như hình 8-13 và nhấn nút, Save, lỗi phát sinh như hình 8-13-1

Trang 30

®©

Chương 8: Kịch bản PHP va cơ sở đữ liệu MySQL 31 E1

Điều này có nghĩa là tất cả những dữ liệu do người đùng nhập và

lưu vào cơ sở đữ liệu đều phải xử lý chúng với hàm str_replaceQ)

Error inserting: You have an error m your SQL syntax: check the manual

that corresponds to your MySQL server version for the right syntax to use

í dụ 8-13: Khai báo hàm replace

£unct1on replace ($strtoreplace)

{

} return str_replace("'","'’", $strtoreplace) ;

Sau đó, mỗi khi định nghĩa phát biểu SQL, ban goi ham replace()

cho các giá trị nhập từ màn hình Chẳng hạn, bạn khai báo gọi hàm

replaee( trong trang category.php như ví dụ 8-13-1

Trang 31

32 Chương 8: Kịch bản PHP và cơ sở đữ liệu MySQL

//Goi ham replace Sinsert= “insert into Categories ( CategoryName, GroupId)";

Sinsert.=" values('" -replace(Sname)."','",

require ("closeconnection.ini"); ,

} //Ham replace

function replace ( Sstrtoreplace)

{ } return str_replace("tu,mrra) Sstrtoreplace);

?>

Nếu bạn nhập tên loại sách là “Analysis” như hình 8-13 và nhấn

nút Save, lưu thành công và trang categories.php được triệu gọi với danh

sách mẩu tin như hình 8-13-2

Hinh 8-13-2: Luu thanh céng

Trong ứng dụng thực tế, bạn có thể khai báo hàm replace(Q) được viết trong tập tin common.php rồi sau đó khai báo sử dụng hàm này trong các trang PHP khác bằng hàm require()

Trang 32

®

Chương 8: Kịch bản PHP và cơ sở đữ liệu MySQL 33 Al

Chú ý: Bạn có thé khai báo trang save.php để sử dung chung cho

mọi bảng dữ liệu khi có nhu cầu thêm mới bằng cách dùng phát biểu

switch case dựa vào giá trị từ thẻ hidden có tên “from”

4 Cập nhật dữ liệu

Để cập nhật dữ liệu, bạn khai báo liên kết bằng thẻ <a> trên mỗi tên của sản phẩm để cho phép người sử dụng hiển thị thông tin của chúng ở chế độ thay đổi được

Chẳng hạn, bạn khai báo thể <a> trên mỗi tên loại sách trong trang categories.php để trỏ đến trang category.php như ví dụ 8-14

ï dụ 8-14: Khai báo liên kết đến trang cập

<?php

reguire("connection.ini");

Sselect = "select CategoryId, CategoryName, "; Sselect.="GroupName fromCategoriesC, ";

Sselect.="Groups G where G.GroupId=C.Groupida";

Sresult = mysql_query ($select, $connect) ;

Srows = mysql_num_rows ($result);

echo "<tr><td valign='top' colspan=3><b>";

echo "No of Records: ".$rows."</b></td></tr>"; while(Srow = mysql_fetch_array ($result) )

Khi triéu goi trang categories.php trén trinh duyét, ban thay lién

kết đến trang category.php ứng với tên của loại sách như hình 8-14.

Trang 33

34 Chương 8: Kịch bản PHP và cơ sở đữ liệu MySQL

Category Id (Category Name Group Name |

INo of Records: 13 1 heereereee “ent ett meme aa - Tu cà -—

Hinh 8-14: Lién két dén trang category php

Dé cho phép hién thị thông tin của loại sách được chọn, bạn khai báo đoạn chương trình trong trang category.php cho trường hợp cập nhật như ví dụ 8-15

Ví dụ 8-15: Khai báo đọc thông tin của loại sách

$id=S$_GET["ida"];

/ 1 Nếu id có giá trị hợp lệ 1f(is_numeric (§5iđ3)) {

$select = "select * from Categories";

Sselect =" where CategorylId=" Sid;

$result = mysql_query ($select, Sconnect); while (Srow = mysql_fetch_array ($result) ) { Sname= Srow[ "CategoryName"];

Sgroup= Srow[ "GroupTd"] ;

?>

Trang 34

®

Chương 8: Kịch bản PHP và cơ sở dữ liệu MySQL 35 |

Kế đến, bạn khai báo gán biến $name vào thuộc tính value của thẻ

categoryname như sau:

<input name="categoryname" type="text"

valuez "<?php echo $name; ?>"

id="categoryname" size="50" maxlength="50">

Tiếp theo, bạn khai báo chọn giá trị nhóm sách như sau:

while (Srow = mysql_fetch_array ($result) )

{

echo "<option value=";

echo Srow["GroupId"] ;

if (S$group==Srow["GroupIda")) echo " selected";

echo ">" Srow["GroupName"] "</option>";

Nếu bạn chọn loại sách là Analysis thì trang category.php trình bày như hình 8-15

Category

Category Name Business for Everybody _

Group Name Poem x

Hình 8-15: Trình bày thông tin chỉ tiết để cập nhột

Để cập nhật dữ liệu, bạn phải biết được giá trị của khóa chính, trong trường hợp này chúng ta khai báo thẻ hidden ngay sau thẻ hidden

có tên là “from” và gán giá trị là biến $¡d

<input type="submit" name="button" id="button”

Trang 35

36 Chương 8: Kịch bản PHP và cơ sở dữ liệu MySQUL

Khi nhấn nút Save, dựa vào giá trị của thẻ hiđđen có tên là id, ban

biết trường hợp thêm mới hay cập nhật

Trở lại trang save.php, bạn khai báo thêm biến $id để lấy giá trị từ thé hidden cé tén 1a id réi tiếp tục khai báo phát biểu update nếu giá trị này khác rỗng như ví dụ 8-16

í dụ 8-16: Khai báo cận

<?php if(isset ($_PosT[" from"])) {

Sfrom= S_POST["from"];

$id = $_POST["id"];

require ("connection.ini ");

Sname = $_POST[ "categoryname "1;

Šgroup = $_POST[ "groupname" ] ; 1f(Sid=="")

{ /Í Trường hợp thêm mới mẩu tin Sinsert= "insert into Categories (CategoryName, GrOUpTd) ";

Sinsert= “update Categories set CategoryName=";

Sinsert.="'" -replace(S$name)."'! ,GroupiIds='"

echo "Error inserting: ", mysql_error();

require("closeconnection ini");

} function replace (S$strtoreplace) {

return scr_replace ("1% min ,sstrtoreplace) ; }

?>

Trang 36

®

Chương 8: Kịch bản PHP và cơ sở đữ liệu MySQL 3z MAI

Ví dụ, bạn chọn liên kết trên tên loại sách là Analysi’s, trang

category.php xuất hiện như hình 8-16, thay đổi Analysis thành Analysis

như hình 8-16-1 và nhấn nút Save, nếu cập nhật thành công thì trang

categories.php như hình 8-16-2

Category

Category Name Analysỉs

Group Name Poem v

Trang 37

38 Chương 8: Kịch ban PHP va cơ sở dit ligu MySQL

Chú ý: Bạn có thể khai báo trang save.php để sử dụng chung cho trường hợp thêm mới và cập nhật mẩu tin của mọi bảng dữ liệu bằng cách

dùng phát biéu switch case dua vao gid tri tit thé hidden có tên “from” và

gid tri cha bién $id

5 Xóa mau tin

Trong trường hợp xóa mẩu tin, bạn có thể có nhiều cách thực hiện việc này Ví dụ, bạn trình bày biểu tượng xóa trên mỗi mẩu tin trình bày,

một khi người sử dụng chọn vào biểu tượng thì chúng sẽ xóa mẩu tin đó Chẳng hạn, bạn khai báo đoạn mã PHP để liệt kê danh sách mẩu tin trong bảng Customers như ví dụ 8-17

IVí dụ 8-

17: Khai báo liệt kê danh sách khách hàng

<?php require("connection.ini");

Sselect = "select * from Customers";

$result = mysql_query ($select, Sconnect);

Srows = mysgl_num_rows (Sresult);

/ [Duyệt qua từng mẩu tin

while(Srow = mysql_fetch_array ($result)) {

echo "<tr><td valign='top' align=center>"; echo Srow["CustomerId"] "</td> "

echo "<td valign='top! align=center>";

// Khai bdo lién két echo "<a href=delete -php?from=customer&id="; echo Srow[ "CustomerId"] ">";

([ Khai báo biểu tượng xóa mẩu tin

echo "<img border=0 src=icons/delete.gif></a></td></tr>":

} echo "<tr><td valign=' top' colspan=4><b>";

echo "No of Records: ".Srows "</b></td></tr>";

require ("closeconnection.ini");

?>

Trang 38

®

Chương 8: Kịch bản PHP và co sé dit ligu MySQL 39 Al Nếu triệu gọi trang customers.php trên trình duyệt, bạn có thể thấy

danh sách khách hang trinh bay véi biéu tugnhieu tucnynhu hình 8-17

‘Customer Id Customer Name/Address 7 7 #

1 "Nguyen Thí Họng Lan /192 Tran Hung Dao, F1, Q.5 - | a

5 Neuyen Tran Minh 2 Thao Dien, Dist 2 l8

Hình 8-17: Biểu tượng xóa mổu tin

Khi trình bày thông tin chỉ tiết của mẩu tin, bạn thêm nút Delete

và cho phép người sử dụng xóa mẩu tin đang xem

Chẳng hạn, bạn khai báo đoạn mã PHP trong trang customer.php như ví dụ 8-18

í dụ 8-18: Khai báo nút xóa

<input type="submit" name="button"” id="button"

value="Save">

<?php if (is_numeric (Sid) }{?>

<input type="button"

onclick="window open ( ‘delete php? from=customer&id=<

?php echo $id?>');" value="Delete">

Khi chọn liên kết trên trang customers.php, trang customer.php trình bày thông tin của khách hàng với nút Delete xuất hiện như hình 8-18.

Trang 39

40 Chương 8: Kịch bản PHP va co sé dit ligu MySQL

Customer

Customer Name Phuong Uyen Company

Address 12 Hong Ha, F Lien Chieu, Da Nang

Province Name Da Nang v

Hình 8-18: Nứt xóa

Tương tự như trường hợp thêm mới và cập nhật dữ liệu, bạn có thể

khai báo trang delete.php với nội dung như ví dụ 8-19

$delete="";

$gotopage = "";

$id=$_GET["ia"];

if (is_numeric($id)) {

switch($from) {

( [Trường hợp xóa bằng Customers case "customer":

$delete= " delete from customers ";

Sdelete.=" where customerid='";

$delete.=Sid."'",;

$gotopage = "customers -php";

break;

} }

if (S$delete !="" gg mysql_query ($delete, Sconnect) ) header ("Location:" Sgotopage);

Trang 40

Chương 8: Kịch bản PHP và cơ sở đữ liệu MySQL 41 II”

} else echo "Error inserting: "

mysgql_error();

} require("closeconnection.ini");

}

}

2>

Giả sử bạn nhấn vào biểu tượng ÑÑ của khách hàng có mã là 12,

trang delete.php sẽ được triệu gọi và trang customers.php xuất hiện với khách hàng đã bị xóa như hình 8-19

| Customer 1d ÍCustomer Name ‘Address — ¬ - #

ay en Thi Hons Lan 192 Tran Hung Dao, F1, Q.5 a

! § (Nouven Tran Minh 2 Thao Dien, Dist 2., - ` W

6 12 Hong Ha, F Lien Chieu, DaNang

I _ 2 / 45 Le Van Sy, F12, Quan 3 _ a

3 56 Vuon Lai, F 17, Tan Binh ữ L7 wen Viet Minh 6 Le Loi, Trung tam Cong nghe phanmem \Ÿ

Quang ‘Hue :

Hình 8-19: Xóa mẩu tin thành công

Chú $: Bạn có thể khai báo trang delete.php để sử dụng chung cho trường hợp xóa mẩu tin của mọi bảng dữ liệu bằng cách dùng phát biểu

switch case dựa vào giá trị từ thẻ hidden hay tham số trên Query String

có tên “from” và giá trị của biến $¡d

6 Kết nối cơ sở dữ liệu khác

PHP là kịch bản trình chủ mã nguễn mở có nhiều phiên bản có thể

chạy trên nhiều hệ điều hành, chẳng hạn nhu Windows hay Linux Do do,

mọi cơ sở đữ liệu khi cài đặt trên hai hệ điểu hành này đều có thể truy cập bằng mã PHP.

Ngày đăng: 27/03/2015, 16:36

HÌNH ẢNH LIÊN QUAN

Hình  8-10:  Thông  tin  chỉ  tiết  của  cuốn  sách, - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 8-10: Thông tin chỉ tiết của cuốn sách, (Trang 27)
Hình  9-6:  Phân  trang  theo  chuỗi  Query  String. - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 9-6: Phân trang theo chuỗi Query String (Trang 62)
Hình  9-7:  Kết  quả  liệt  kê  trên  trang  pages.php. - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 9-7: Kết quả liệt kê trên trang pages.php (Trang 63)
Hình  15-8:  Trang  textarea.him. - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 15-8: Trang textarea.him (Trang 193)
Hình  15-10:  Số  ký  tu  còn  lại  trén  thé  &lt;textarea&gt;. - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 15-10: Số ký tu còn lại trén thé &lt;textarea&gt; (Trang 194)
Hình  15-26:  Mở  của  số  trình  bày  hình  lớn. - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 15-26: Mở của số trình bày hình lớn (Trang 209)
Hình  15-29:  Chon  phan  tit  tw  AvailableUsers  sang  Assigned Users. - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 15-29: Chon phan tit tw AvailableUsers sang Assigned Users (Trang 211)
Hình  15-30:  Chọn  phần  tử  từ  Assignedsers  sang  AvailableUsers. - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 15-30: Chọn phần tử từ Assignedsers sang AvailableUsers (Trang 212)
Hình  16-10:  Sở  dụng  lớp  Zend_Poginator. - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 16-10: Sở dụng lớp Zend_Poginator (Trang 237)
Hình  16-12-2:  Lớp  2end_Loader_Autoloader. - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 16-12-2: Lớp 2end_Loader_Autoloader (Trang 239)
Hình  16-19:  Phan  trang  di  liéu. - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 16-19: Phan trang di liéu (Trang 250)
Hình  16-25:  Cập  nhật  mẩu  tin  thành  công. - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 16-25: Cập nhật mẩu tin thành công (Trang 257)
Hình  16-26:  Danh  sách  mẩu  tin. - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 16-26: Danh sách mẩu tin (Trang 259)
Hình  16-98:  Xda  mdu  tin  thành  công. - Lập trình web bằng PHP 5.3 và cở sở dữ liệu MySQL 5.1 Tập 2
nh 16-98: Xda mdu tin thành công (Trang 260)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w