CGI và CGI SCRIPT

COMMON GATEWAY INTERFACE

 

           

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ẻ  "<!_"    "_>", 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: &#123; định ra nét phân cách dọc  "|"

       &#174; đị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ộ,    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 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 

              <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:

 

 

TÌM    HIỂU HTML

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.

 

 

 

 

 

 

 

 

TÌM HIỂU PERL

 

 

                 

               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 

 

 

 

 

 

 

 

 

Phần phân  tích

 

 

 

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.

 

     

 

 

Text Box: Yêu cầuText Box: Yêu cầuText Box: Thông tinText Box: Thông tinText Box: Thông tinText Box: Yêu cầuText Box: Thông tinText Box: Thông tinText Box: Yêu cầuText Box: Yêu cầu
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Sơ đồ  toàn cục

 

Text Box: Yêu cầu duyệtText Box: Yêu cầu tìm kiếmText Box: Trang WebText Box: Thông báo lỗiText Box: Trang WebText Box: Thông báo lỗiText Box: Thông báo lỗi
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Sơ đồ duyệt và tìm kiếm trang Web

 

 

Text Box: Yêu cầu tạo lớpText Box: Mẫu templateText Box: Tên lớp bị trùngText Box: Yêu cầu Text Box: Yêu cầu Text Box: Hoàn thành Text Box: Không có lớp
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Sơ đồ tạo, xoá , đổi tên lớp

 

Text Box: Thông tin đăng kýText Box: Thông báo kết quả
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Text Box: Thông tin về đề tàiText Box: Thông báoText Box: Thông báoText Box: Thông tin về đề tàiText Box: Yêu cầu upload
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


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. 

 

 

 

 


 [dth1]