ASP技術(shù)在論壇中的使用(3)(吐血推薦。。。。
發(fā)表時間:2024-02-16 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]先要給出一個表單,能夠讓網(wǎng)友輸入注冊信息,這些是HTML的內(nèi)容,且放在一邊,我們來仔細看看具體實現(xiàn)注冊的ASP腳本。 ' 將數(shù)據(jù)中的單引號改成兩個單引號,并且在前后加上單引號 Function SqlStr( data ) SqlSt...
先要給出一個表單,能夠讓網(wǎng)友輸入注冊信息,這些是HTML的內(nèi)容,且放在一邊,我們來仔細看看具體實現(xiàn)注冊的ASP腳本。
' 將數(shù)據(jù)中的單引號改成兩個單引號,并且在前后加上單引號
Function SqlStr( data )
SqlStr = "'" & Replace( data, "'", "''" ) & "'"
End Function
這是一個自定義的函數(shù),用來把用戶輸入中的單引號(’)轉(zhuǎn)換成兩個單引號(’’)。在ASP中,用雙引號圍著的是字符串,因而上面的"'"代表的就是只有一個單引號的字符串。之所以要把一個單引號換成兩個單引號,這是因為在SQL語句中,用單引號圍起來是用來代表變量的。為了不至于混淆,就要把字符串中的單引號用兩個單引號來表示。而所有的用戶輸入都要作為變量嵌入到SQL語句中的,所以這個函數(shù)是必不可少的。
'存貯準(zhǔn)備
id=Request("id")
password=Request("password")
nickname=Request("nickname")
email=Request("email")
sex=request("sex")
把來自用戶輸入表單中的內(nèi)容保存在變量中,這不是必須的,但寫了更容易讀寫。
if Request("name")="" then name=" " else name=request("name")
if Request("phone")="" then phone=" " else phone=request("phone")
因為這些內(nèi)容不是必須填的,為了防止用戶沒有輸入任何內(nèi)容,而造成數(shù)據(jù)庫操作上的錯誤,就必須把沒有填入字段用空格來代替。
'建立連接
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
這一段是建立數(shù)據(jù)庫連接,數(shù)據(jù)庫的名稱為bbssystem.mdb,這一段中唯一要注意的是Server.MapPath函數(shù)的應(yīng)用。一般來說,凡是涉及到具體的目錄的地方,都不要直接使用目錄名,而用Server.MapPath函數(shù)來代替。善用好Server.MapPath和Request.ServerVariables()等函數(shù),能夠讓你的WEB應(yīng)用具有更好的可移植性。
Set cmd = Server.CreateObject("ADODB.Command")
'查詢作者是否已存在
Set cmd.ActiveConnection = conn
cmd.CommandText = "查詢作者"
ReDim param(0) ' 聲明參數(shù)數(shù)組
param(0) = CStr(id) ' Cint 不可忽略
Set rs = cmd.Execute( ,param )
這一段就是用來執(zhí)行存貯查詢的。在ADO中執(zhí)行查詢的方法有很多種,但是對于存貯查詢就只能使用Command對象了。首先,建立了一個叫做cmd的Command對象,然后把conn連接對象賦給cmd對象的ActiveConnection屬性,把要執(zhí)行的查詢名稱"查詢作者"賦給CommandText屬性,然后為查詢參數(shù)賦值。我們聲明了一個參數(shù)數(shù)組param(0),因為在"查詢作者"這個查詢中只有一個參數(shù),所以數(shù)組就只有一個分量了。一般的,在查詢中有幾個參數(shù),就要申明有相應(yīng)分量個數(shù)的參數(shù)數(shù)組。并且參數(shù)出現(xiàn)的順序是個數(shù)組中分量的順序是對應(yīng)的。在使用參數(shù)查詢的過程中,尤其要注意的是,參數(shù)的類型要嚴格匹配,否這就會出錯,所以上面的CStr()類型轉(zhuǎn)換函數(shù)是不可缺少的。
if not (rs.eof or rs.bof) then
response.write "
錯誤,你輸入的ID號已經(jīng)被占用,請換一個再試試!
"
else
sql = "Insert Into 作者表 (id, 昵稱, Email, 密碼,姓名,學(xué)校,系別,性別,電話) Values( "
sql = sql & SqlStr(id) & ", "
sql = sql & SqlStr(nickname) & ", "
sql = sql & SqlStr(email) & ", "
sql = sql & SqlStr(password) & ", "
sql = sql & SqlStr(name) & ", "
sql = sql & SqlStr(school) & ", "
sql = sql & SqlStr(department) & ", "
sql = sql & SqlStr(sex) & ", "
sql = sql & SqlStr(phone) & ")"
conn.Execute sql
調(diào)用一個SQL的Insert語句把數(shù)據(jù)插入到數(shù)據(jù)庫中。其實這一查詢也可以做成存貯查詢放在數(shù)據(jù)庫中,我偷了點懶:-)不過對比之下也可以看到存貯查詢的好處,運行時查詢寫起來實在是太麻煩了。