CGI và CGI
SCRIPT
I. GIỚI THIỆU CGI VÀ CGI SCRIP:
Ðể tạo những trang Web có khả năng tác động
qua lại với các trang Web khác cũng như tạo khả năng tương tác giữa
Server và Client, ví dụ như client có thể đệ trình một form cho server
và nhận lại những thông tin theo yêu cầu hoặc có thể xử lý những
thông tin phức tạp thì thường Server sẽ không trực tiếp xử lý những
công việc này mà thay vào đó sẽ chuyển những công việc này cho
những chương trình khác xử lý, những chương trình này được gọi là
chương trình gateway, CGI Script chính là một chương trình gateway chạy
trên Web Server. Chúng ta có thể sử dụng CGI Script để tạo Web tương tác
ở mức độ cao hỗ trợ cho những công việc xử lý của chúng ta trên
server. Còn CGI là một chẩn truyền
thông, định nghiãø chuẩn cho các
chương trình gateway được chạy trên Web Server như thế nào và
chúng tác động với những chương trình ứng dụng khác ra sao. Như tên
gọi của chuẩn này (Common Gateway Interface) nó mô tả cách làm việc
của chuẩn CGI như sau :
-
Chỉ ra phương thức chung để truy xuất những Script, CGI cho phép
bất cứ ai, không phân biệt hệ điều hành, không phân biệt trình
duyệt để đều có thể gởi thông tin tới một CGI Script.
-
Ðịnh nghĩa liên kết hoặc gateway giữa Script, Server, và những
chương trình khác, CGI tạo khả năng cho Script nhận được dữ liệu nhập từ những ứng
dụng khác và gởi dữ liệu xuất tới những ứng dụng này.
-
Mô tả giao diện hoặc phương
thức để user có thể truy xuất
Script, CGI giúp giảm bớt những công việc xử lý phức tạp để tạo
giao diện cho Script bằng những thủ tục cơ bản.
CGI cho phép người tạo Web che dấu người đọc
những phức tạp trong việc xử lý các dữ liệu trong trang Web. Người
đọc chỉ việc click vào một vùng, một hình ảnh , một dòng chữ được
đánh dấu, hoặc nhập vào những mẫu đăng ký có sẵn sau đó click vào
vùng submit trong trang Web khi hoàn thành việc đăng ký. Mọi thứ sau
khi click chuột xảy ra một cách tự
động và người đọc không phải để ý cách mà các dữ liệu đó được
xử lý như thế nào và tại sao lại như vậy.
Trong khi người đọc chỉ cần nhìn
kết quả việc đăng ký của họ hoặc trả lời những câu hỏi được đưa
ra, có nhiều công đoạn xảy ra,
những công đoạn đó được tóm tắt như sau
:
·Trình duyệt của người
đọc sẽ chuyển dữ liệu cần nhập vào đến Server.
·Server chuyển dữ liệu
nhập đến một CGI Script.
·CGI Script xử lý dữ liệu
nhập, chuyển dữ liệu này đến một trình ứng dụng khác nếu cần
thiết, sau đó gởi dữ liệu xuất ra Web Server .
·Web Server chuyển dữ liệu
xuất trở ra trình duyệt của người đọc .
Như chúng ta đã thấy ở phần giới
thiệu trên, sử dụng CGI Script giúp ta có thể tự động hoá một số
công việc làm bằng tay mất nhiều thời gian, giúp ích cho người đọc
có được sự đơn giản, được tự động trả lời cho những dữ liệu mà họ
nhập vào, một cách dễ dàng khi đăng kí (submit), và một cách nhanh
chóng để điều khiển những việc khác nữa ví dụ như tìm kiếm dữ liệu,
CGI script cũng có thể xác nhận định danh của user và những thông tin
về password của họ, cấp cho user
quyền truy xuất theo những giới hạn được quy của Web site .... .
II. CÁCH THỨC LÀM VIỆC
CỦA CGI SCRIPT :
Dữ liệu nhập thường là từ trong form của những biến môi
trường đến CGI Script do Web server chuyển đến. Những biến môi trường
này mô tả thông tin được mang đến, như là version của CGI được sử dụng trên Web Server,
kiểu của dữ liệu, kích thước của dữ liệu , và những thông tin quan
trọng khác . CGI Script cũng có thể nhận dữ liệu nhập theo 2 cơ chế
khác nữa:
Thông số dòng lệnh
(command-line arguments) ø
Thiết bị nhập chuẩn ( Standard
input ).
User gởi thông tin tới một CGI
Script bằng cách kích hoạt một liên kết đến Script đó. CGi Sript sẽ
xử lý dữ liệu nhập và format kết quả xuất cho Server có thể sử
dụng được. Server nhận kết quả và gởi chúng cho Browser của user.
Browser sẽ hiển thị kết qủa này cho user.
Dữ liệu xuất từ một CGI Script
bắt đầu bằng một header chứa một chỉ dẫn (directive) cho Server. Thông
thường có 3 chỉ dẫn cho Server là :
Content-type.
Location.
Và Status.
Header
giống với một chỉ dẫn trong format của một HTTP header được theo sau
bởi một blank line (dòng trắng không chứa ký tự nào), blank line này
liên kết header với dữ liệu gởi cho browser. Dữ liệu xuất chứa chỉ
dẫn Location và Status thường là một dòng đơn. Vì chỉ dẫn được đặt
trong dòng Location hoặc dòng Status thì đều cần thiết cho Server, và
khi không có dữ liệu theo sau header thì bạn cũng không cần chèn một
blank line để thay thế. Server dịch dữ liệu xuất, set biến môi truờng,
và gởi dữ liệu cho client.
Việc trao đổi dữ liệu giữa 1 Client
và 1 Server có nhiều phần. Những phần đó có thể phân ra làm 8 bước
như sau :
1.
Client gởi dữ liệu nhập tới 1 server.
2.
Server thiết lập biến môi trường gắn liền với dữ liệu nhập.
3.
Server gởi dữ liệu nhập như là những biến ( variable ) tới CGI
Script.
4.
Server gởi Command-line hoặc
Standard input stream tới CGI Script
nếu dữ liệu được đưa vào bằng một trong hai cơ chế này.
5.
Script xử lý dữ liệu nhập.
6.
Script gởi trả dữ liệu xuất tới server . Dữ liệu xuất này
luôn chứa đựng 1 header và thỉnh
thoảng chứa một BODY nếu có dữ
liệu thêm vào.
7.
Server thiết lập biến môi
trường gắn liền với dữ liệu xuất.
8.
Server gởi dữ liệu xuất cho Client.
III. Nhập dữ liệu vào
CGI Script :
Khi một
user kích hoạt một liên kết tới một CGI Script, dữ liệu nhập được
gởi tới server. Server định dạng lại dữ liệu này vào trong biến môi
trường và kiểm tra xem có dữ liệu được thêm vào theo Conmand line hay standard input stream (dòng
nhập chuẩn) hay không.
Sau đây là những phương thức thông thường để
CGI Script nhận dữ liệu :
1.
Biến môi trường (
Evironment Variables ) :
Dữ liệu
nhập trong CGI Script thì thông thường trong form của biến môi
trường. Biến môi trường được gởi
tới CGI Script được kết hợp với thông tin yêu cầu của browser từ client
gởi đến thông qua server, server xử lý yêu cầu, và dữ liệu được gởi
trong yêu cầu đó. Sau đây là những biến môi trường chuẩn được liệt
kê trong bảng sau
Biến |
Mục đích |
AUTH_TYPE |
Ðược
sử dụng để xác nhận tính hợp lệ việc truy xuất của user. |
CONTENT_TYPE |
cho
biết kiểu dữ liệu mà script sẽ
truyền (kiểu MIME_type của dữ
liệu). Khi server đọc dòng này, nó sẽ lấy dòng này thay thế cho dòng conten_type mặc định nó. |
GATEWAY_INTERFACE |
Cho
biết version của CGI mà servser đang sử dụng. |
HTTP_ACCEPT |
Cho
biết nội dung MIME_type mà sẽ
đựơc gửi tới gateway script thông qua server. Script dùng thông tin
này để quyết định loại dữ liệu gửi về cho client. |
HTTP_USER_AGENT |
Cho
biết kiểu của browser được sử dụng dể gửi yêu cầu. Nó chứa nội
dung của field user_agent trong
header của request (yêu cầu). |
PATH_INFO |
Ðồng
nhất thông tin thêm vào kể cả trong URL. |
PATH_TRANSLATED |
Thiết
lập bởi server tren biến path_info. Server dịch biến path_info vào trong
biến này. |
QUERY_STRING |
Thiết
lập chuỗi câu hỏi (nếu URL chứa đựng một chuỗi hỏi) . |
REMOTE_ADDR |
Cho
biết địa chỉ IP của máy truy xuất
vào server. |
REMOTE_HOST |
Cho
biết tên của máy truy xuất vào server. |
REMOTE_IDENT |
Cho
biết số định danh máy truy xuất . |
REMOTE_USER |
Cho
biết user name được xác nhận bởi
user. Chỉ được thiiết lập khi có yêu cầu nhận dạng, nếu không bị bỏ trống. Có thể sử dụng nó kiểm soát
quyền truy xuất của user. |
REQUEST_METHOD |
Cho
biết method bởi chính yêu cầu tạo ra nó. |
SCRIPT_NAME |
Cho
biết đường dẫn ảo tới script đang được thực thi. |
SERVER_NAME |
Cho
biết host name của server, alias hoặc IP address . |
SERVER_POST |
Cho
biết số port của server được client được gởi yêu cầu tới . |
SERVER_PROTOCOL |
Cho
biết protocol của yêu cầu đã gởi đến server. |
SERVER_SOFTWARE |
Cho
biết software của web server . |
Ðể
dễ hiểu chúng tôi xin giới thiệu một số kiểu MIME_TYPE cơ bản thường
xử dụng trong các biến môi trường
(ví dụ trong biến Content-type) :
Application : dữ liệu nhị phân ,
có thể được thực thi hoặc được sử dụng với một chương trình ứng
dụng khác .
Audio : là một file sound (âm
thanh).
Image : là một picture (hình
ảnh).
Message : là một thư tín tóm lược .
Multipart : là dữ liệu trùng
khớp của nhiều phần và có thể chấp nhận nhiều kiểu dữ liệu .
Text : dữ liệu nguyên bản, có
thể được miêu tả trong mỗi tập kí tự hoặc trong ngôn ngữ định dạng .
Video : một file video.
X_world : là kiểu dữ liệu thực
nghiệm cho world file .
2. CGI command line :
Trong môi trường UNIX, user có
thể gởi thông tin hoặc thực thi Shell Script trong một vùng gọi là
command line . Thông tin được nhập vào command line thường được thực thi
bằng một trình thông dịch . Command line thường được sử dụng để thi
hành 1 ISINDEX query như là một cách
đơn giản để thêm vào cách tìm kiếm liên kết tới tài liệu của bạn .
ISINDEX query là một giải pháp tương đối dễ dàng cho việc tìm kiếm
tài liệu.
Vài
server software cho phép bạn sử dụng thông số dòng lệnh trong phương
thức khác nữa là sử dụng exec command . Với exec command bạn có thể
trực tiếp thực thi một CGI script mà nó thi hành một action được chỉ
rõ, ví dụ như trả về một giá trị được thay thế vào trong document của
bạn. Exec command thông báo cho server để thực thi một dòng lệnh hoặc
1 script. Dữ liệu xuất của script được thay thế trong vị trí hiện hành
trước khi document được gởi tới client. Ðoạn mã HTML sau đây sử dụng
thông số dòng lệnh và nó gọi thực thi một Script có tên là daily-access :
<p> This page has been
accessed
<!-#exec
cmd="/usr/cgi-bin/daily_access" ->
times today.</p>
Script daily_access là một
script mà nó tăng thêm 1 vào một
count (đếm ) mỗi lần một trang được truy xuất trong một ngày, ví dụ
người khách thứ 25 trong ngày sẽ thấy dòng chữ sau :
This page has been accesssed 25 times today.
3. CGI Standard Input:
Hầu hết dữ liệu gởi
tới một Web server được sử dụng để thiết lập biến môi trường , nhưng
không phải tất cả đều thích hợp (một cách vừa vặn) trong một biến
môi trường. Khi một user submit một dữ liệu để được xử lý bằng một
CGI Script, dữ liệu đó được nhận như một URL_encoded search string (
chuỗi URL được mã hóa ) hoặc thông qua standard input stream (dòng dữ
liệu nhập chuẩn ). Server phải
được biết method được sử dụng để
submit dữ liệu đó để biết cách xử lý dữ liệu.
Việc gởi dữ liệu như standard
input là cách trực tiếp hay nhất để gởi dữ liệu. Server chỉ cần báo
cho gateway script có bao nhiêu tập 8-bit dữ liệu đọc từ standard input.
Script mở dòng dữ liệu nhập chuẩn và đọc số lượng đã được chỉ rõ
của dữ liệu . Trong khi URL_encoded search string quá dài có thể bị cắt bớt, dữ liệu gởi vào
bằng dòng dữ liệu nhập chuẩn sẽ không bị cắt bớt. Do đó dòng dữ
liệu nhập chuẩn là cách được ưu tiên hơn để gởi dữ liệu .
4. Form - HTML :
Bạn có thể nhận những thông tin hay dữ liệu đăng ký khi bạn
tạo những fill-out form. Dưới HTTP 1.0, có hai phương thức đăng ký
(submission method) cho form :
1.
Method GET của HTTP sử dụng URL_encoded search tring. Khi một
server nhận một URL_encoded search string, server đánh dấu trị của search
string tới biến QUERY_STRING.
2.
Method POST của HTTP sử dụng standard input stream. Khi server nhận
dữ liệu từ standard input stream, server đánh dấu trị được kết hợp với
chiều dài của input stream tới biến CONTENT_LENGHT .
Một ví dụ về Web document
chứa 1 form với 3 trường khóa :
NAME, ADDRESS, và
PHONE_NUMBER. Giả sử URL tới script là :
http://www.tvb.com/cgi-bin/survey.p1
và user trả lời như sau :
Sandy Brown
12 Sunny Lane WhoVille , USA
987-654-3210
Thông
tin đăng ký sử dụng method POST và GET được xem xét khác nhau bởi
server. Khi method GET được sử dụng, server thiết lập những biến môi
trường sau và sau đó gởi dữ liệu nhập vào script survey.p1 :
PATH=/bin:/usr/bin:/usr/etc:/usr/ucb
SERVER_SOFTWARE
= CERN/3.0
SERVER_NAME
= www.tvp.com
GATEWAY_INTERFACE
= CGI/1.1
SERVER_PROTOCOL
= HTTP/1.0
SERVER_PORT
= 80
REQUEST_METHOD
= GET
HTTP_ACCEPT
= text/plain, text/html, application/rtf,application/postsript, audio/basic,
audio/x-aiff, image/gif, image/jpeg, image/tiff, video/mpeg
PATH_INFO
=
PATH_TRANSLATED
=
SCRIPT_NAME
= /cgi-bin/survey.p1
QUERY_STRING
= NAME=Sancy+Brown&ADDRESS=12+Sunny+Lane+WhoVille, +USA
&PHONE_NUMBER=987-654-3210
REMOTE_HOST
=
REMOTE_ADDR
=
REMOTE_USER
=
AUTH_TYPE
=
CONTENT_TYPE
=
CONTENT_LENGTH
=
Khi method post được sử dụng,
server thiết lập những biến môi
trường sau đây sau đó gởi input tới
script survey.p1 :
PATH=/bin:/usr/bin:/usr/etc:/usr/ucb
SERVER_SOFTWARE
= CERN/3.0
SERVER_NAME
= www.tvp.com
GATEWAY_INTERFACE
= CGI/1.1
SERVER_PROTOCOL
= HTTP/1.0
SERVER_PORT
= 80
REQUEST_METHOD
= POST
HTTP_ACCEPT
= text/plain, text/html, application/rtf,application/postsript, audio/basic,
audio/x-aiff, image/gif, image/jpeg, image/tiff, video/mpeg
PATH_INFO
=
PATH_TRANSLATED
=
SCRIPT_NAME
= /cgi-bin/survey.p1
QUERY_STRING
=
REMOTE_HOST
=
REMOTE_ADDR
=
REMOTE_USER
=
AUTH_TYPE
=
CONTENT_TYPE
= application/x-www-form-urlencoded
CONTENT_LENGTH
= 81
Dữ liệu POST-submitted sau
đây được gởi tới gateway script
thông qua standard input stream :
NAME=Sandy+Brown&ADDRESS=12+Sunny+Lane+WhoVille,+USA&PHONE_NUMBER=987-654-3210
IV. Xuất dữ liệu từ CGI Script :
Sau khi script hoàn tất việc xử lý
input nó sẽ xuất output trở lại cho Server. Server sau đó sẽ gởi
output cho client. Thông thường output này là ở trong 1 form của một
HTTP response (thông tin gởi đáp lại) bao gồm1 header theo sau là một
khoảng trắng và một BODY. Trong khi CGI header của output được format
theo dạng chuẩn, BODY của output được format theo cách thức bạn chỉ định
trong header. Ví dụ, BODY có thể chứa 1 HTML document để máy client hiển thị cho người đọc.
Việc tạo dữ liệu xuất từ một CGI script thì
tương đối đơn giản. Tất cả những việc bạn phải làm là định dạng dữ
liệu xuất vào trong một header và body, xử dụng ngôn ngữ lập trình
mà bạn thích. Ví dụ nếu bạn muốn cript xuất một tài liệu HTML xử
dụng PERL thì như sau :
#!/usr/bin/perl
#tạo header với
khoảng trắng được thêm vào phiá sau header
print "Content-type:
text/html\n\n";
#đưa body vào dạng
HTML format
print <<"MAIN";
<HTML>
<HEAD><TITLE>Output
from Script</TITLE></HEAD>
<BODY>
<H1>Top
10 reason for using CGI</H1>
<P>10.
Customer feeback.</P>
<P>9.
Obtaning questionnaire and survey responses.</P>
<P>8.
Tracking visitor count .</P>
<P>7.
Automating searches.</P>
<P>6.
Creating easy database interfaces.</P>
<P>5.
Building gateways to other protocols.</P>
<P>4.
HTML 2.0 image maps.</P>
<P>3.
User authentication.</P>
<P>2.
On-line order processing.</P>
<P>1.
Generating documents on the fly.</P>
</BODY>
MAIN
Server xử lý dữ liệu xuất,
thiết lập biến môi trường, tạo một HTTP header, sau đó gởi dữ liệu
tới client. Ví dụ đây là những dòng thông báo trong HTTP header mà ta
có thể thấy trên một CERN Web server :
HTTP/1.0 302 Found
MINE-Version: 1.0
Server : CERN/3.0
Date :Monday, 4-Mar-96
23:59:59 HTS
Content-type:text/html
Content-length: 485
<HTML>
<HEAD><TITLE>Output
from Script</TITLE></HEAD>
<BODY>
<H1>Top
10 reason for using CGI</H1>
<P>10.
Customer feeback.</P>
<P>9.
Obtaning questionnaire and survey responses.</P>
<P>8.
Tracking visitor count .</P>
<P>7.
Automating searches.</P>
<P>6.
Creating easy database interfaces.</P>
<P>5.
Building gateways to other protocols.</P>
<P>4.
HTML 2.0 image maps.</P>
<P>3.
User authentication.</P>
<P>2.
On-line order processing.</P>
<P>1.
Generating documents on the fly.</P>
</BODY>
MAIN
*CGI HEADERS
CGI header chứa chỉ dẫn (directive) tới server.
Hiện thời có ba chỉ dẫn server hợp lệ :
Content-type
Location
Status
Một header có thể chứa một hoặc tất cả các
chỉ dẫn này. CGI script của bạn sẽ xuất những chỉ dẫn tới server.
Header luôn được theo sau bằng một khoảng trắng để phân biệt header với BODY.
a.Sử dụng
Content-Type trong CGI Headers :
Trường content_type trong một CGI header chỉ rõ MIME type của
dữ liệu được gởi trở lại cho client. Thường dữ liệu xuất từ một
script là một document đã được format, ví dụ như một HTML document. Bạn
có thể chỉ rõ kiểu dữ liệu trong header như sau :
Content-type : text/html
b.Sử dụng
Locations trong CGI headers :
Nếu dữ liệu xuất của Script
không là một document được tạo trong script đó. Bạn có thể tham khảo
bất kỳ document nào trên Web sử dụng trường Location. Trường Location
được sử dụng để tham khảo 1 file bằng URL. Server xử lý vị trí tham
khảo đến trực tiếp hoặc gián tiếp phụ thuộc vào vị trí của file.
Nếu server tìm thấy file cục bộ, nó sẽ gởi file tới client. Nếu không
thì server sẽ gián tiếp gởi tới
client bằng cách gởi URL tới client và client sẽ nhận được file. Bạn
có thể chỉ rõ một vị trí (location) trong Script như sau :
Location:http://www.typress.com/
c.Sử dụng
Status trong CGI Headers :
Trường Status được sử dụng để
gởi một Status Line tới server để chuyển tới Client . Mã Status được biểu diễn như một mã
three-digit theo sau bởi một chuỗi mà thông thường nó được dùng để
thông báo trạng thái sau khi gởi. Số đầu tiên của 1 mã Status cho
thấy các trạng thái như sau :
1xx chưa
cấp phát.
2xx thành
công.
3xx gởi
lại một lần nữa.
4xx Client
bị lỗi.
5xx Server
bị lỗi.
Nhiều mã Status được sử dụng bởi
server, mã Status mà CGI script gởi tới 1 client thông thường là mã
client error. Ví du,ï Script không thể tìm thấy 1 file và thay thế bằng
cách không trả lại gì cả, bạn chỉ rõ rằng Script xuất ra một mã
lỗi. Ðây là danh sách của các mã client error :
Status : 401 không được phép,
xác nhận không thành công. User không được phép truy xuất file phải
truy xuất lại.
Status : 403 bị cấm. Yêu cầu
không được chấp nhận, user không được phép truy xuất file.
Status : 404 không tìm thấy. Tài
nguyên được chỉ ra không thể tìm thấy.
Status : 405 method không được cho
phép. Method được sử dụng để submit không được cho phép.
V TÓM TẮT :
Common gateway interface đã tạo
cho chúng ta khả năng tạo ra những trang Web có tính tương tác cao với
người đọc Web và thêm vào đó là giúp cho người tạo Web những khả
năng tự động hóa trang Web của mình như cho phép nhập dữ liệu từ
clien vào server thông qua những fill-out form, database query, index
search, và tự động tạo ra những tài liệu, dữ liệu xuất cho người
đọc..
TÌM
HIỂU
HTML
[dth1] PHẦN I
NHỮNG
KHÁI NIỆM
I.HTML là gì ?
HTML(hyper text markup language)
ngôn ngữ đánh dấu siêu văn bản, nó giúp cho mọi người có thể tạo
ra những trang web cho riêng mình một cách dễ dàng. Nói một cách đơn
giản thì nó là một sự định dạng để báo cho Web browser làm thế nào
để hiển thị một trang Web. Những tài liệu thật sự chỉ là những trang
văn bản với những Tag (thẻ) đặc
biệt hoặc những đoạn mã để một Web browser biết làm thế nào để
thông dịch và hiển thị nó trên màn hình của bạn.
II . HTML chuẩn và các phiên bản mở
rộng :
Từ khi được tạo ra đến nay ngoài
những chuẩn html đã có, người ta
còn sử dụng thêm một số phần mở rộng của nó. Những phần mở rộng
này tăng cường thêm một số tính năng mới mà html chuẩn không có
nhưng đồng thời nó cũng tương thích hoàn toàn với những tính chất sẵn
có của HTML chuẩn.
Sau đây là một số những html chuẩn
và phần mở rộng của chúng.
* HTML 1.0
*HTML 2.0
*HTML3.0
*Netscape extensions (phần mở
rộng cho netscapes)
*Internet explorer extensions
(phần mở rộng cho internet explorer)
*Java extension (phần mở rộng
cho java)
PHẦN II
TẠO WEB VỚI HTML
I.Tạo văn
bản dạng web.
Một văn được định trong html dựa trên các thẻ.
các thẻ này sẽ định cấu trúc cho
văn bản, thẻ được viết dưới dạng
một cái tên trong dấu <
>.
vd. <h1>, <p>, <hr>,....
hầu hết các thẻ đều dùng theo cặp,
nó giúp cho trình duyệt phân biệt được mở đầu và kết thúc của một
phần tử hoặc một đoạn trong văn bản.
vd. <h1> : bắt đầu một đoạn văn bản
theo kiểu h1.
</h1>: kết thúc một đoạn văn
bản theo kiểu h1.
ở đây ta không phân biệt chữ hoa hay
chữ thường. Ngoài ra bạn cũng có thể định ra những ký tự đặc biệt
bằng cách mở đầu ký tự đặc biệt bằng dấu "&" , sau đó là là
ký hiệu và kết thúc bằng dấu ";". Khi trình duyệt thấy những ký tự
này, nó sẽ tự động thay những ký tự này bằng những ký hiệu tương
ứng và xuất ra màn hình.
II.Ðịnh cấu trúc cho văn bản .
Mọi văn bản html đều bắt đầu
bằng thẻ <html> và kết thúc
bằng thẻ </html> đây là điều bắt buộc. Một trang html còn phải bao gồm phần đầu (header) và phần thân (body). Phần
đầu đứng ngay sau thẻ <html>, bắt đầu và kết thúc bằng cặp thẻ
<head>, </head>, phần này có thể là tên hoặc từ khóa của
trang. Theo sau phần đầu là phần thân văn bản, được bao trong cặp thẻ
<body>, </body> bao gồm những đoạn văn bản hay những đối
tượng mà bạn muốn đưa lên trang web của bạn cho mọi người xem.
Sau đây làø phần khung
chính của một trang html
<html>
<head>
.
.
.
</head>
<body>
.
.
.
</body>
</html>
III.Thiết kế phần
header của trang html.
Phần đầu tiên của một văn bản
dạng html là header nó cung cấp những thông tin về văn bản cho web server. Mọi thông tin
có trong header đều được bao trong cặp thẻ <head>, </head>,
ngoài ra ta còn sử dụng được một số thẻ sau đây bên trong phần header.
<title> tên của văn bản.
<base> định ra url cơ sở cho
trang
<isindex> cung cấp cơ cấu tìm
kiếm browser.
<link> chỉ ra một liên kết
đến một trang html khác.
<meta> cho phép bạn đưa thêm
những thông tin đính kèm về văn bản.
<nextid> định ra những sự
định danh kế tiếp được tạo ra, chỉ được sử dụng bởi trình soạn thảo
html, browser không sử dụng thẻ này.
1.Tiêu đề của văn bản (title).
Phần tên của một văn bản được mở
đầu bằng thẻ <title> và kết thúc bằng thẻ </title>. Mỗi
trang html chỉ có một tên và số ký tự không được vượt quá 65. Tên
không cần có những cách định dạng
hay là đánh dấu đặc biệt, nó chỉ đơn thuần là những ký tự mã ascii.
Tên của một văn bản có thể được
tham khảo bởi người dùng nên nó phải rõ nghĩa, dễ hiểu, bao hàm
được ý nghĩa của toàn văn bản.
Phần title của văn bản được đưa vào
khung của một trang html như sau:
<html>
<head>
<title>
.....
</title>
</head>
2.Những liên kết cơ sở (base).
Thông thường, để truy xuất
file trên một server cục bộ bạn sử dụng một đường dẫn quan hệ
(relative path). Khi sử dụng đường dẫn quan hệ để định vị một trang
khác, có nghĩa là bạn đang định ra mối quan hệ của nó với trang hiện
thời. Mặc dù đường dẫn quan hệ là cách thông thường nhất để truy
xuất file, bạn vẫn có thể định một đường dẫn cơ sở cho tất cả
những liên kết quan hệ trong văn
bản của bạn. Sử dụng đường dẫn cơ sở, bạn có thể thông báo cho
trình duyệt định ra những quan hệ của tập tin vào một đường dẫn rõ
ràng và có thể chỉ đến một servser ở xa .
Thẻ <base> chỉ được dùng bên
trong phần head, và nó chỉ có một thuộc tính duy nhất là href.
vd:
<base href="http://tvp.com">
đường dẫn này sẽ thông báo cho trình
duyệt để trình duyệt thêm địa chỉ http://tvp.com vào tất cả những liên
kết trong văn bản. Ðịnh ra một đường dẫn cơ sở là rất tiện lợi, bạn
sẽ thấy điều đó khi văn bản của bạn có thể dùng được 2 sự định vị
khác nhau và bạn muốn liên kết chúng với văn bản như một sự
định vị rõ ràng .
3.<ISINDEX>.
Thẻ isindex được dùng để
tìm kiếm tài liệu, để kích hoạt một isindex query, người sử dụng phải
truy xuất một gateway script sinh ra văn bản html có chứa isindex đó.
Khi người dùng gửi những yêu cầu về thông tin dưới dạng câu hỏi,
một ulr (uniform resource locator) đặc biệt bao gồm đường dẫn đến script
nguồn và thông tin mà người dùng đã vào sẽ được trả về cho gateway
script xử lý.
4.<LINK>.
Trong phần header thẻ
<link> được dùng để định ra những mối quan hệ với các đối tượng
khác.
5.<META>.
Khi một trình ứng dụng
của client yêu cầu một tài liệu html, server thông thường sẽ gửi văn bản kèm với một header. Header
này là một phần của phần tử html head và nó chứa những thông tin
mà client cần hiểu tài liệu. Khi bạn không muốn dùng header chuẩn này
hoặc bạn muốn tạo header cho riêng
bạn hay bạn muốn cung cấp thông tin cho client mà không sử dụng những
phần tử chuẩn của html thì bạn có thể dùng thẻ <meta>, khi đó
bạn có thể bỏ qua sự thêm vào của web server hoặc là thay đổi thông
tin trong phần head của văn bản. Server lấy lại văn bản sẽ bao gồm
những thông tin mà bạn thêm vào trong header để client sử dụng .
thẻ <meta> có 3 thuộc tính
-Content
-Http_equiv
-Name
6.<NEXTID>.
Thẻ này chỉ đươc html
editor sử dụng, trình duyệt không dùng thẻ <nextid>. Thẻ này chỉ
có một thuộc tính là N
IV.Thiết kế phần thân
HTML.
Phần chính của một văn bản dạng
web là body. Mọi thứ có trong phần thân văn bản đều nằm giữa cặp
thẻ <body> và </body>. Có rất nhiều thẻ của html có
thể sử dụng trong phần này. Những
khóa chính để cấu thành một văn bản html cơ sở là heading và paragraphs.
Phần lớn những văn bản cơ sở đều sử dụng những lời ghi chú, ký tự
đặc biệt và các đoạn đề mục như là trích dẫn hay là địa chỉ. Sau đây
là 5 thành phần chính của thân văn bản html.
.Headings
.Paragraphs.
.Comments
.Special characters
.Additional text elements
1.Tạo tiêu đề .
Sử dụng tiêu đề, bạn sẽ
dễ dàng tổ chức ý tưởng của mình.
Html cho phép bạn tạo ra những tiêu đề ở 6 mức kích cỡ chữ khác
nhau, từ <h1> đến <h6>.
Giống như các thẻ khác, các thẻ tiêu đề cũng được sử dụng theo
cặp.
vd: <h1> tiêu đề </h1>
.....
<h6>tiêu đề </h6>
2.Tạo một đoạn văn bản.
Html dùng thẻ <p>
để phân chia những đoạn văn bản.
Khi trình duyệt thấy thẻ <p>, nó sẽ kết thúc dòng hiện tại,
thêm một hàng trắng trước khi chèn vào đoạn ký tự hay những đối tượng
theo sau thẻ <p>. Bạn có thể sử dụng hay bỏ đi thẻ kết thúc
</p>.
3.Thêm lời ghi chú vào
văn bản.
Những đoạn ghi chú sẽ được
điền vào giữa cặp thẻ "<!_" và
"_>", nó giúp cho bạn dễ dàng thay đổi hoặc sửa chữa văn
bản của bạn.
4.Sử dụng những ký tự
đặc biệt.
Những ký tự đặc biệt còn được gọi là những thực
thể . Trong html có 2 loại thực thể là thực thể ký tự và thực thể
số. Thực thể ký tự để định nghĩa những ký tự đặc biệt.
vd: { định ra nét phân cách
dọc "|"
® định ra dấu mũi tên 2
đầu "<------>"
*Một số phần tử dạng ký tự khác.
khi thêm vào heading, paragraph và
những ký tự đặc biệt, một số văn bản web còn bao gồm những phần
tử văn bản khác như
-Addresses
-Blockquotes
-Preformatted text
4.1.Addresses.
Thẻ <adresses> được
dùng để chỉ rõ một đoạn văn bản có địa chỉ hoặc ký hiệu một trang
<address> ....</address>
4.2.Blockquotes
Thẻ blockquotes được dùng
để chỉ ra một đoạn của văn bản có một đoạn trích dẫn.
<blockquotes> ...... </blockquotes>
4.3.Prefprmatted
text.
Thẻ <pre> cho phép bạn
định dạng đoạn văn bản bên trong theo cách định dạng của các ký tự
mã ascii .
<pre> .......</pre>
V.Thêm vào những đặc trưng cho trang web
:
Những nét đặc trưng bạn thêm vào cho
văn bản sẽ giúp cho văn bản của bạn trở nên sáng sủa và đẹp mắt,
những nét đặc trưng bạn có thể dùng như dấu ngắt hàng, đường kẻ
ngang... Ðể tăng thêm khả năng giao tiếp cho trang của bạn, bạn có
thể tạo những liên kết với các
văn bản khác trên web hoặc tạo ra những liên kết cục bộ để
hướng dẫn người sử dụng trang của bạn.
1.Sử dụng dấu ngắt hàng
và đường phân cách.
Dấu ngắt hàng được dùng
là thẻ <br>, nó báo cho trình duyệt sang hàng mới khi thấy nó.
Ðường kẻ ngang được dùng
là thẻ <hr>, nó báo cho trình duyệt tạo ra một đường kẻ ngang
văn bản khi thấy nó .
2.Trang trí cho văn bản.
Ngoài những mẫu chữ được
tạo ra từ các mức của phần heading, html còn cung cấp cho bạn một số
mẫu chữ khác, để sử dụng một mẫu chữ nào đó thì bạn phải gọi thẻ
mẫu tương ứng.
Có 2 loại mẫu chữ
*Physical styles
Thông báo cho trình duyệt cách
định dạng các ký tự bên trong nó để xuất ra màn hình. Html version 2.0
cho chúng ta 4 loại chữ khác nhau.
<B> chữ đậm</B>
<I>chữ in
nghiêng</I>
<U>chữ có gạch
dưới</U>
<TI> chữ bình
thường</TI>
Bạn có thể sử dụng những thẻ
trên lồng vào những thẻ khác hoặc lồng vào nhau.
*Logical styles
Loại này không bắt buộc trình
duyệt phải định dạng đoạn văn bản bên trong theo cách theo cách nó chỉ định
mà nó cho phép trình duyệt định dạng theo sự theo sự định dạng của
cấu trúc trình duyệt .
HTML 2.0 cung cấp cho ta 7 logical style
.Tất cả những thẻ được cung cấp đều sử dụng theo cặp.
+<EM>:báo cho trình duyệt
đây là đoạn cần nhấn mạnh, thường được in nghiêng.
<EM>........</EM>
+<STRONG>
<STRONG> .......</STRONG>
+<CITE>:báo cho trình
duyệt đây là đoạn trích dẫn, thường được in nghiêng.
<CITE>
................</CITE>
+<CODE>:thông báo đây
là một đoạn mã máy hoặc là một đoạn chương trình ví dụ, thường được
in ở chế độ bình thường (font courie).
<CODE>
................</CODE>
+<KBD>: thông báo người
dùng có thể nhập từ bàn phím, được in bình thường (font courie).
<KBD>
.................</KBD>
+<SAMP>: thông báo đây
là một mẫu các ký tự thường, được in theo font courie.
<SAMP>
..............</SAMP>
+<VAR> :thông báo tên
của biến được dùng trong chương trình máy, được in nghiêng.
<VAR>.........</VAR>
3.Sử dụng liên kết.
Liên kết giúp cho trang
web của bạn có thể giao tiếp với bên ngoài. Liên kết hoạt động như một con trỏ, chỉ đến các
tài nguyên hoặc những file khác trên mạng. Sử dụng liên kết, bạn
có thể kết nối văn bản, hình ảnh với trang của bạn, nét đặc trưng
của liên kết là nó có thể định vị văn bản, hình ảnh hoặc các đối tượng
ở mọi nơi trên mạng và bạn cũng có thể liên với các đối tượng
không nằm trên web server cục bộ của bạn, liên kết đó được gọi là
"Siêu Liên Kết".
Cách cơ bản để tạo một liên kết là
<A HREF = "URL"> đối tượng mà người
dùng có thể click vào </A>
Thẻ mở đầu "<A " chứa địa chỉ của
đối tượng mà bạn muốn liên kết tới .Anchor có thề là đoạn văn,
hình ảnh hoặc cả 2, là nơi mà người dùng có thể click vào để bắt đầu
một liên kết .
4.Sử dụng đường dẫn quan
hệ trong liên kết
Bạn có thể truy xuất
những file cục bộ (những file nằm trên web server cục bộ ) bằng
cách sử dụng đường dẫn quan hệ .URLs cùng với những đường dẫn file
quan hệ nói chung thường không đặt tên giao thức hay web server trong
liên kết. Ðiều này là vì khi bạn dùng đường dẫn liên kết để định vị
một file thì có nghĩa là bạn đang định vị file đó trong mối quan hệ với
file hiện hành. Cho phép truy cập một file dựa trên mối quan hệ với
file hiện hành có nghĩa là bạn đang đã sẵn sàng truy cập đến một
file trên server đặc biệt.
Bạn có thể sử dụng loại
đường dẫn trên theo 3 cách sau.
+Một file trong thư mục hiên
hành.
+Một
file trong thư mục cha của thư mục hiện hành.
+Một file trong thư mục con của
thư mục hiện hành.
5.Sử dụng đường dẫn
trực tiếp trong liên kết.
Một cách truy xuất file khác được gọi là truy xuất trực
tiếp. Bạn có thể truy xuất trực tiếp một file bằng cách chỉ ra đường
dẫn hoàn chỉnh đến file mà bạn muốn truy xuất. Bạn phải chỉ rõ giao
thức được dùng để truy xuất file trực tiếp trên web server không cục
bộ, mà
không cần làm như vậy với các file trên server cục bộ.
Sau đây là 2 giải pháp để truy
cập file trực tiếp .
+Chỉ rõ đường dẫn đầy đủ đến
file bao gồm cả giaothức truyền file.
+Ðịnh ra đường dẫn đến file mà
không định giao thức truyền file.
6.Sử dụng những liên
kết bên trong văn bản.
Sử dụng những liên kết nội sẽ làm cho trang của bạn trở nên
năng động hơn, khi bạn sử dụng liên kết nội thì bạn đã cung cấp cho
người dùng những cách để truy xuất
văn bản một cách nhanh chóng.
Việc tạo ra một liên kết
nội diễn ra qua 2 bước.
+Trước hết , bạn phải định ra một
liên kết với một từ khóa, sử dụng những thẻ cố định trong một khung
thông thường đến những liên kết bạn thấy.
<A
HREF = "# từ khóa "> đối
tượng có thể click chuột <A>
+Bạn phải đặt nhãn cho sự định vị
bên trong trang của mình nơi mà bạn cho phép người đọc có thể chuyển tới được.
Việc này có thể làm bằng cách
định nhãn cho thẻ
<A
NAME = "từ khóa"> với từ khóa bạn chọn trong khung.
Sử dụng liên kết nội, bạn có
thể tạo ra bảng chỉ mục cho văn bản của mình. Bạn cũng có thể sử
dụng liên kết nội kết hợp với đường dẫn quan hệ hay đường dẫn trực
tiếp.
7.Sử dụng danh sách
(list).
Danh sách là một trong
những công cụ hữu dụng trong việc tạo ra bảng công cụ. Danh sách
giúp bạn phân biệt rõ ràng và thêm vào vẻ thẩm mỹ cho trang của
bạn. Bạn có thể dùng những list để làm tăng sự chú ý của người
đọc.
Có
các loại list sau :
+Bulleted lists.
+Numbered lists.
+Glossary lists
7.1-Bulleted
lists.
Mở đầu và kết thúc bằng
thẻ <UL> ..</UL> , bên trong
có thể sử dụng thêm thẻ <LI>
7.2-Glorssary
lists.
Ðược gọi là sự định nghĩa
danh sách .Các thẻ dược dùng là <DL> ..</DL>,và có 2 thành
phần.
-Từ khóa gọi tên của
sự định danh, dùng thẻ <DT>
-Sự định danh gọi dữ
liệu được định danh, dùng thẻ<DD>
7.3.Number
lists.
Còn được gọi là danh sách
có thứ tự. Nó sử dụng thẻ <OL>...</OL>, bên trong có thể dùng thẻ <LI> cho từng đề
mục. Khi trình duyệt thấy thẻ <LI>, nó sẽ làm 3 việc sau.
-Bắt đầu hàng mới.
-Phân chia đoạn text của
danh sách đề mục.
-Ðặt những số thích hợp
hoặc những ký tự vào phía trước của danh sách các đề mục .
VI. Sử dụng những
Alternate Protocol trong văn bản Web.
Trong
việc tạo web, HTTP không phải là giao thức duy nhất mà bạn có
thể tham khảo, bạn có thể tham
khảo một số giao thức khác. Sau đây là một số cách sử dụng giao
thức trong văn bản của bạn.
* FTP
* Gopher
* Mailto
* NNTP and News
*WAIS.
1.FTP
Có rất nhiều file hữu ích ở
các FTP sites trên toàn thế giới.Trang của bạn có thể có những liên
kết đem về và sử dụng "giao thức
truyền file". Khung làm việc để sử dụng FTP là
<A HREF = "ftp://host/path"> anchor text
</A>
2.Gopher
Thông tin về Gopher được đưa ra
cho người sử dụng như là một trình điều khiển. Bạn có thể cho phép
người sử dụng truy xuất gopher file bằng cách sử dụng một đoạn siêu
văn bản tham khảo.
<A
HREF = "gopher://host/path"> anchor text </a>
3.Mailto.
Bạn có thể sử dụng loại liên kết đặc biệt này để
tạo một mối nối đến chương trình cho phép gửi e_mail .
vd:
<A HREF =
"mailto:william@tvp.com"> send e-mail
to the publisher </A>
4.NNTP và News.
Trongvăn bản web, bạn có thể tham khảo nhiều nhóm
hội thảo trên internet bằng 2 cách
-Sử dụng máy chủ thông tin cục bộ của
người đọc
-Theo đường Network News
Transfer Protocol (NNTP)
Ðể sử dụng máy thông tin
chủ cục bộ cho việc tham khảo một nhóm thông tin, bạn chỉ cần chỉ ra
tên nhóm.
news:tên nhóm thông tin mà
bạn muốn tham khảo.
<A
HREF = "nntp://new:alt.books.reviews"> alt.books.reviews </A>
dùng nntp
<A
HREF = "nntp://news.aloha.com/altbook.reviews"> alt.books.reviews
</A>
5.Telnet.
Sử dụng telnet , bạn có thể
cho phép người đọc truy xuất những dịch vụ trên một host ở xa . Trong
hộp telnet, người đọc có thể đưa vào dòng lệnh tại dấu nhắc.
<A HREF = "telnet://tvp.com"> telnet
</A>
6.WAIS.
Bạn có thể tham khảo bảng chỉ mục cơ sở dữ liệu
trong một hệ thống thông tin rộng lớn bằng cách sử dụng WAIS URLs.
<A HREF = "wais://tvp.com/wwwdata"> search
our www data base </A>.
________o0o__________
CHƯƠNG II:
FORM
HTML FORM
I.Giới thiệu .
Khi muốn giao tiếp giữa HTML
và CGI script thì bạn không thể không biết đến form, form là công cụ
phổ biến nhất để chuyển dữ liệu từ HTML đến CGI script (client lên
server). Thông thường, khi khi viết một script, người ta thiết kế một
FORM sao cho nó cung cấp đầy đủ những thông tin mà script cần để xử
lý.
Sau
đây chúng ta sẽ tìm hiểu về FORM cũng như cách liên kết của
nó với script.
II.Cấu trúc của một
FORM.
Một FORM được mở đầu bằng thẻ
<FORM..................> và kết thúc bằng thẻ </FORM>.
Trong FORM
thường có
-Thuộc tính : form thường có 3
thuộc tính, 3 thuộc tính này đều
nằm trong thẻ FORM mở đầu của một FORM : action, method, enctype.
-Các thẻ được dùng trong form :
input, select, textarea, hn, p, hr, dir, dl, menu, ol, ul, address, blockquote,
[isindex], pre.
-FORM : có 3 thành phần chính
:TEXTAREA, SELECT, INPUT.
-FORM có thể được dùng trong các thẻ : blockquote, body, dd, li.
1.Các thuộc tính:
Khi tạo form, công việc quan
trọng đầu tiên là xác định thuộc tính của nó. Trong 3 thuộc tính của
form, thuộc tính Action là không thể thiếu.
-Action="URL" : URL chỉ đến script mà
form sử dụng. Ngoài ra nó cũng có thể là một mailto url, khi đó nội
dung của form sẽ được mail đến địa chỉ trong url.
-Method="Get" or "Post" :chỉ ra method
là Post hay Get, Get là method mặc định.
-Enctype="Mime_type":chỉ ra loại dữ
liệu sẽ gởi đi. Giá trị mặc định là application/x-www-form-urlencode. Có
một số kiểu MIME_type cơ bản, các kiểu này đã được chúng tôi giới
thiệu trong phần các
kiểu MIME_type cơ bản, ngoài ra còn có một số kiểu MIME_type khác
nữa, ví dụ như kiểu "multipart/form-data" mà nó được
những trình duyệt về sau này hỗ
trợ. Nhờ có Mime_type này mà chúng ta có thể dùng web để upload file
lên server.
Trong một trang, bạn có thể sử dụng nhiều
form nhưng không được lồng chúng vào nhau.
2.Các thành phần chính
của một form.
Một form, thông thường có 3
thành phần chính:
- Textarea
-Select
-Input
2.1.Textarea.
Ðược dùng bằng cặp thẻ <Textarea> ..............</Textarea>.Bên trong
chứa các ký tự, thẻ này được dùng lồng vào trong form.
Các thuộc tính của textarea
-Name: Ðịnh nghĩa tên của
thành phần, thuộc tính này luôn luôn phải có .
-Rows: Cho biết số hàng của hộp văn bản.
-Cols : Cho
biết số cột của văn bản.
-Wrap: Chỉ ra cách xử lý word_wraping (canh
chiều dài của dòng văn bản theo kích thước của hộp văn bản) trong
hộp thoại. Nếu Wrap="off", chức năng word_wraping bị cấm. Nếu
wrap="vitual", chức năng này được bật lên, khi bạn gõ văn bản vào,
bạn sẽ thấy con trỏ tự động xuống hàng mỗi khi nó chạy đến biên
của hộp văn bản, ký tự newline (0A
hex) tự động được thêm vào nhưng không được gửi đi cùng với form.
Nếu Wrap="physical", chức năng này cũng được bật và hoạt động như
trường hợp thứ 2, nhưng ký tự
newline sẽ được gửi đi cùng với form. Thuộc tính này chỉ có tác
dụng đối với những browser hỗ trợ html 3.0 về sau.
Văn bản nằm giữa hai thẻ
<Textarea>và </Textarea>sẽ được thể hiện như đoạn văn bản
mặc định trong vùng dữ liệu .
vd:
<Textarea> name="comments" rows="4" cols="40">
...
</Textarea>.
3.Select
Ðược dùng với cặp thẻ
<Select>...</Select >, cặp thẻ này có thể lồng trong form hay
bất kỳ thành phần nào của form ngoại trừ Textarea và Select.
Select có những thuợc tính sau
-Name : tên của thành phần.
-Size : cho biết số phần tử sẽ hiển thị,
giá trị mặc định là 1, do đó danh sách lựa chọn thường được thể hiện
dưới dạng một pop-up menu.
-Multiple:Nếu thuộc tính này
được thiết lập, user có thể chọn cùng lúc nhiều phần tử, ngược
lại, user chỉ có thể chọn được một phần tử mà thôi
Thuộc tính Size có thể không có .
Khi
sử dụng Select, bạn có thể dùng thêm Option
<Option>............</Option>
Bên trong chứa các ký tự , có thể
được sử dụng lồng vào Select.
Các thuộc tính :
-Disable : đánh một chọn lựa
bị cấm. Khi hiển thị, chọn lựa này sẽ bị che mờ
Disable
chỉ được hỗ trợ bởi các browser có hỗ trợ HTML 3..
-Selected : đánh dấu chọn
lựa này đã được chọn, nếu thuộc tính Multiple được bật trong select,
bạn có thể đánh dấu Selected nhiều chọn lựa cùng lúc. Nó thường
được dùng để đánh dấu các lựa chọn mặc định.
-Value : chỉ ra giá trị được
gán cho lựa chọn, nếu không có thì nội dung của thư mục option sẽ được gửi đi thay cho value.
4.Input.
Mở đầu bằng thẻ <Input>, thẻ
này có thể dùng trong bất cứ thành phần nào khác của form ngoại
trừ textarea và select.
Các thuộc tính :
-Align : có thể là một trong 3
giá trị top, middle , bottom dùng để canh lề ảnh với các văn bản xung
quanh, thuộc tính này chỉ có ý nghĩa với Type="image" .
-Name : gán tên biến cho dữ
liệu của thành phần này. Giá trị của thuộc tính do user lựa chọn .
-Type : định ra một trong những
giá trị sau checkbox, hidden, image, password, radio, reset, submit, text, file.
-Checked : chỉ ra một nút radio,
hay một checkbox có được chọn hay không.
-Maxlength : chỉ ra chiều dài
tối đa mà hộp thoại văn bản có thể chứa , thuộc tính này chỉ có ý
nghĩa với input có type="text" hay type="password".
-Size : chỉ ra kích thước thực
sự của hộp thoại văn bản.
III.Multipart Message
Theo yêu cầu của chương trình thì
chúng ta phải đưa một file qua form lên server. Các trình duyệt từ các
version sau ngoài MIME_type cơ bản còn cung cấp cho chúng ta các
MIME-type như Multipart/x-mixed-replace hay Multipart/form-data, đó là các
kiểu dữ liệu truyền thông đặc biệt. Trong chương này, chúng ta cũng
gặp phải một loại INPUT của Form
là "file", chỉ sử dụng được với ENCTYPE là
Multipart/form-data. Vậy chúng ta thử tìm hiểu xem một Multipart Message
có cấu trúc như thế nào.
Multipart Message là một message có
nhiều phần mà mỗi phần là một message và được gọi là mutipart/mixed
message. Các phần trong message cách nhau bằng một biên gọi là
boundery, boundery này phải được khai báo trong field Content-type của
header, dạng khai báo như sau :
Content-type: multipart/mixed;
boundery=randomstring
Trong
đó randomstring là một chuỗi ký tự bất kỳ.
Mỗi phần trong message được đánh dấu
bằng chuỗi --randomstring. Trong từng phần sẽ có dòng khai báo loại
dữ liệu nó chứa. Kế dòng khai báo
này phải là một dòng trống chỉ chứa cặp ký tự CR-LF để đánh dấu
đã chấm dứt phần header và bắt đầu phần dữ liệu.
Kết thúc phần cuối cùng cũng là
kết thúc của message, nó được đánh dấu bằng chuỗi ký tự
--randomstring--.
Dưới đây là ví dụ khuôn mẫu
của một multipart message :
MIME-Version: 1.0
CONTENT-type: multipart/mixed; boundery=23xx1211
[CR-LF]
--23xx1211
Content-type: text/html
[CR-LF]
.. Nội dung tài liệu html ..
--23xx1211
Content-type: audio/aiff
[CR-LF]
.. Nội dung âm thanh ..
--23xx1211—
Ðây chỉ là một ví dụ đơn giản,
message gồm hai phần, phần thứ nhất là một file văn bản dạng HTML,
phần thứ hai là một file âm thanh dạng AIFF.
Mô
hình Multipart Message này được Netscape ứng dụng phát triển thành hai
MIME-type khác là Multipart/x-mixed-replace và Multipart/form-data.
Multipart/form-data được phát triển để hỗ trợ cho việc đẩy dữ liệu
các Form phức tạp, bao gồm cả các file ở máy Client lên Server.
Như trong phần phân tích
chúng ta đã nói, hệ thống của chúng ta ngoài những giao diện để giao
tiếp với người sử dụng còn những chương trình gọi là script nằm trên
server dùng để xử lý các yêu cầu mà người sử dụng đưa vào từ các
giao diện. Theo yêu cầu của đề thì những chương trình đó chúng tôi sẽ
viết bằng ngôn ngữ PERL.
Sau đây chúng tôi xin được
giới thiệu về ngôn ngữ này.Tuy nhiên, do thời gian có hạn nên những
điều chúng tôi trình bày trong chương này không phải là đầy đủ mà
chỉ nhằm đưa ra một số khái niệm màchúng tôi cho là cần thiết về
ngôn ngữ này.
A.Các khái niệm ban đầu.
Perl viết tắt của
Practical-Extraction and Report- Language là một ngôn ngữ lập trình do
Larry Wall tạo ra với mục đích chung quy là tạo ra những bản báo cáo
một cách nhanh chóng và dễ dàng. Do có nhiều toán tử cũng như hàm
để hỗ trợ riêng cho xử lý text nên Perl khác biệt với các ngôn ngữ
khác là có tính chất xử lý text rất mạnh, có thể xử lý dễ dàng
những tác vụ giống như C hoặc UNIX shell thường làm trong việc
viết một Script nhưng có thể ngắn gọn và đơn giản hơn. Không giống
như các trình biên dịch C hay C++, Perl là một trình thông dịch .
B.Chi tiết
Vì là một ngôn ngữ lập trình cho
nên Perl cũng có đầy đủ các công cụ hỗ trợ cho nó như tất cả các
ngôn ngữ lập trình khác như :biến,
dãy, danh sách, cấu trúc điều khiển ..v.v..
Trong phần này, chúng ta sẽ tìm hiểu về
những công cụ sau :
-Scalar data
-Dãy và danh sách dữ liệu
-Cấu trúc điều khiển
-Associative array
-Regular expressions
-Hàm
-Filehandles
-File kiểm tra
-Ðịnh dạng
I.Scalar data
Scalar data là từ chỉ một kiểu dữ
liệu bao gồm cả số lẫn chuỗi ký tự, Perl không phân biệt 2 loại dữ
liệu trên .
Biến vô hướng được sử dụng với
các toán tử. Sự vận dụng các biến vô hướng này với các toán tử
sẽ sinh ra những giá trị vô hướng. Bạn có thể đọc các giá trị vô
hướng này từ các file chứa nó
cũng như có thể ghi chúng vào các file đích .
1.Floats , Integer, Literals.
Khi làm việc với số, ta nhận
thấy có một số các số được viết khác nhau như 4 , 2.5, -3.453e32. Trong ngôn ngữ Perl,
các số được chia thành 2 dạng :
-Số nguyên
(integers).
-Số thực (floats).
Trong Perl thì số có giá trị là
kiểu integer còn ngược lại là float, Perl xem cả integer và float đều
là dạng literal. Khi thực thi chương trình thì một giá trị của một biến
sẽ được lưu ở kiểu literal.
1.1.Integers.
Số nguyên được biểu diễn
dựa trên các ký hiệu quen thuộc :
18
-32
100000324.
nhưng nên lưu ý là bạn không thể
bắt đầu một số integer bằng số "0
" vì Perl không thể phân biệt số trong hệ thập lục phân và hệ thập
phân trong trường hợp cả 2 đều bắt đầu
bằng số "0" .
1.2.Chuỗi ký tự.
Những ký tự được dùng để
tạo thành những chuỗi ký tự, bao gồm 8 bit dữ liệu. Trong Perl, ta có
một bộ 256 ký tự đã được định nghĩa.
Khả năng xử lý chuỗi của
Perl bất chấp những ký tự đã tạo thành đã trở thành điểm mạnh của
Perl khi ứng dụng nó để lập trình CGI.
Trong Perl, có 2 loại chuỗi
ta cần lưu ý là chuỗi trong dấu ngoặc đơn và loại chuỗi trong dấu
ngoặc kép.
1.2.1.Loại
chuỗi trong dấu ngoặc đơn .
Một chuỗi được đặt trong dấu ngoặc đơn như
‘hello’ được gọi là chuỗi ngoặc đơn. Cặp dấu này sẽ chỉ cho Perl biết
đâu là bắt đầu và kết thúc của
một chuỗi. Nếu bạn muốn đặt những
dấu ngoặc đơn trong một chuỗi, bạn phải đặt trước các dấu đó những dấu "\" và nếu bạn
muốn đặt những dấu "\" vào trong
chuỗi thì bạn cũng phải đặt thêm vào trước chúng những dấu "\".
1.2.2.Loại
chuỗi trong dấu ngoặc kép.
Một chuỗi được đặt
giữa cặp dấu ngoặc kép như "hello" được gọi là chuỗi ngoặc kép.
Trong chuỗi ngoặc kép thì dấu "\" được dùng để chỉ ra một số các ký
tự điều khiển .Ví dụ như :
"hello!\n"-sau khi chuỗi hello
được đưa ra thì những gì sau nó sẽ được biểu diễn trên một hàng mới
..v..v.
Sau đây là một số những ký
tự điều khiển thường dùng.
\n |
bắt
đầu một hàng mới |
\r |
dấu
hiệu trở lại |
\t |
chứa
ra một khoảng trắng |
\b |
cách
ra một ký tự |
\v |
chừa
ra một khoảng trắng theo chiều dọc |
\a |
báo
chuông |
\e |
dấu
hiệu thoát |
2.Toán tử.
Trong Perl, một toán tử tạo nên một giá trị
mới gọi là kết quả. Các toán tử trong Perl có thể làm việc với cả
số lẫn chữ và độ ưu tiên cho các toán tử trong Perl cũng được xét
bình thường như trong các ngôn ngữ khác.
2.1.Toán
tử số học.
Những toán tử số trong Perl có
rất nhiều công dụng, nhưng cũng giống như các ngôn ngữ khác, Perl
cũng sử dụng những ký hiệu đặc biệt đã được quy định để thể hiện
các toán tử. Một toán tử sẽ thực hiện hành vi của nó trên các số
được thể hiện bằng giá trị nguyên (không phải giá trị thực ) và sẽ trả về giá trị theo nội dung phép tính
đó.
vd.
25%4
phép tính trên sẽ trả về giá
trị là 1.
Sau đây là bảng tham khảo một số
toán tử .
Toán
tử |
Tác
vụ |
Ví
dụ |
+ - * / % == >= > != < <= |
cộng trừ nhân chia môđun bằng lớn
hơn hay bằng lớn
hơn không
bằng nhỏ
hơn nhỏ
hơn hay bằng |
1+2=3 1-2=-1 2*2=4 4/2=2 2.3/3.2=0 2==2 3>=2 4>2 2!=1 1<2 2<=3 |
2.2.Toán tử chuỗi.
Ðây là những toán tử làm
cùng công việc với những toán tử số học, nhưng nó không dùng những
ký tự đặc biệt để thể hiện toán tử, mà nó sử dụng những ký tự
để làm việc này.
Sau đây là một số toán tử
chuỗi .
Toán
tử |
Hành
vi |
ví
dụ |
. eq ne lt gt le ge x |
Nối Bằng Không
bằng Nhỏ
hơn Lớn
hơn Nhỏ
hơn hay bằng Lớn
hơn hay bằng Lập
lại chuỗi |
"số"
. "một"="số một" "njk"
eq "njk" "njk"
ne "hgf" "30"
lt "7" "50"
gt "300" "ten"
le "ten" "hoang"
ge "hoang" "hai"
x 2="haihai" |
II.Scalar
variable.
Trong khi một giá trị vô hướng
(scalar) có thể thay đổi trong khi chương trình thực thi, thì một biến
vô hướng không hề thay đổi. Tại một thời điểm một biến vô hướng
chỉ có thể có một giá trị, nhưng giá trị đó có thể thay đổi theo sự
đòi hỏi của chương trình. Một biến vô hướng sẽ có kiểu định dạng
sau.
$tên_biến
một tên biến được kết thúc bằng
khoảng trắng. Trong tên biến, vấn đế về chữ thường, chữ hoa là rất quan trọng.
-ví dụ
: biến %JAZZ là khác với biến $Jazz cũng như khác với biến
$jazz
Khi chọn tên cho một biến, ta nên
chọn một tên sao cho sáng sủa, và nói lên được ý nghĩa, công dụng
của biến vì việc lựa chọn những tên biến theo tiêu chuẩn trên sẽ
giúp cho những người tham khảo chương trình của chúng ta hoặc là chính
chúng ta sau này khi muốn đọc lại chương trình được dễ dàng.
1.Toán tử Chop.
Toán tử này sẽ lấy một
biến, bỏ đi ký tự cuối cùng và sau đó trả lại biến đã xử lý.
Toán tử này được sử dụng nhiều trong những chương trình có sự tìm
kiếm hoặc so sánh các chuỗi với nhau.
chop( ).
2.Những chuỗi có chứa
biến .
Khi đọc thấy một chuỗi trong
ngoặc kép, Perl sẽ tìm trong chuỗi đó xem có biến hay không. Nếu tìm
thấy biến trong chuỗi ngoặc kép thì khi xuất chuỗi đó ra màn hình Perl sẽ thay
tên biến đó bằng giá trị của nó.
ví dụ:
$ten= "A";
$ho_ten= "le van $ten";
sau
2 phép khai báo biến trên, khi xuất ra biến $ho_ten, ta sẽ được chuỗi
"le van A";
nếu
bạn muốn xuất tên của một biến mà không muốn xuất giá trị của nó
thì bạn có 2 cách : hoặc là bạn để biến đó trong ngoặc đơn hoặc là
bạn phải đặt một dấu "\" trước tên biến không muốn lấy giá trị.
ví
dụ:
$ten= "A";
$ho_ten= "le van ".’ $ten’;
hay $ho_ten ="le van \$ten"
sau 2 phép gán trên thì ta sẽ
thu được biến $ho_ten khi xuất ra là
"le van $ten"
3.Ðầu vào chuẩn
<STDIN>.
Trong Perl có một biến đặc
biệt được gọi là đầu vào chuẩn hoặc là <STDIN>.Thực chất nó
mang nhiều ý nghĩa hơn là ý nghĩa của một biến, nó là một
filehandle.Trong Perl, ngoài <STDIN> ra, bạn còn có thể sử dụng
một số filehandle khác như đầu ra chuẩn hay <STDOUT>, chuẩn lỗi
hay <STDERR>. Filehandle là một cách cho phép Perl nhập / xuất
cũng như tạo những kết nối giữa một chương trình đang chạy với một
user. Một user có thể là một người hay là một quá trình nào khác.
4.Toán tử print.
Toán tử này cho phép bạn
sử dụng các giá trị và các biến. Khi bạn đặt những dữ liệu bạn
cần vào trong script của bạn thì bạn cũng có thể lấy chúng ra. Các
giá trị có thể thay đổi bên trong script của bạn trước khi bạn xuất
nó ra một nơi được chỉ định, có thể là một script khác, một file ,
máy in, địa chỉ email hay màn hình người sử dụng.
Chúng ta cũng có thể sử
dụng <STDOUT> và toán tử print có liên kết với <STDOUT> để
xuất dữ liệu. Perl sử dụng hàm print để đặt dữ liệu vào nơi mong
muốn. Hàm print sẽ lấy một giá trị và đặt giá trị đó vào
<STDOUT>. Hàm print cũng có
thể được sử dụng để di chuyển một dãy danh sách các giá trị. Từ
<STDOUT>, dữ liệu có thể được gửi đến những nơi được chỉ định
như file, máy in, .v..v..
5.Giá
trị không được định nghĩa.
Nếu một biến mà không được
chỉ định một giá trị nào thì nó không cần thiết cho script của bạn.
Perl sẽ đặt cho những biến đó một giá trị undef, viết tắt của
undefined nghĩa là không được định nghĩa, nó sẽ có giá trị là "0" nếu
sử dụng nó như một số và khi xem nó như là một chuỗi thì nó sẽ là
một chuỗi có chiều dài là "0".
Một điều đặc biệt của loại
biến nay là khi đầu vào chuẩn đọc một file. Khi nó đọc và phát hiện
một dòng trống hoặc là một chuỗi
rỗng thì nó sẽ đổi thành một giá trị undef. Ðiều này có nghĩa là
bạn sẽ phải tính toán đến những giá trị này khi có sự chuyển đổi
trên.
III.Dãy.
Các dữ liệu vô hướng còn có
thể chứa trong một danh sách có thứ tự mà chúng ta thường gọi là
dãy. Một dãy được tạo thành từ những phần tử riêng biệt, những phần tử này lại là
những biến riêng lẻ vàgiá trị của chúng. Những phần tử của một
dãy được đánh số thứ tự từ thấp đến cao (0...9..). và một điều đặc
biệt là một dãy thì không giới hạn số phần tử bên trong dãy .
Các phần tử bên trong dãy có thể là ký tự, số hoặc
một biến và cũng có thể là tất cả những loại trên. Một dãy
thường có một trong những kiểu định dạng sau.
(1,2,3);
($A,$B,$C,);
($A,1,$B,2,$C,3);
Perl cho phép ta sử dụng một số danh
sách có cấu trúc để tạo sự ngắn gọn khi liệt kê hay khai báo một
dãy.
ví dụ : dãy (1,2,3,4,5,6,7,8,9,10);
sẽ được thay thế bằng dãy có
cấu trúc sau
(1..10);
hoặc dãy (1,2,3,4,8,10);
sẽ được thay bằng dãy
(1..4,8,10);
1.Biến
dãy.
Ở phần trước, ta đã
xét đến các loại biến mang giá trị là ký tự hoặc là số thì ở phần
chúng ta sẽ xét đến biến dãy, một biến số thì được chỉ định bởi ký
hiệu "$" thì một biến dãy được chỉ định bằng ký tự "@"
ví
dụ: @total,@date.v..v..
Một biến dãy thì mang
những đặc tính của dãy nên nó cũng không giới hạn số phần tử bên trong nó, và nếu ta lỡ
đặt tên một biến vô hướng trùng tên của một biến dãy thì chúng
vẫn không bị ảnh hưởng.
Nếu một biến dãy là một
dãy trống thì giá trị của nó sẽ là"null" hoặc là một danh sách rỗng
và một biểu thức có thể thay đổi toàn bộ biến dãy hoặc chỉ một
phần của biến dãy .
2.Toán tử dãy.
Những toán tử của dãy
cũng hoạt động như các toán tử của những biến thông thường, nó cũng
sẽ trả về giá trị sau khi đã xử lý những thông tin vào.
Sau đây là một số toán
tử dãy mà ta cần lưu ý:
push & pop
shift & ubshift
reverse
sort
chop
2.1.Toán
tử Assignment.
Toán tử này cho phép
đặt một giá trị vào trong một biến dãy. Nó cũng sử dụng ký hiệu
giống như ký hiệu trong biến vô hướng, ký hiệu "="được dùng để đưa
vào giá trị biến.
Một biến dãy có thể
chứa một dãy khác bên trong nó
ví
dụ:
@olduser =
("minh","dũng");
@newuser =
("thành","lê",@olduser);
@alluser = (@newuser,"tâm","hiếu");
dãy
mà biến dãy alluser sẽ trả về là: thành, lê, minh, dũng, tâm, hiếu.
Ta còn có thể gán 2 dãy
với nhau như sau:
+($F , $Y , $I) =
(1,2,3)
ta sẽ được : $F=1 , $Y=2 , $I=3.
+($P, $C) = ($C , $P)
sẽ trao đổi dữ liệu giữa biến C
và biến P.
+($P , @C) = ($F , $Y , $I)
ta sẽ được: $P = $F và @C = ($Y , $I) sau đó, nếu ta lấy
biến dãy C làm phép gán :
($A , @C) = @C
thì ta sẽ được : phần tử thứ nhất của
dãy C sẽ được truyền cho A
$A = $Y
@C = $I.
Nếu ta gán một biến dãy với một
biến vô hướng thì biến vô hướng sẽ mang giá trị là tổng số phần tử
của dãy hoặc là chiều dài của dãy:
+ @A= (15,4,3,8,7);
$A=@A;
sau
phép gán trên thì giá trị của biến vô hướng A sẽ là 5 (chiều dài
của dãy A);
+ ($X) = @A;
phép gán trên sẽ lấy giá trị của phần
tử đầu tiên của dãy A gán cho X: X=15;
+@B= (@D = (4,8,6));
dãy
Bsẽ có cùng giá trị với dãy D là (4,8,6);
2.2.Context
(Array & Scalar) :
Ðôi khi bạn cũng có
thể điều khiển kiểu dữ liệu của một array hoặc một Scalar mà nó
được trả về từ một function. Nếu bạn đặt dấu ngoặc đơn quanh một
hàm được gọi, giá trị trả về sẽ được đặt trong một dãy. Function mà gọi một hàm khác thì cũng thường được định là một array context.
Bạn có thể sử dụng hàm scalar( ) để tạo một scalar context. Nó rất
có ích khi xác định kích cỡ của một dãy. Ví dụ scalar(@array) sẽ trả
về số phần tử trong @array.
Ví dụ :
@Z =
("d","a","v","I","s");
print (@Z." is a magic
number\n");
sẽ xuất ra như sau :
5 is a magic number
2.3.Toán
tử Subscripting :
Trong một danh sách
dãy mỗi phần tử được đánh dấu như một integer maker hoặc index value,
bắt đầu từ bên trái với 0 và tăng lên đến cuối danh sách. Ðể thực
hiện điều này chúng ta sử dụng lệnh truy xuất phần tử, hay có thể
sử dụng toán tử subscript, để truyền những trị tới những biến khác.
Nó rất tiện lợi khi sử dụng những phần tử từ một dãy cho những
mục đích khác bằng cách truyền chúng vào trong một biến scalar, hoặc
sửa đổi một phần tử trong một dãy. Những khả năng này rất hữu ích
để cập nhật nhiều loại danh sách dữ liệu.
Ví dụ :
@numbers = (3,5,7);
$pick_one = $numbers[0];
# truyền 3 vào biến $pick_one
$number[0] = 4; # biến
@numbers nhận những phần tử là (4,5,7)
$pick_another
= $numbers[2];# truyền 7 vào biến $pick_another
$numbers[1]++
# tự động tăng phần tử thứ hai trong biến #@numbers lên
$numbers[0]
+= 8; #thêm 8 vào phần tử đầu, giá trị được liệt kê #bây giờ là
(12,6,7)
($numbers[1],$numbers[0]
= ($numbers[0],$nmbers[1];
# phần tử thứ nhất và thứ hai trong biến
$numbers được #chuyển đổi, giá trị được liệt kê bây giờ là (6,12,7)
2.4.Toán
tử push & pop.
Một sự phổ biến của
dãy và cũng là lợi điểm của dãy là khả năng chứa của nó. Hai
toán tử push và pop trong ngôn ngữ Perl được sử dụng để giúp cho
người dùng được dễ dàng hơn trong việc thêm vào và lấy ra những
phần tử trong dãy.
ví dụ:
push (@newuser , $tên ) ;
thêm giá trị của biến tên vào cuối dãy newuser
pop (@newuser) = $tên ; gán phần tử cuối của dãy newuser cho
biến tên.
2.5.Toán
tử shift & unshift.
Hai toán tử nay cũng
giống làmgiống như hai toán tử push và pop, chúng cũng được sử dụng
để thêm bớt các phần tử trong dãy, nhưng hai toán tử này thực hiện
tác vụ từ bên trái trong khi push và pop thực hiện tác vụ từ bên
phải.
vídụ:
+
@images = (4,3,6);
unshift(@image, 1, 8 , 4);
biến
dãy image sẽ mang giá trị = (1,8,4,4,6,3).
+ $minus = shift(@images );
sẽ
lấy giá trị đầu tiên của dãy gán cho biến minus.
2.6.Toán tử reverse, sort, chop .
-Toán tử reverse: toán tử này
cho phép đảo thứ tự của một dãy.
@up = (1,2,3);
@down = (reverse(@up);
biến dãy down sẽ bằng (3,2,1).
nếu bạn muốn thay đổi nội
dungbên trong một dãy và lấy luôn giá trị vừa thay đổi đó làm giá
trị mới của ngay biến đó thì ta thực hiện như sau.
@up = reverse (@up);
biến
up sẽ có giá trị mới chính là giá trị cũ của nó đảo ngược.
-Toán tử sort : toán tử nay cho
phép ta đem lại sự thứ tự cho danh sách theo cơ sở là thứ tự của bộ
mã ASCII. Vì thế chúng ta sẽ gặp rắc rối khi áp dụng toán tử này
cho số.
vídụ: +@users = sort("bob" , "jack" , "daisy",
"anne");
ta sẽ có giá trị của dãy users
là : anne, bob, daisy, jack.
áp dụng cho số:
+@count = (1 , 2 , 8 , 34 , 67 ,
15);
@count = sort(@count);
count
sẽ có giá trị là :1, 15 , 34 , 67, 8
-Toán tử chop : công dụng của
toán tử này chúng ta đã từng đề cập đến trong phần biến vô hướng
trước và ở đây, chúng ta sẽ áp dụng toán tử này cho biến dãy.Toán
tử này giúp ta bỏ đi những ký tự cuối cùng trong dãy.
vídụ:
@A = ("anne\n" , "bob\n" ,
"feed\n");
chop @A;
sẽ
cho ta giá trị của dãy A là một dãy : anne, bob, feed.
3.Dãy và <STDIN>.
Cũng giống như toán tử
chop, <STDIN> cũng được sử dụng cho dãy. Khi áp dụng trong dãy
thì <STDIN> sẽ trả về tất cả những dòng còn lại của một file.
Mọi hàng trong một file đều được đọc như một phần tử riêng biệt.
vídụ:
print "sở thích?"
@A = <STDIN>;
người sử dụng có thể nhập thông tin
vào tại đây, nếu muốn kết thúc dòng thông tin nhập thì nhấn tổ hợp
phím Control_D.
giả sử ta nhập vào những thông tin sau:
bơi
chạy
hát
thì
ta sẽ nhận được giá trị của dãy A là :
@A = ("bơi\n" , "chạy\n" , "hát\n");
sau
đó ta sẽ dùng hàm chop làm gọn dãy để sử dụng cho các phép tính sau
:
chop (@A);
@A = ("bơi" , "chạy" , "hát");
4.
Chuỗi ngoặc kép cũng được
sử dụng với dãy giống như với biến vô hướng. Ta có thể sử dụng
chuỗi ngoặc kép bên trong dãy như sau :
@weather = ("sunny" ,
"rainy");
$forcast = "tomorrow will
be $wether[0]";
khi xuất giá trị của biến forcast, ta sẽ
được chuỗi sau
"tomorrow willbe sunny".
Bạn cũng có thể thêm vào
một danh sách giá trị những giá trị
từ một biến dãy:
@pig = ("corn" , "hay" , "slop");
$eat = "pigs like to est @pig when
thay are hungry";
khi xuất biến $eat, ta sẽ được một câu
sau:
"pigs like to eat corn hay
slop when thay are hungry".
ta cũng có thể xuất những phần tử trong
dãy bằng cách chỉ định trước:
ví
dụ:
@pig = ("corn" , "hay" , "slop");
$eat = "pigs like to eat
@pigs[1,2] when they are hungry";
khi
xuất biến $eat, ta sẽ được :
"pigs like to eat hay slop when
they are hungry";
C.Ứng dụng vào lập
trình.
Ở phần trên, chúng ta đã đưa ra
những chủ điểm cơ bản về Perl, và bây giờ chúng ta sẽ xét đến
những thành phần cấu trúc nên một chương trình Perl.
I.Biểu thức chính quy.
Biểu thức chính quy là một khái
niệm đến từ UNIX. Nó giống như một biểu mẫu nhưng lại có sự kết
hợp khác biệt với một chuỗi. Một biểu thức chính quy không phải là
sự chuyển đổi kiểu ký tự của chuỗi mà là sự thể hiện riêng của
chính nó.
Ðể sử dụng kiểu biểu thức chính
quy , ta phải cần 2 bước sau :
+Thứ nhất : Bạn phải hiểu
về biểu mẫu mà bạn muốn kết hợp.
+Thứ hai : bạn phải hiểu
về sự khác biệt giữa những biểu mẫu bạn có thể dùng để tạo ra
được những biểu mẫu kết hợp.
Biểu thức chính quy được sử dụng
trong nhiều hệ điều hành khác nhau, và được xử lý bởi nhiều quá
trình và chương trình khác nhau. Biểu thức chính quy trong những hệ điều
hành khác nhau thì có thể khác nhau về cú pháp nhưng khái niệm thì
không thay đổi.
Trong phần này, chúng ta sẽ lần
lượt tìm hiểu những vấn đề sau :
+Cấu trúc điều khiển.
+Dãy kết hợp.
+Dữ kiện vào ra sử dụng
<STDIN>.
1.Cấu trúc điều khiển.
Ðiều quan trọng là làm sao
thông báo cho Perl biết khi nào bạn muốn đoạn script được thực hiện.
Ðể làm được việc ấy thì bạn phải sử dụng cấu trúc điều khiển như
là một phát biểu khối hoặc là một dạng khác của vòng lặp.
1.1.Phát
biểu khối.
Dạng cấu trúc điều khiển
đơn giản nhất trong Perl là các phát biểu khối, nó tạo thành một
dãy những biểu thức được bao giữa một cặp dấu ngoặc và có dạng như
sau.
{
$one = "1";
@two = (1,2,3);
%three = $two[0};
}
1.2.Phát
biểu vòng lặp If &ø Unless
Trong vòng lặp if/unless, một
biểu thức sẽ được kiểm tra tính đúng đắn, và nếu nó đúng thì một
dãy các sự kiện sẽ được kích hoạt. Nếu nó sai thì một số phần khác
trong script sẽ được kích hoạt.Sau đây là một ví dụ về cách định dạng
cho vòng lặp if/unless.
if ( biểu_thức) {
biểu thức if đúng;
}
else {
biểu thức if sai;
}
Nếu bạn muốn chỉ trả về
một phát biểu nếu kết quả của biểu thức được kiểmtra là sai, bạn có
thể sử dụng câu lệnh unless.
vídụ:
print "what is the
temperature?";
$temp = <STDIN>;
chop ($temp<70) {
unless ($temp <70) {
print "is it hot ?\n";
}
Nếu bạn muốn có được nhiều
sự lựa chọn hơn trong một phát
biểu thì bạn có thể sử dụng cấu trúc if/else và một lựa chọn nữa
là elseif.
vídụ:
print "what is the temperature?";
$temp = <STDIN>;
chop ($temp);
if ($temp < 70) {
print "you better get a sweater\n";
} elsif
((70 < temp <80) {
print "A little cool , but comfortable \n";
} elsif (80 <$temp
<90) {
print "nice and cozy\n";
} else {
print "is it hot \n";
}
1.2.phát
biểu vòng lặp While/Until.
Nếu bạn muốn có một khối
phát biểu lặp lại nhiều lần cho đến khi một mệnh đề điều khiển
được thể hiện.
vídụ:
print "how high for your countdown?";
$count = <STDIN>;
chop ($count);
while ($count
> 0) {
print "T minus $count, and counting...\n";
$count--;
}
Vòng lặp while cũng có một
lựa chọn khác cho phép trả về một phát biểu nếu mệnh đề điều
khiển của đầu vào là sai, gọi là câu lệnh until, cấu trúc này được
sử dụng như sau.
print "how long for your countdown?";
$count = <STDIN>;
chop ($count);
until ($count > 0) {
print "lift off\n";
$count--;
}
1.4.Phát
biểu vòng lặp for/foreach.
Khi bạn muốn script của bạn định giá trị cho một biểu
thức và sau đó lại thay đổi giá trị của nó trong mỗi lần thực hiện
việc đếm, bạn có thể sử dụng câu lệnh for như sau.
for ($count = 15; $count >=1; $count--) {
print "$count
\n";
}
Ở đây, chúng ta cũng gặp
một số trường hợp cá biệt khi bạn muốn tạo một vòng lặp với một
biến mà giá trị của nó sẽ thay đổi bên trong vòng lặp, nhưng bạn
muốn nó phải trả về giá trị sau khi vòng lặp "chết" . Bạn có thể làm điều nay với
câu lệnh foreach. Khi sử dụng câu lệnh foreach, một danh sách các giá
trị được tạo và sau đó, nó sẽ thay thế chúng vào trong một biến môi
trường tại một thời điểm, và sau đó tính toán khối phát biểu đó
vídu:
@letters = ("A" , "B" ,
"C" , "D");
foreach $new
(reverse @letters) {
print $new;
}
ví
dụ trên sẽ trả về một dãy:
D C B A
Một biến đặc biệt được dùng trong
Perl để làm đơn giản hóa bộ mã. Biến $_là một biến mặc định được
sử dụng cho nhiều câu lệnh
vídụ:
@letters = ("A","B","C","D");
foreach $_ (reverse
@letters) {
print $_;
}
2.Dãy liên kết.
2.1.Toán
tử keys.
Ðể có một danh sách hoặc là
tất cả những khoá hiện tại của một dãy liên kết, thì ta có thể
đặt tên của dãy vào giữa cặp ngoặc đơn và đặt nó sau toán tử "key"
vídụ:
keys(%wolf);
2.2.Toán
tử values.
Như bạn có thể hình
dung, toán tử giá trị làm việc như là loại toán tử khóa, nhưng kết
quả của nó lại là một danh sách các
giá trị của một dãy liên kết.
value(%wolf);
2.3.Toán
tử each.
Ðể xem xét kỹ các phần
tử của một dãy liên kết, bạn có thể sử dụng toán tử each như sau.
each(%wolf);
2.4.Toán
tử delete.
Loại toán tử này cho
phép bạn chuyển đổi những cặp giá trị bằng cách chỉ ra khoá của
những cặp bạn muốn di chuyển.
vídụ:
%wolf(4,"four"
,5,"five",6,"six");
delete $wolf{5};
sẽ trả về dãy : %wolf (4,"four", 6,
"six");
3. Nhập / xuất :
Chúng ta đã biết rằng
chúng ta có thể dùng <STDIN> để lấy các thông tin mà người sử
dụng đưa vào và chứa các thông tin ấy như là giá trị của một
biến.Và chúng ta cũng có thể đẩy một nhóm thông tin của người sử
dụng từ <STDIN > vào trong một dãy, nơi mà chúng sẽ được giữ như những phần tử
riêng biệt trong một dãy những cặp khóa và giá trị. Nhưng chúng ta
vẫn chưa biết cách vận dụng những giá trị này.
Chúng ta sẽ bàn về vấn đề
vận dụng những giá trị này bởi vì khi bạn muốn duyệt qua những hàng
ký tự và thay đổi một số hàng thì
vấn đề này là vấn đề rất quan trọng. Ðể thực hiện yêu cầu trên
thì bạn có thể tạo ra một vòng lặp như sau :
while
($_ =<STDIN>) {
}
Khi dòng lệnh while tạo một vòng
lặp. Perl sẽ chứa những hàng nhận được từ <STDIN> vào trong
biến $_ cho đến khi file dùng để chứa thông tin bị đầy và vòng lặp
kết thúc.
Khi Perl thực hiện thao tác xuất,
cả 2 toán tử print và printf đều có thể được sử dụng để đưa thông
tin ra <STDOUT>.
4.Sử dụng biểu thức
chính quy.
Ðể tìm hiểu về biểu thức
chính quy thì trước hết, chúng ta hãy tìm hiểu một lệnh đơn giản là lệnh grep, là một hình thức
ngắn gọn cho các biểu thức xuất.Với lệnh grep, bạn có thể sử dụng
một biểu thức và tìm kiếm trên từng hàng của một file, cũng như kết
hợp chuỗi được chỉ định trong biểu thức.
Lệnh grep được sử dụng như
sau :
grep tên_chuỗi_cần_tìm tên_tập_tin.pl
vd : grep crypt bonus.pl
Khi lệnh này được gọi thì nó sẽ
kiểm tra mọi hàng trong đoạn mã chương trình trong tập tin mà nó được
gọi, nếu có chứa chuỗi "crypt," và sẽ xuất những hàng này ra
tập_tin_change.pl thông qua đường <STDOUT>.
Ðể thể hiện chuỗi "crypt" như là
một biểu thức trong Perl, chuỗi này sẽ được đặt giữa hai dấu "/"
/crypt/
và bên trong script nó sẽ được biểu
diễn như sau :
if (/crypt/) {
print
"$_";
}
5. Guestbook :
Chúng ta bắt đầu tìm hiểu về
guestbook thông qua một ví dụ, đầu tiên chúng ta tạo một file có tên
là guest.pl.
#!usr/bin/Perl
# guest.pl
print " what is your name ? ";
$name=<STDIN>;
open (GUESTBOOK. ">>guest.pl")
;
# mở 1 file với filehandle
GUESTBOOK
print GUESTBOOK "$name";
# bổ sung name vào file guestbook
chop($name);
print " thank you, $name! Your name has been added
to the Guestbook. \n";
close(GUESTBOOK) ;
$name=<STDIN> sẽ nhập biến
$name là một chuỗi"string". Khi chúng ta sử dụng lệnh print
<STDOUT> "string" nó sẽ được in ra. Biến này sẽ được thay thế
trong chuỗi trước khi được in ra.
Ở dòng open (GUESTBOOK.
">>guest.pl) chúng ta sẽ mở một file có tên là guest.pl, mà nó
ấn định một filehandle của GUESTBOOK. Filehandle được sử dụng để chỉ
đến file được mở để đọc hoặc ghi và nó thường được viết hoa.
Filehandle này như tất cả những biến hoặc array trong Perl có thể là
bất cứ thứ gì bạn thích nhưng miễn không là một từ được dành riêng.
Chúng
ta đặt >> trước tên file có nghĩa là chúng ta đang mở một file
để bổ sung, bảng sau là những option cho file được mở
Toán
tử |
Hành
vi |
> >> +> Nothing |
Ghi Bổ
sung Ðọc
và ghi Ðọc |
Lệnh
chop() được gọi trước khi
Yêu cầu
của đề tài :
Nghiên
cứu HTML (HyperText Markup Language), CGI (Common Gateway Interface), ngôn
ngữ lập trình PERL (Practical Extraction and Report Language), môi trường
được sử dụng là UNIX để thực hiện những yêu cầu sau:
-
Viết ứng dụng cho phép upload file từ máy client thông qua trình
duyệt Web lên máy server.
-
Ứng dụng để upload luận văn của sinh viên dạng Web lên
Webserver, tổ chức các luận văn
này theo từng lớp để mọi người có thể dùng trình duyệt để
tham khảo các luận văn này, những việc này được thực hiện hoàn
toàn trên giao diện Web và thông qua trình duyệt Web (browser).
-
Giải quyết một số vấn đề gặp phải :
. Vấn đề chữ thường và
chữ hoa ở liên kết trong trang Web của sinh viên được upload với tên
file được những liên kết này chỉ tới.
I.
Giới thiệu chương trình :
Như được giới thiệu trong
phần yêu cầu của đề tài thì chương trình nhằm tạo công cụ cho người
quản trị Web dùng trình duyệt Web để quản lý cũng như upload những
luận văn tốt nghiệp của sinh viên ở dạng trang Web lên Webserver để
mọi người có thể tham khảo, giải quyết một số vấn đề gặp phải. Ðể
thực hiện điều này thì chương trình sẽ cung cấp cho người sử dụng
chương trình các khả năng như :
-
Tạo ra những trang chỉ mục của từng lớp khi đăng ký một lớp
sau đó khi một đề tài của sinh viên được đăng ký và upload thì các
thông tin về đề tài : tên sinh viên thực hiện, tên đề tài, tên
giáo viên hướng dẫn sẽ được cập nhật tự động vào trang chỉ mục này
và cho phép mọi người xem các đề tài này bằng cách click vào các
liên kết trong trang chỉ mục..
-
Giải quyết một số vấn đề gặp phải như trong phần yêu cầu
của đề tài.
II.
Các loại người dùng :
Ðối với chương trình thì
chỉ có hai loại user là : user thông thường và admin.
1.
User thông thường :
Là những người dùng có
truy xuất đến các đề tài đã upload đặt trên Webserver, vậy thì mọi
người thông qua một web browser với một URL chỉ đến các trang đề tài
đã được upload thì sẽ duyệt được các trang này, hoặc ngay chính admin
cung có thể là một user thông thường nếu sử dụng liên kết có sẵn
trong chương trình để duyệt các đề tài này.
2.
Admin :
Admin là người có nhiệm
vụ upload và quản lý những luận văn dạng của sinh viên trong hệ
thống. Admin sẽ là người nhận luận văn dạng Web của sinh viên bao
gồm những trang Web và các file khác liên quan sau đó dùng trình duyệt
web tại một máy client nào đó hay tại chính server sẽ upload những file
này lên Webserver. Các trang Web của một đề tài được liên kết với
nhau theo trình tự do người tạo web cho đề tài đó hiện thực nhưng cũng
có một qui ước chung là trang chủ của một đề tài phải có tên là
" index.html ".
Muốn trở thành admin của
hệ thống thì người nắm account admin phải qua giai đoạn đăng nhập vào
hệ thống với user và passsword để kiểm tra tính hợp lệ sau đó thì
admin sẽ có những quyền sau :
-
Tạo ra một lớp ( ví dụ : caodang3) tức tạo ra trang chỉ mục cho
lớp đó và tạo ra một thư mục cho lớp đó trên server nhằm chứa những
thư mục con chứa các đề tài của những thành viên trong lớp đó.
-
Ðổi tên lớp .
-
Xóa bỏ một lớp.
-
Ðăng ký và upload một đề tài mới, muốn upload một đề tài thì
đề tài đó phải được đăng ký để cập nhật những thông tin của đề
tài đó vào trang chỉ mục của lớp cũng như tạo thư mục chứa đề tài
nằm trong thư mục của lớp mình.
-
Upload bổ sung cho một đề tài. Sau khi đăng ký đề tài nhưng
chưa upload hoặc đề tài đã được upload nhưng vẫn còn thiếu sót thì
admin sẽ nhập vào những thông tin về đề tài đó để upload bổ sung
thêm những file cần thiết.
-
Thay đổi thông tin về đề tài, nhằm giúp cho admin sau khi đã
đăng ký những thông tin về đề
tài, upload hoàn tất nhưng phát hiện những thông tin của đề tài bị
nhập sai thì có thể sửa những thông tin này mà không phải xoá đề
tài và upload lại từ đầu.
-
Xoá một đề tài.
-
Tìm kiếm đề tài đã được upload.
-
Duyệt các đề tài đã được upload.
-
Thay đổi user, password của mình.
-
Sửa các lỗi về chữ thường và chữ hoa.
III.
Hoạt động của hệ thống
:
Toàn bộ chương trình sẽ
được đặt cũng như thực thi trên server và phần giao tiếp với người
dùng sẽ xuất hiện trên Browser của máy client.
Do đó chương trình sẽ
được xây dựng trên mô hình Client-Server.
Khi có yêu cầu của
client gởi lên Server yêu cầu một trang Web thì server sẽ gởi trang này cho client, còn nếu
client gởi lên một yêu cầu xử lý thì server sẽ gởi yêu cầu này tới
một CGI Script, sau khi xử lý xong CGI Script sẽ gởi kết quả cho server
và server sẽ gởi kết quả này dưới dạng một trang Web cho client.
Do có nhiều lớp và nhiều đề tài nên
phải tổ chức các lớp và đề tài này riêng biệt với nhau để dễ
quản lý. Các trang chỉ mục của từng
lớp sẽ được đặt trong các thư mục riêng biệt ngang cấp với
nhau, trong mỗi thư mục này sẽ chứa các thư mục con mà mỗi thư mục
con này sẽ chứa các file của một đề tài. Các thông tin của những
đề tài này sẽ được cập nhật hoặc xóa bỏ trong trang chỉ mục của
mỗi lớp do admin thực hiện.
Vì user thông thường và
admin sử dụng chương trình khác nhau nên hệ thống chia ra hai giao diện
riêng biệt dành cho user và admin, mỗi giao diện sẽ được chỉ ra bằng
một địa chỉ URL.
User thông thường chỉ có
thể duyệt và tìm kiếm các đề tài đã được upload và không thể sử dụng
những phần xử lý khác của chương trình dành riêng cho admin, do đó
giữa user thông thường và admin sẽ hoàn toàn tách biệt.
Admin muốn thực hiện
những chức năng của mình thì sẽ phải login vào hệ thống. Quá trình
login này sẽ kiểm tra user name và password để xác nhận tính hợp lệ,
nếu đúng thì sẽ gọi ra giao diện để admin thực hiện các chức năng
của mình.
Tổ chức
cấu trúc trang web của mỗi lớp và thư mục trên server :
Theo
cách tổ chức của chương trình thì mỗi lớp sẽ có một trang index và
sẽ được tạo ra một thư mục chính trên server để chứa trang index này
và những thư mục con chứa các đề tài của sinh viên, mỗi thư mục con
này sẽ chứa toàn bộ những file của một đề tài và khi đề tài được
upload thì trang chủ của đề tài này phải có tên là index.html.
IV.
Sơ đồ dòng dữ liệu (DFD)
:
1. Sơ đồ toàn cục :
Ðối với user thông
thường thì chỉ được cung cấp khả năng duyệt và tìm kiếm đề tài nhưng
không được can thiệp vào bên trong hệ thống
Ðối với admin thì những
chức năng của hệ thống hoàn toàn do admin quản lý và sử dụng sau
khi đã login vào hệ thống tuy nhiên khả năng duyệt và tìm kiếm thì
không nhất thiết phải login vào hệ thống.
Xin xem hình : sơ đồ toàn
cục
2.
Sơ đồ các chức năng của
admin :
Mỗi chức năng của admin
sẽ do một hay nhiều quá trình xử lý thực hiện, các chức năng này
có thể tách biệt với nhau nhưng cũng có thể liên quan với nhau hoặc
có những thông tin đưa vào giống nhau nên những chức năng này có
thể sẽ được thể hiện bằng sơ đồ riêng hoặc gộp chung lại với nhau
trong các sơ đồ sau:
-
Sơ đồ duyệt và tìm kiếm trang Web.
-
Sơ đồ tạo, xoá, đổi tên lớp.
-
Sơ đồ đăng ký và upload đề tài.
-
Sơ đồ cập nhật, upload bổ sung, xoá đề tài.
Sơ đồ toàn cục
Sơ đồ duyệt và tìm kiếm
trang Web
Sơ đồ tạo, xoá , đổi
tên lớp
V.
Những vấn đề gặp phải :
1.
Lựa chọn trình duyệt Web
(Browser) :
Khi upload file bằng trình
duyệt thông qua form HTML với method "post" chúng ta đã gởi
lên server một kiểu MIME_type đặc biệt là kiểu multipart/message mà
không phải tất cả các trình duyệt đều hỗ trợ do đó chúng ta phải
lựa chọn trình duyệt thích hợp thì mới có thể upload được file, theo như
chúng tôi được biết thì Netscape từ version 2.0 trở về sau mới hỗ trợ
MIME_type này, còn Internet explorer chúng tôi sử dụng thì version 4.0
trở về sau đã hỗ trợ nhưng version 3.01 vẫn chưa hỗ trợ kiểu MIME-type
này.
2.
Vấn đề chữ thường và
chữ hoa :
Do chương trình và các
luận văn được đặt trên server UNIX, một hệ điều hành có phân biệt
giữa chữ thường và chữ hoa ( ví dụ 3 file có tên : HELLO, Hello, hello
sẽ là khác nhau) nên có thể sẽ gặp vấn đề chữ thường và chữ hoa
ở liên kết trong trang Web của sinh viên được upload với tên file được
những liên kết này chỉ tới. Vấn đề này xảy ra khi những trang web
này được tạo trên những hệ điều hành không phân biệt chữ thường
và chữ hoa nên cho dù giữa liên kết và tên file có khác nhau ở ký
tự thường và hoa thì những liên kết này vẫn gọi được những file đó
nhưng khi được upload lên server là UNIX thì điều này không được chấp
nhận. Do đó chương trình cũng sẽ xử lý vấn đề này bằng cách đọc
trong tất cả những trang web trong đề tài để kiểm tra xem tất cả
những liên kết trong trang này tới những file khác có ký tự nào là
chữ hoa hay không , đồng thời cũng sẽ đọc tất cả những tên file
trong thư mục chứa đề tài nếu có tên file chứa ký tự là chữ hoa thì
sẽ có phần thông báo cho người dùng chương trình biết để sửa lỗi
này hay không.
3.
Vấn đề truy xuất trang
trực tiếp :
Do chương trình được viết
từ nhiều Script khác nhau và khi thi hành chúng sẽ gọi lẫn nhau, mỗi
trang sẽ có một URL khác nhau, do đó nếu người nào nhìn thấy các URL
này thì họ có thể ghi nhớ nó, sau đó họ có thể sử dụng trình duyệt
nhập vào các URL này vào thẳng các trang này mà không thông qua
trang đăng nhập của admin, tức không thông qua việc login vào hệ
thống và điều này sẽ rất nguy hại nếu họ truy xuất đến các phần
xử lý của admin và thực thi được các quyền của admin. Ðể ngăn chặn
điều này thì các trang trong hệ thống ngoại trừ các trang cho mọi
người duyệt thì các trang khác sẽ có phần kiểm tra quyền truy xuất
của những request ( yêu cầu) từ browser đến trang đó, nếu request mà
không thông qua quá trình login sẽ không được phép truy xuất.