Các toán tử trong VBScript gần giống các toán tử trong ngôn ngữ lập trình Turbo Pascal. Chỉ có một số toán tử khác biệt được thể hiện trong bảng sau
TOÁN TỬ BIỂU DIỄN VÍ DỤ KẾT QUẢ VÍ DỤ
Mũ ^ 2^3 2*2*2 = 8
Chia lấy phần nguyên \ 8\3 2
Cộng chuỗi & hoặc + "Hello" & "World" "HelloWorld"
Gán giá trị cho biến = a = 5 biến a có giá trị 5
Gán giá trị cho biến kiểu đối tượng Set <biến> = <đối tượng> set Conn = Server.CreateObject ("ADODB.Connection") 5.2.4. Hằng và biến a. Khai báo hằng
Hằng trong VBScript được định nghĩa sau từ khóa Const. Tương tự như các ngôn ngữ khác ta chỉ có thể sử dụng giá trị của hằng mà không thể thay đổi giá trị của hằng.
Cú pháp:
Const <TênBiến> = <Giá trị>
Ví dụ dưới đây khai báo hằng ở ba kiểu khác nhau:
b. Khai báo biến
Trong VBScript các biến và hằng đều không cần phải quy định kiểu, kiểu của các biến này là
Variant và nó có thể gán cho bất kì một kiểu nào. Việc khai báo biến bắt đầu bằng từ khóa
Dim <tên biến1>, <tên biến 2>,...
Ví dụ:
Chú ý: Việc khai báo biến trong VBScript là không bắt buộc. Nếu ta sử dụng một biến chưa được khai báo thì coi như biến mới sẽ được tự động tạo mới. Để bắt buộc khai báo biến trước khi sử dụng ta sử dụng lựa chọn Option Explicit.
c. Khai báo mảng
Để khai báo một biến mảng có ta sử dụng lệnh Dim với cú pháp:
Dim <Tên biến mảng>(n)
Khi đó mảng được khai báo với các phần tử được đánh số từ 0 đến n. Ta có thể truy cập vào các phần tử của mảng bằng cách: <tên mảng>(chỉ số)
Ví dụ:
Ta cũng có thể khai báo một mảng chưa xác định số phần tử bằng cách bỏ chỉ số n trong khai báo thông thường. Khi muốn dùng mảng thật sự ta phải khai báo lại bằng lệnh ReDim.
Ví dụ:
5.3. Các câu lệnh
5.3.1. Lệnh rẽ nhánh
b. Lệnh rẽ nhánh đầy đủ c. Lệnh rẽ nhánh mở rộng d. Lệnh Select Case Dạng 1 Dạng 2 5.3.2. Lệnh lặp xác định a. Lặp với số lần định trước Dạng 1: Dạng 2 Ví dụ Mã lệnh LAP.ASP Kết quả
b. Vòng lặp For Each ... Next (Lặp trong các phần tử của một nhóm)
Mã lệnh LAP1.ASP Kết quả
5.3.3. Vòng lặp không xác định
a. Lệnh While...wend hoặc Do...Loop (Lặp khi điều kiện đúng)
b. Lệnh Do Until (Thực hiện cho đến khi điều kiện đúng)
Mã lệnh LAP3.ASP Kết quả
5.4 Hàm và thủ tục
5.4.1. Hàm
a. Định nghĩa một hàm:
- Public hoặc Private: Kiểu của hàm có thể loại bỏ nếu không cần thiết.
- Exit Funtion: Thoát khỏi hàm mà không thực hiện tiếp phần sau của lệnh này.
- Các tham số nếu có phải được đặt cách nhau bởi dấu phảy (,) và không khai báo kiểu. Khi gọi hàm các tham số này phải được truyền vào đủ số lượng và theo đúng thứ tự đã khai báo. - Trả về giá trị cho hàm bằng cách: <tên hàm> = <giá trị>
b. Gọi một hàm đã được định nghĩa:
Cú pháp
<tên hàm>[(Các tham số nếu có)]
Hoặc Call <tên hàm>[(Các tham số nếu có)]
Ta có thể gán giá trị một hàm cho một biến bằng cách
<Tên biến> = <Tên hàm>[(Các tham số nếu có)]
5.4.2. Thủ tục
a. Định nghĩa thủ tục:
- Public hoặc Private: Kiểu của thủ tục có thể loại bỏ nếu không cần thiết. - ExitSub: Thoát khỏi thủ tục mà không thực hiện tiếp phần sau của lệnh này.
- Các tham số nếu có phải được đặt cách nhau bởi dấu phảy (,) và không khai báo kiểu. Khi gọi thủ tục các tham số này phải được truyền vào đủ số lượng và theo đúng thứ tự đã khai báo.
b. Gọi một thủ tục đã được định nghĩa:
Cú pháp
<tên thủ tục>[(Các tham số nếu có)]
hoặc
Call <tên thủ tục>[(Các tham số nếu có)]
5.4.3. Ví dụ sử dụng hàm và thủ tục (Giaỉ phương trình bậc 2 một ẩn số)
Kết quả khi duyệt trang web này với a=1, b=2, c=1
5.4.2. MỘT SỐ HÀM THƯỜNG DÙNG TRONG VBSCRIPT
HÀM CHỨC NĂNG VÍ DỤ KẾT QUẢ
HÀM TOÁN HỌC
Sqr(x) x Sqr(4) 2
HÀM CHUYỂN ĐỔI KIỂU
CBool(Biến) Chuyển kiểu biến thành kiểu bool
CByte(Biến) Chuyển kiểu biến thành kiểu byte
CCur(Biến) Chuyển kiểu biến thành kiểu Currency
CDate(Biến) Chuyển kiểu biến thành kiểu ngày tháng
CInt(Biến) Chuyển kiểu biến thành kiểu nguyên
CStr(Biến) Chuyển kiểu biến thành kiểu chuỗi
HÀM THỜI GIAN
Date() Ngày tháng năm hiện tại
Now() Thời điểm hiện tại Second(BTthời gian) Lấy giây của BTThờiGian
Minute(BTthời gian) Lấy phút của BTThờiGian
Hour(BT thời gian) Lấy giờ của BTThờiGian
Day(BT thời gian) Lấy ngày của BTThờiGian WeekDay((BTThờiGian) Ngày trong tuần của
BTThờiGian
Month(BTThờiGian) Lấy tháng của BTThờiGian Year(BT thời gian) Lấy năm của BTThờiGian
WeekDayName(n) Tên của ngày thứ n trong tuần WeekDayName(2) Monday MonthName(n) Tên của tháng thứ n trong năm MonthName(6) June
HÀM KIỂM TRA
IsDate(Biểu thức) Có phải là biểu thức ngày không
IsEmpty(Biểu thức) Biểu thức có rỗng không? BT rỗng là BT chưa chứa giá trị IsNull(Biểu thức) Biểu thức có giá trị là NULL
không?
IsNumeric(Biểuthức) Biểu thức có là số không IsObject(Biểu thức) Biểu thức có là đối tượng
không?
HÀM XỬ LÝ CHUỖI
LCase(Chuỗi) Chuyển chuỗi thành chữ
thường LCase("heLLo") "hello" UCase(Chuỗi) Chuyển chuỗi thành chữ hoa UCase("heLLo") "HELLO" Left(Chuỗi, n) Lấy n kí tự bên trái chuỗi Left("heLLo",2) "he" Right(Chuỗi, n) Lấy n kí tự bên phải chuỗi Right("heLLo",2) "Lo"
Len(Chuỗi) Độ dài của chuỗi Len ("heLLo",2) 5
LTrim(Chuỗi) Cắt hết kí tự trắng bên trái chuỗi
LTrim(" heLLo ") "heLLo " RTrim(Chuỗi) Cắt hết kí tự trắng bên phải
chuỗi RTrim(" heLLo ") " heLLo" Trim(Chuỗi) Cắt hết kí tự trắng hai đầu
chuỗi
Trim(" heLLo ") "heLLo"
MỘT SỐ HÀM KHÁC
Chr(n) Kí tự có mã ASCII là n Chr(65) "A"
5.4.3. ĐOẠN MÃ DÙNG CHUNG
Khi tiến hành xây dụng chương trình ở nhiều trang khác nhau, để tránh phải gõ lại, cập nhật khi có thay đổi các đoạn mã trong mỗi trang người ta có thể sử dụng lại các đoạn mã ở các trang khác để chèn vào trang hiện thời.
Cú pháp:
<!-- INCLUDE FILE="tên file" -->
hoặc
<!-- INCLUDE VIRTUAL="tên file" -->
Nếu sử dụng INCLUDE VIRTUAL thì thư mục chứa file cần chèn vào phải là một thư mục ảo trên server và phần mở rộng của file phải là .INC, còn nếu dùng INCLUDE FILE thì phải chỉ ra đường dẫn vật lý của file cần chèn.
5.5. Tệp cấu hình GLOBAL.ASA
Global.asa là một file được đặt trong thư mục gốc của một ứng dụng web, nó là file được thực thi chỉ một lần đầu tiên vào lúc trình duyệt đầu tiên phát yêu cầu đến ứng dụng web. Lúc này Global.asa được web server tìm trên thư mục gốc của ứng dụng và thực thi nó. File này thường được dùng để nạp các cấu hình cần thiết, khai báo đối tượng và đặt các thủ tục đáp ứng sự kiện.
5.5.1. Các sự kiện
a. Sự kiện Application_OnStart
Sự kiện Application_OnStart phát sinh khi người dùng đầu tiên gửi yêu cầu đến ứng dụng web. Application_OnStart chỉ xảy ra một lần đối với người đầu tiên. Muốn sự kiện này xảy ra lại chỉ có cách khởi động lại IIS.
Viết lệnh đáp ứng sự kiện này thường dùng để khởi tạo giá trị các biến ở mức toàn cục và hiệu lực với mọi người dùng chẳng hạn như: số người ghé thăm trang web, đường dẫn đến CSDL,...
b. Sự kiện Session_OnStart
Phát sinh khi người dùng yêu cầu trang đầu tiên trong ứng dụng từ trình duyệt. Ta sử dụng sự kiện này để khởi tạo các gía trị biến, các đối tượng cần thiết.
Sự kiện này có thể xảy ra nhiều lần với mỗi người dùng
c. Sự kiện Session_OnEnd
Sự kiện này phát sinh khi phiên làm việc của người dùng chấm dứt nghĩa là nó hết hạn hoặc người dùng đóng cửa sổ trình duyệt lại.
Trong sự kiện này ta thường viết các thủ tục để xóa các biến nhớ hoặc có thể lưu lại các trạng thái thông tin nếu cần.
Tương tự như sự kiện Session_OnStart, sự kiện Session_OnEnd cũng có thể xảy ra nhiều lần với mỗi người dùng.
d. Sự kiện Applicaton_OnEnd
Sự kiện này phát sinh khi ứng dụng ASP được tải xuống bằng MMC (Microsoft Management Console), hoặc khi ứng dụng bị ngừng một cách vô thức bởi một lý do nào đó (dịch vụ web bị ngừng trên web server)
Tương tự như Application_OnStart, Application_OnEnd chỉ phát sinh một lần duy nhất, các mã lệnh được viết để xử lý sự kiện này sẽ được gọi sau cùng. Ta thường dùng sự kiện này để lưu lại các giá trị cần thiết ngay trước khi dịch vụ web ngừng làm việc.
5.5.2. Khai báo đối tượng
File cấu hình Global.asa là nơi duy nhất ta có thể khai báo các đối tượng COM bằng cặp thẻ <OBJECT>...</OBJECT>
Nếu ta sử dụng trình soạn thảo VisualInterDev trong bộ VisualStudio thì việc thêm các đối tượng vào Global.asa rất đơn giản, thao tác còn lại chỉ là kéo-thả. Ta cần lưu ý rằng các đoạn mã trên không đặt trong <%...%>
- Scope là phạm vi của biến: là Application hoặc Session - ID: Tên ta đặt cho đối tượng
- ProgID hoặc ClassID là định danh của đối tượng COM ta muốn chèn. Ví dụ về chèn một đối tượng
5.5.3. Một file cấu hình Global.asa đơn giản
5.5.2. TẬP HỢP (COLLECTION) TRONG ASP 5.5.2.1. Khái niệm 5.5.2.1. Khái niệm
Tập hợp là một khái niệm thường xuyên phải sử dụng trong ASP. Hiểu một cách đơn giản, tập hợp là một số các biến, đối tượng thuộc cùng một đối tượng nào đó. Trong ASP đa số các đối tượng đều có các tập hợp bên trong nó.
5.5.2.2. Cách truy cập các phần tử trong tập hợp
Một tập hợp trong ASP có tính chất như một mảng các giá trị. Chúng ta có thể truy cập thông qua một khóa hoặc một số nguyên coi như chỉ số của mảng đó. Một tập hợp thông thường có 3 thuộc tính cơ bản đó là Item, Key và Count trong đó thuộc tính Item là "thuộc tính mặc định" nghĩa là trong một số trường hợp ta có thể không cần thiết viết tên thuộc tính này khi truy cập.
a. Thuộc tính Item
Được dùng để truy cập đến một phần tử nào đó trong tập hợp. Ta có thể xác định vị trí của phần tử đó bằng một chuỗi hay có thể là một số.
Ví dụ: Ta có thể truy cập vào tập hợp QueryString của đối tượng Request như sau:
hoặc ta có thể
Vì thuộc tính Item là thuộc tính mặc định của tập hợp nên ta có thể bỏ qua thuộc tính này cho đơn giản trong khi viết như sau:
b. Thuộc tính Key
Thuộc tính này trả ra tên cụ thể của một phần tử trong tập hợp. Ta có công thức:
- Nếu i là chỉ số của phần tử trong một tập hợp A thì name = A.Key(i) là tên của phần tử này. Khi đó cách viết A.Item(i) và A.Item(Name) là hoàn toàn tương đương.
c. Thuộc tính Count
5.6. Xử lý các FORM dữ liệu
5.6.1. Mởđầu
Các form dữ liệu là nơi người dùng có thể nhập dữ liệu vào và gửi về phía Server. Một form chứa một hoặc nhiều điều khiển và người sử dụng có thể nhập các giá trị vào. Sau khi nhập xong dữ liệu người sử dụng sẽ ra lệnh gửi form đi, form chứa các dữ liệu này sẽ được gửi tới địa chỉ được chỉ định trong form để xử lý. Kết quả trả về cho người dùng phụ thuộc vào trình xử lý trên server.
Để định nghĩa một form ta sử dụng đoạn mã
Phương thức: Cách thức gửi form đi, có thể sử dụng GET hoặc POST
5.6.2. Sử dụng phương thức GET
5.6.2.1. Định nghĩa form dùng phương thức GET
Để định nghĩa form dùng phương thức GET ta dùng đoạn mã sau
Ví dụ
5.6.2.2. Đặc điểm form dạng GET
Khi định nghĩa form dạng GET thì các dữ liệu mà form gửi đến trình xử lý sẽ được gửi đi theo phương thức GET. Nghĩa là các dữ liệu này sẽ được đưa thêm vào phần sau của chuối URL trên trình duyệt.
Với cách làm này có đôi phần tiện dụng vì ta có thể nhập giá trị các biến trực tiếp lên URL của trình xử lý. Tuy nhiên có một nhược điểm là dung lượng kí tự có thể nhập lên URL là khá nhỏ (dưới 2000 kí tự). Do đó người ta chỉ dùng cách này khi lượng thông tin cần truyền là đơn giản, dung lượng ít.
5.6.2.3. Cách lấy dữ liệu từ form dạng GET
Để lấy dữ liệu từ form dạng GET người ta dùng tập hợp QueryString của đối tượng Request.
Cú pháp: Request.QueryString("<tên điều khiển>")
Chi tiết về đối tượng này sẽ được đề cập trong các bài sau. Ta có thể tam hiểu thông qua ví dụ sau đây:
5.6.2.4. Ví dụ
Trong ví dụ này ta làm một form cho phép người sử dụng nhập thông tin về Họ và tên rồi gửi về trình xử lý theo phương thức GET, trình xử lý sẽ hiện một câu thông báo chào người đó.
Sau khi nhập dữ liệu trên trình duyệt và nhấn Gửi đi chú ý chuỗi trên URL
5.6.3. Sử dụng phương thức POST
5.6.3.1. Định nghĩa form dùng phương thức POST
Để định nghĩa form dạng POST ta dùng đoạn mã sau
Ví dụ:
5.6.3.2. Đặc điểm form dạng POST
Khi định nghĩa form dạng POST các dữ liệu sẽ được gửi thẳng đến trình xủ lý theo phương thức POST, không qua URL do đó lượng dữ liệu được gửi đi là không hạn chế.
Người ta thường dùng phương thức POST để truyền các dữ liệu lớn.
5.6.3.3. Cách lấy dữ liệu từ form dạng POST
Để lấy dữ liệu từ form được gửi đến theo phương thức POST người ta dùng tập hợp FORM của đối tượng Request.
Cú pháp: Request.Form("<tên điều khiển>")
Chi tiết về đối tượng này sẽ được đề cập trong các bài sau. Ta có thể tam hiểu thông qua ví dụ sau đây:
5.6.3.4. Ví dụ
Trong ví dụ này ta làm lại ví dụ trong phần 2.4 của bài này nhưng có khác là dữ liệu trong form được gửi đi theo phương thức POST.
Sau khi nhập dữ liệu trên trình duyệt và nhấn Gửi đi chuỗi trên URL không có dữ liệu của form
5.7. Các đối tượng cài sẵn trong ASP
5.7.1. Các đối tượng ASP
Thực chất ASP được xây dựng trên cơ sở hướng đối tượng và nó có một tập các đối tượng được cài đặt sẵn làm cơ sở cho người lập trình, có các đối tượng tiện ích (có thể cài đặt hoặc không) và bản thân chúng cũng có những đối tượng cho riêng mình đó là các đối tượng ActiveX/COM
Một số đối tượng cài sẵn thông dụng: o Request
o Response o Application o Session o Server
Các đối tượng có các tập hợp, các thuộc tính và các phương thức, để truy cập vào một thuộc tính hoặc một phương thức nào đó của đối tượng ta sử dụng:
<Tên đối tượng>.<Tên tập hợp | thuộc tính | phương thức>
Ví dụ:
Response.Write("Hello World")
5.7.2. Đối tượng REQUEST
Một trong những mục đích của ASP là cho phép nhận thông tin từ phía client và người sử dụng. Đối tượng Request được dùng để nhận các thông tin đó được dễ dàng. Đối tượng Request quản lý các thông tin được gửi từ phía web browser lên server như dữ liệu của các form, cookies...
Đối tượng Request giúp chúng ta truy cập vào đoạn đầu và thân các yêu cầu HTTP của người sử dụng. Đây là đối tượng rất quan trọng vì ta phải thông qua nó để nhận được và đáp ứng các yêu cầu người sử dụng đưa ra. Sử dụng đối tượng Request chúng ta mới có thể xây dựng được trang web động và thực hiện được các hoạt động khác có ý nghĩa hơn ở máy chủ như cập nhật các dữ liệu ở máy khách vào cơ sở dữ liệu...
5.7.2.1. Một số tập hợp thông dụng trong đối tượng Request
TÊN TẬP HỢP MIÊU TẢ
QueryString(<tên biến>) Chứa các giá trị được gửi lên từ các yêu cầu HTTP Get (hiểu đơn giản là từ các URL)
Form(<Tên form>) Chứa các giá trị trong form được gửi đến (với điều kiện form phải sử dụng phương pháp POST Cookies(<Tên cookie>) Chứa các thông tin của các cookies được gửi trong
yêu cầu HTTP
ServerVariables(<tên biến>) Chứa danh sách các giá trị của các biến môi trường đã được xác định trước
a. Tập hợp QueryString
Tập hợp QueryString cho phép ta lấy thông tin từ máy khách gửi đến, có thể là một form được gửi theo phương pháp GET hoặc dữ liệu được gắn với URL khi trang web được yêu cầu.
Để đưa được các biến vào chương trình, sau phần cuối của địa chỉ thông thường ta thêm dấu (?) rồi sau đó đến từng cặp <tên biến> = <giá trị> được phân cách nhau bởi dấu (&).
Ví dụ: để truyền ba biến a, b, c có giá trị lần lượt là 1, 2, 1 về trang PTBAC2.ASP trên server thì chuỗi URL khi đó như sau.
http://localhost/ptbac2.asp?a=1&b=2&c=1
Tập hợp này có tính năng tương đối hạn chế về số lượng các kí tự có thể gửi được trong tiêu đề và trong yêu cầu HTTP. Giới hạn dữ liệu này ở khoảng dưới 2000 kí tự. Nêu số lượng kí tự vượt quá số lượng giới hạn thì chúng sẽ không được sử dụng mặc dù script vẫn chạy.
Ví dụ: ta quay lại ví dụ Giải phương trình bậc 2 ở bài trước. Các biến a, b, c được lấy vào trong chương trình bằng cách lấy từ QueryString.