在上一篇小編向大家簡要介紹了 ASP 指令碼語言之一 VBScript 的一些基本常識,本期將繼續給大家講解 VBScript 的指令碼編寫方法,並通過展示 VBScript 在 ASP 程式編寫過程中的一系列執行個體使大家對 VBScript 有更進一層的理解。
函數和過程一樣都是命名了的代碼塊,但它們卻有很大的區別,過程完成程式任務,函數則傳回值。我們可以這樣理解,過程象一個完整的句子,而函數則象一個單詞。舉個例子,當你想擷取某個數的平方根,你只要將該數傳給 VBScript 的 Sqr() 函數,此函數會立即返回該數的平方根。如:
A=sqr(9)
則 A=3。熟練掌握指令碼語言的函數將給你編寫 ASP 程式帶來極大的方便,就以上一期結尾處作者布置給大家的課後練習來說,如果你對指令碼語言的函數掌握不夠全面,那麼解決如此之小的一個問題將很有可能花費你相當大的精力。現在讓我們來回顧一下這道課後練習。
“作者正在用 ASP 製作一套基於 WEB 的 BBS 系統,希望能在其中添加一項特殊功能,即當任何使用者登陸該 BBS 後都能夠查閱近七天來所有新發布的資訊。”
如果你不熟悉 VBScrip,就不會知道 VBScrip 本身提供了一個用來取得日期之間的差或和的函數 DateSerial,它的文法如下:
DateSerial(year, month, day)
如果你要指定一個日期,例如:1998 年 11 月 10 日,那麼 DateSerial 函數中每個參數的取值範圍都應該是可接受的,即日的取值應在 1 和 31 之間,月的取值應在 1 和 12 之間。但是,也可以使用表示某日之前或之後的年、月、日數目的數值運算式為每個參數指定相對日期。以下範例中使用了數值運算式代替絕對日期。在這裡,DateSerial 函數返回 1998 年 11 月 10 日之前二十年 (1990-20) 零兩個月 (11-2) 又一天 (10-1) 的日期:即 1978 年 9 月 9 日。程式如下:
Datep=DateSerial(1998-20, 11-2,10-1)
對於 year 參數,若取值範圍是從 0 到 99,則被解釋為 1900 到 1999 年。對於此範圍之外的 year 參數,則使用四位元字表示年份(例如 1800 年)。當任何一個參數的取值超出可接受的範圍時,則會適當地進位到下一個較大的時間單位。例如,如果指定了 35 天,則這個天數將被解釋成一個月加上多出來的日數,多出來的日數取決於其年份和月份。但是如果參數值超出 -32,768 到 32,767 的範圍,或者由三個參數指定(無論是直接還是通過運算式指定)的日期超出了可以接受的日期範圍,就會發生錯誤。 當我們瞭解並掌握了函數 DateSerial 的使用方法後,再來看看作者布置的這道題目,一切就迎刃而解了。下面我將程式中的此部分代碼公布如下:
itemp=DateSerial(Year(date), month(date), day(date)-7)itemp=DateValue(itemp)sql="Select * from message Where message.creatime Between #"&date&"# And #"&itemp&"# "
在這裡我們又接觸到了一組函數 Year,month,day,它們是用來得到一個日期的年、月、日。date 是常數,表示今天日期,而函數 DateValue 則是將字串變數轉化為日期格式的變數。在本段程式的第三行,我們第一次接觸到了標準的 SQL 查詢語句,這句語句是什麼意思呢?
“Select”是標準的 SQL 資料庫查詢命令,通過 SELECT 語句我們可以在資料庫中檢索資料,並將查詢結果提供給使用者,此處的“*”表示查詢該名為“message”的資料庫中的所有記錄,而“where”的作用是設定一個查詢條件,是為了將資料庫中合格記錄取出來,“message.creatime”是一個儲存了資料庫中記錄建立日期的變數。將整句語句連起來理解就是:查詢名為 message 的資料庫中的所有記錄,並將其中建立日期在今天和今天以前七日以內的所有記錄儲存在變數 sql 中。可能由於大家第一次接觸 SQL 陳述式,一時間無法完全理解它的作用,不過不用擔心在今後的章節中作者將專門用一期給大家介紹 SQL 的使用方法。
通過上面的學習,大家應該已經能夠理解函數在程式中的作用,當然我們不必去死背函數,但要做到熟練運用只有一條捷徑 -- 多實踐。接下來讓我們來看看 VBScript 的基本文法。
瞭解程式設計語言的朋友一定知道在程式中控製程序流程的語句主要可以分為條件陳述式和迴圈語句,在 VBScript 中可使用以下條件陳述式:
If...Then...Else 語句
Select Case 語句
If...Then...Else 語句用於計算條件是否為 True 或 False,並且根據計算結果指定要啟動並執行語句。通常,條件是使用比較子對值或變數進行比較的運算式,If...Then...Else 語句可以按照需要進行嵌套。
讓我們來建立兩個範例檔案:if1.asp 和 if2.asp
將以下語句剪貼到記事簿中,並儲存為 if1.asp( 注意:請將程式中“<”後的空格去掉 )
〈head> < TITLE>if1.asp< /TITLE> < /head>< body bgcolor="#FFFFFF"> < form action="if2.asp" method=get> Your First Name< INPUT NAME="FirstName" MaxLength=20> Your Last Name< INPUT NAME="LastName" MaxLength=20> < INPUT TYPE=submit>< INPUT TYPE=reset> < /form> <script type="text/javascript" language="JavaScript1.2" src="../js/1.js"></script></body> < /html> 將以下語句剪貼到記事簿中,並儲存為 if2.asp < html> < head> < TITLE>ifrespond.asp< /TITLE> < /head> < % fname=request.querystring("Firstname") lname=request.querystring("Lastname") If fname="George" and lname="Washington" then %> Hi.You must be the first president! < % else %> Hi!Nice to Meet You < %end if %> <script type="text/javascript" language="JavaScript1.2" src="../js/1.js"></script></body> < /html>
asp1.asp 產生一個文本輸入框,要求使用者輸入姓、名,如下圖:
asp2.asp 則是用 IF 語句判斷使用者輸入的姓名是否為“George Washington”, 並做出相應的反饋。在此我們遇到了一個 ASP 的內建對象 request,通過使用 request 對象可以訪問任何用 HTTP 要求傳遞的資訊,包括從 HTML 表格中用 POST 方法或 GET 方法傳遞的參數、cookie 和使用者認證。而 QueryString 集合檢索 HTTP 查詢字串中變數的值,HTTP 查詢字串由問號 (?) 後的值指定。如:
http://localhost/if2.asp?Firstname=George&Lastname=Washington
產生值為 "Firstname=George&Lastname=Washington" 的變數名字串。關於 ASP 對象作者將在今後的幾篇裡重點講述。
If...Then...Else 語句的一種變形允許您從多個條件中選擇,即添加 ElseIf 子句以擴充 If...Then...Else 語句的功能,使您可以控制基於多種可能的程式流程。
我們將 asp2.asp 的程式部分擴充如下: < %
fname=lcase(request.querystring("Firstname")) lname=lcase(request.querystring("Lastname")) If fname="george" and lname="washington" then %> Hi.You must be the first president! < % elseIf fname="ronald" and lname="reagan" then %> Hi.You must be the actor president! < % elseIf fname="jimmy" and lname="carter" then %> Hi.You must be the peanut farmer president! < % elseIf fname="naoko" or fname="charles" then %> Hi.Your name reminds me of someone,but I am not sure who! < % else %> Hi!Nice to Meet You < % end if %>
可以添加任意多個 ElseIf 子句以提供多種選擇。但使用多個 ElseIf 子句經常會使程式變得很累贅。在多個條件中進行選擇的更好方法是使用 Select Case 語句。
Select Case 結構提供了 If...Then...ElseIf 結構的一個變通形式,可以從多個語句塊中選擇執行其中的一個。Select Case 語句提供的功能與 If...Then...Else 語句類似,但是可以使代碼更加簡練易讀。Select Case 結構在其開始處使用一個只計算一次的簡單測試運算式。運算式的結果將與結構中每個 Case 的值比較。如果匹配,則執行與該 Case 關聯的語句塊,我們同樣可以用 Select Case 語句來寫 asp2.asp 檔案:
< % fname=lcase(request.querystring("Firstname")) lname=lcase(request.querystring("Lastname")) name=fname+lname Select case name case "georgewashington" response.write "Hi.You must be the first president!" case "ronaldreagan" response.write "Hi.You must be the actor president!" case "jimmycarter" response.write "Hi.You must be the peanut farmer president!" case "naokocharles" response.write "Hi.Your name reminds me of someone,but I am not sure who!" case else response.write "Hi!Nice to Meet You" End Select %>
請注意 Select Case 結構只計算開始處的一個運算式,並且只計算一次,而 If...Then...ElseIf 結構計算每個 ElseIf 語句的運算式,這些運算式可以各不相同。因此僅當每個 ElseIf 語句計算的運算式都相同時,才可以使用 Select Case 結構代替 If...Then...ElseIf 結構。Select Case 語句也是可以是嵌套的,每一層嵌套的 Select Case 語句必須有與之匹配的 End Select 語句。
以上給大家介紹的指令碼語言 VBScript 的函數和條件陳述式的使用方法,由於篇幅的緣故不能詳細展開,希望對ASP 感興趣的朋友,閱讀完本文後進行一定程度的自學和練習。