程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP基礎知識 >> 新手asp編程的基本法則

新手asp編程的基本法則

日期:2017/1/14 15:52:05      編輯:ASP基礎知識

一、新手常犯的錯誤
在論壇看到很多帖子代碼中都有一個共同的基本錯誤,字段類型錯誤。
程序和數據庫是緊緊相連的,數據庫字段文本型或時間型的都使用單引號
比如下面這段修改語句:
conn.execute "update Counts set counts='"&counts&"' where num="&num&" and Atime='"&now()&"'"
等號左邊都是字段名,等號右邊是傳值過來的變量名,counts 字段是文本型,所以寫入時必須前後加單引號,無論是寫入還是查詢都一樣,

後面的查尋語句中,num 字段是數字型,所以前後就沒有單引號了,Atime 字段是時間型所以前後也要加單引號。
最重要的是以ID查詢,ID字段是唯一的並且數字類型,很明顯查詢ID號時前後也不能有單引號
conn.execute "update Counts set counts='"&counts&"' where id='"&id&"'"  '錯誤寫法
conn.execute "update Counts set counts='"&counts&"' where id="&id  '正確寫法

二、ACCESS 數據庫連接
通常數據庫連接有兩種方式,新手基本不知道用哪一種方式,或者在什麼情況下用哪一種,又或者不知道兩者的原理
①直接連接數據庫文件
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("database/yanhang.mdb")

②通過數據源來連接數據庫文件
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="&Server.MapPath("database/yanhang.mdb")

那麼,兩者到底哪一個好呢,當然是第二種,因為第一種其實就是客戶端浏覽器直接讀取數據庫的,所以安全方面差很多,第二種通過數據

源連接,是以服務器數據源工具連接的,與客戶端沒關系,所以數據庫不會暴露給客戶端,安全系數高很多。

ACCESS 數據庫對應程序的應用:①直接連接數據庫文件
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("database/yanhang.mdb")
這樣的數據庫連接方式,添加語句:
set rs=server.createobject("adodb.recordset")   '(正確寫法)
rs.open "select * from dndj",conn,1,3
rs.addnew
rs("bh") = bh
rs("bm") = bm
rs("xm") = xm
rs("xsq") = xsq
rs.update
rs.close
set rs=nothing

set rs=server.createobject("adodb.recordset")  '(錯誤寫法)
sql="insert into dndj(bh,bm,xm,xsq) values('bh','bm','xm','xsq')"
rs.open sql,conn,1,3

ACCESS 數據庫對應程序的應用:②通過數據源來連接數據庫文件
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="&Server.MapPath("database/yanhang.mdb")
這樣的數據庫連接方式,添加語句:
conn.execute "insert into dndj(bh,bm,xm,xsq) values('"&bh&"','"&bm&"','"&xm&"','"&xsq&"')"    '(正確寫法)

set rs=server.createobject("adodb.recordset")  '(錯誤寫法)
sql="insert into dndj(bh,bm,xm,xsq) values('bh','bm','xm','xsq')"
rs.open sql,conn,1,3

三、雙引號的應用
通常我們寫超級連接這樣 <a href="abc.asp?id=<%=rs("id")%>">超級連接</a>
但要是把這個超級連接編譯進asp裡面呢
response.write "<a href=""abc.asp?id="&rs("id")&""">超級連接</a>"   '(正確寫法)
response.write "<a href='abc.asp?id="&rs("id")&"'>超級連接</a>"       '(正確寫法)
response.write "<a href=abc.asp?id="&rs("id")&">超級連接</a>"        '(正確寫法)

response.write "<a href="abc.asp?id=<%=rs("id")%>">超級連接</a>"  '(錯誤寫法)
response.write "<a href="abc.asp?id="&rs("id")&"">超級連接</a>"       '(錯誤寫法)

表單編譯進asp裡  <input type="text" name="id" value="<%rs("id")%>" />
response.write "<input type=""text"" name=""id"" value="""&rs("id")&""" />" '(正確寫法) 注意:這裡有三個雙引號
response.write "<input type='text' name='id' value='"&rs("id")&"' />"       '(正確寫法)
response.write "<input type=text name=id value="&rs("id")&" />"            '(正確寫法)

response.write "<input type="text" name="id" value="<%=rs("id")%>" />"  '(錯誤寫法)
response.write "<input type="text" name="id" value=""&rs("id")&"" />"       '(錯誤寫法)

四、防止ACCESS數據庫被下載的幾個方法
很多動態站點大量應用了數據庫,數據庫理所當然成了一個站點的核心文件。一旦數據庫被非法下載,極有可能被惡意人士破壞網站。或者

竊取資料。

下面提供的方法分別適用使用虛擬主機空間的用戶和有IIS控制權的用戶!

   一:購買虛擬主機空間的,適合沒有IIS控制權
1:發揮你的想象力 修改數據庫文件名
這個是最基本的。我想現在也沒有多少連數據庫文件名都懶得改的人吧? 至於改成什麼,你自己看著辦,至少要保證文件名復雜,不可猜測

性。當然這個時候你的數據庫所在目錄是不能開放目錄浏覽權限的!

2:數據庫名後綴改為ASA、ASP等
這個聽說很流行,不過我測試了好多次,發現並不理想,如果真正要起到防止下載的作用,要進行一些二進制字段添加等設置,一句話,繁

而復雜(如果你的數據庫有很多的話,這個方法實在不是很好)

3:數據庫名前加“#”
只需要把數據庫文件前名加上#、然後修改數據庫連接文件(如conn.asp)中的數據庫地址。原理是下載的時候只能識別 #號前名的部分,對

於後面的自動去掉,比如你要下載:http://bbs.bccn.net/date/#123.mdb (假設存在的話)。無論是IE還是FLASHGET等下到的都是

http://bbs.bccn.net/date/index.htm

今天來看到57樓的兄弟說前面加“#”根本就是垃圾,後來測試了下
使用%23的確能下載:http://bbs.bccn.net/date/[color=red]%23123.mdb
後來我研究了下,中間加空格的浏覽器自動編譯成 %20 也是能夠下載的
最後索性都不用,我就使用#+空格的編譯碼 %23%20.mdb 作為數據庫名字
http://bbs.bccn.net/date/%23%20.mdb
經過測試,使用迅雷和普通的下載工具都不能下載[/color]

4:加密數據庫
用ACCESS將你的數據庫以獨占方式打開後,在工具-安全-設置數據庫密碼,加密後要修改數據庫連接頁, 如:
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=數據庫密碼;dbq=數據庫路徑"
這樣修改後,數據庫即使被人下載了,別人也無法打開(前提是你的數據庫連接頁中的密碼沒有被洩露)
但值得注意的是,由於Access數據庫的加密機制比較簡單,即使設置了密碼,解密也很容易。該數據庫系統通過將用戶輸入的密碼與某一固

定密鑰進行“異或”來形成一個加密串,並將其存儲在*.mdb文件從地址“&H42”開始的區域內。所以一個好的程序員可以輕松制作一個幾十

行的小程序就可以輕松地獲得任何Access數據庫的密碼。因此,只要數據庫被下載,其安全依然是個未知數。
 

 

二:有主機控制權 (當然虛擬空間的設置在這裡依然可以用)
5:數據庫放在WEB目錄外
如你的WEB目錄是e:\webroot,可以把數據庫放到e:\data這個文件夾裡,在e:\webroot裡的數據庫連接頁中
修改數據庫連接地址為:"../data/#123 456.mdb" 的形式,這樣數據庫可以正常調用,但是無法下載的,因為它不在WEB目錄裡!這個方法

一般也適合購買虛擬空間的用戶。

6:使用ODBC數據源。
在ASP等程序設計中,如果有條件,應盡量使用ODBC數據源,不要把數據庫名寫在程序中,否則,數據庫名將隨ASP源代碼的失密而一同失密
例如:
conn.open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("../123/abc/asfadf.mdb")
可見,即使數據庫名字起得再怪異,隱藏的目錄再深,ASP源代碼失密後,也很容易被下載下來。
如果使用ODBC數據源,就不會存在這樣的問題了:conn.open "ODBC-DSN名" ,不過這樣是比較煩的,目錄移動的話又要重新設置數據源了!

7:添加數據庫名的如MDB的擴展映射
這個方法就是通過修改IIS設置來實現,適合有IIS控制權的朋友,不適合購買虛擬主機用戶(除非管理員已經設置了)。這個方法我認為是目

前最好的。只要修改一處,整個站點的數據庫都可以防止被下載。無須修改代碼即使暴露目標地址也可以防止下載。

設置:
在 IIS屬性---主目錄---配置---映射---應用程序擴展那裡添加.mdb文件的應用解析。注意這裡的選擇的DLL(或EXE等)似乎也不是任意的

,選擇不當,這個MDB文件還是可以被下載的,  注意最好不要選擇選擇asp.dll等。你可以自己多測試下
這樣修改後下載數據庫如:http://bbs.bccn.net/data/dvbbs6.mdb。就出現(404或500等錯誤)

8:使用.net的優越性
動網的木鳥就寫過一個防非法下載文件的“WBAL 防盜鏈工具”。記得本論壇曾經也有位牛人也發表過數據庫防下載的插件,是.dll的加載到

IIS裡的。
不過 那個只實現了防止非本地下載的 ,沒有起到真正的防下載數據庫的功能。不過這個方法跟第5種差不多
可以通過修改.NET文件,實現本地也不能下載!

這幾個方法中,只有第7和8個是統一性改的,一次修改配置後,整個站點的數據庫都可以防止下載,其他幾個就要分別修改數據庫名和連接

文件,比較麻煩,不過對於虛擬主機的朋友也只能這樣了!

其實第6種方法應該是第5種方法的擴展,可以實現特殊的功能,但對於不支持.net的主機或者怕設置麻煩的話,還是直接用第5種方法了,而

且默認情況下第6種方法,依然可以通過復制連接到同主機的論壇或留言本發表,然後就可以點擊下載了(因為這樣的引用頁是來自同主機的



這幾個方法各有長短,請自己選擇性地使用。這些方法也不是絕對的安全,還需要網站管理員平時注意一些系統的安全,以及寫ASP代碼本身

的安全 ,否則依然有可能被人下載或者修改數據庫!


字符串截取的四個函數
一、如果只截取前幾位,使用left
二、如果只截取後幾位,使用right
三、如果只截取中間幾位,使用mid
四、分隔符截取,使用split

一、left 截取前3位:得到 ABC
<%
dd="ABCDEFGH"
response.write left(dd,3) '從第1位向後數到第3位
%>

二、right 截取後3位,得到 FGH
<%
dd="ABCDEFGH"
response.write right(dd,3) '從最後1位向前數到第3位
%>

三、mid 截取中間3位,得到 DEF
<%
dd="ABCDEFGH"
response.write mid(dd,4,3) '從第4位開始向後數到第3位
%>

四、split 截取分隔符前後的內容,得到 AB CD EF GH
<%
dd="AB|CD|EF|GH"
response.write split(dd,"|")(0)   '得到內容是 AB
response.write split(dd,"|")(1)   '得到內容是 CD
response.write split(dd,"|")(2)   '得到內容是 EF
response.write split(dd,"|")(3)   '得到內容是 GH

'可以寫成循環語句來將分隔符左右的內容一一顯示出來
for i=0 to 3
    response.write split(dd,"|")(i)&"<br/>"
next

'單獨調用指定分隔符位置的內容
dim dm(3)  '定義一個循環變量
for i=0 to 3
    dm(i)=split(dd,"|")(i)
next

response.write dm(0)   '得到內容是 AB
response.write dm(1)   '得到內容是 CD
response.write dm(2)   '得到內容是 EF
response.write dm(3)   '得到內容是 GH

'如果不確定 dd 裡有多少個分隔符,使用循環參數的時候 to 後面的數字就不能直接寫了,需要統計分隔符的數量
for i=0 to UBound(split(dd,"|"))
    dm(i)=split(dd,"|")(i)
next
%>

今天來說說SQL數據庫的連接方式:
①SQL2000數據庫本地連接
Set conn=Server.CreateObject("ADODB.Connection")
conn.open "provider=sqloledb;server=(local);database=數據庫名;uid=用戶名;pwd=密碼;"

②SQL2000數據庫遠程連接
Set conn=Server.CreateObject("ADODB.Connection")
conn.open "provider=sqloledb;server=200.200.200.200,1433;database=數據庫名;uid=用戶名;pwd=密碼;"

③SQL2005數據庫本地連接
Set conn=Server.CreateObject("ADODB.Connection")
conn.open "provider=SQLNCLI;server=(local);database=數據庫名;uid=用戶名;pwd=密碼;"

④SQL2005數據庫遠程連接
Set conn=Server.CreateObject("ADODB.Connection")
conn.open "driver={sql server};server=200.200.200.200,1433;database=數據庫名;uid=用戶名;pwd=密碼;"

今天來寫一下ASP入門與解說
無論是哪種編程語言不外乎就這幾種功能
1.讀取
2.添加
3.修改
4.刪除
5.查詢
6.統計
只要將這幾種功能運用自如,那麼,你就已經會這門語言了

首先我們談談數據庫:
一般ASP使用 ACCESS 和 SQL 數據庫
初學者最好先使用 ACCESS 數據庫,裝個 OFFIEC 就已經自帶 ACCESS 數據庫了
ACCESS 版本從 ACCESS98 → ACCESS2000 → ACCESS2003 → ACCESS2007
安裝什麼版本的 OFFIEC 就是什麼版本的 ACCESS

SQL數據庫是微軟的產品,目前一般使用的SQL數據庫為 SQL2000 → SQL2005

ASP讀取數據:
<%
Set rs=Server.CreateObject("ADODB.Recordset")
rs.open "select * from 表名 order by id desc",conn,1,1  'order by用來排序 id為排序字段,desc為倒序,asc為順序,1,1為只讀,

1,3為可操作
do while not rs.eof            '循環開始
   response.write rs("abc")      '顯示數據
rs.movenext            '循環下一條數據
loop
rs.close            '關閉rs記錄
set rs=nothing            '清除rs記錄集
%>
瞧,讀取數據就這麼簡單



ASP添加新數據:
第一種添加方式代碼:
<%
Set rs=Server.CreateObject("ADODB.Recordset")
rs.open "select * from 表名",conn,1,3   '這裡添加新數據就不需要排序了,1,3上面我們已經說了,是可對數據庫操作的意思
rs.addnew            '開始新數據
rs("字段1")="123456"     '將數據添加到字段1
rs("字段2")="123456"     '同上
rs.update        '開始向數據庫寫入
rs.close        '關閉rs記錄
set rs=nothing        '清除rs記錄集
%>
這種添加方式適合ACCESS和SQL數據庫的任何方式連接
下面這個添加語句只適合ACCESS的第②種連接方式,同時也適合SQL數據庫任何方式連接
第二種添加方式代碼:
<%
conn.execute "insert into 表名(字段1,字段2) values('123456','123456')" '兩個括號中要一一對應,多個內容添加用逗號隔開
%>
上面這段添加語句唯一不支持ACCESS第①種數據庫連接方式
瞧,添加數據我們也學會了



ASP修改數據:
ASP修改數據多數用在查詢指定的數據然後去修改那條數據
第一種修改方式代碼:
<%
Set rs=Server.CreateObject("ADODB.Recordset")
rs.open "select * from 表名 where id=10",conn,1,3   'where為查詢開始,查詢條件為id等於10的那條數據
rs("字段1")="123456"      '無論字段1中是什麼值,我們都把它改成123456這個值
rs("字段2")="123456"      '同上
rs.update        '開始向數據庫寫入
rs.close        '關閉rs記錄
set rs=nothing        '清除rs記錄集
%>
瞧,修改與添加不同的是少了個rs.addnew,多了個查詢條件,其它完全相同
第二種修改方式代碼:
<%
conn.execute "update 表名 set 字段1='123456',字段2='123456' where id=10" '多個內容修改用逗號隔開
%>
上面這段修改代碼和上面的添加一樣唯一不支持ACCESS第①種數據庫連接方式


ASP刪除數據:
刪除數據也用到查詢,如果沒有查詢,那就是將整個表中的所有內容全部刪除了,如果你只需要刪除其中一條,那就必須使用查詢條件
<%
conn.execute "delete 表名 where id=10"  '查詢到id值等於10的那條數據並且刪除
%>
如果是ACCESS數據庫就要加上from,例如:
<%
conn.execute "delete from 表名 where id=10"
%>
瞧,這個刪除語句就這麼簡短,它和上面讀取,添加,修改語句有所不同



如果你的數據庫連接使用的是ACCESS第②種方式或者使用的是SQL數據,那麼添加,修改,刪除用起來就很簡單了,像下面這樣

添加:conn.execute "insert into 表名(字段1,字段2) values('123456','123456')"
修改:conn.execute "update 表名 set 字段1='123456',字段2='123456' where id=10"
刪除:conn.execute "delete 表名 where id=10"

看起來是不是很清爽



記住,在讀取,添加,修改,刪除,這四個功能之中只有添加不能帶有查詢條件,其他三個根據自己的需要可以帶查詢條件
一、查詢條件可以多個條件
例如:conn.execute "delete 表名 where 字段1='123456' and 字段2='123456' and id=10" 之間用and隔開,and前後一定要空格
      意思是這三個條件必須同時滿足才能查詢出你想要的結果

二、查詢條件可以使用or或者的意思
例如:conn.execute "delete 表名 where 字段1='123456' or 字段2='123456' or id=10" 之間用or隔開,or前後一定要空格
      意思是只要查詢的條件滿足其中之一就能查詢出你想要的結果

三、查詢條件還可以使用and和or同時使用
例如:conn.execute "delete 表名 where (字段1='123456' or 字段2='123456') and id=10"
      意思是只要查詢條件滿足 字段1 或者 字段2 中的一條,並且id等於10的條件,注意:括號要括起來

以上三種查詢條件適合讀取,修改,刪除三個功能



統計使用函數sum,recordcount
統計價格:sum
<%
Set rs=Server.CreateObject("ADODB.Recordset")
rs.open "select sum(價格字段) as price from 表名 order by id desc",conn,1,1  'as就是將統計出來的結果賦值給臨時變量price
   response.write rs("price")      '顯示統計出來的總價格

rs.close
set rs=nothing
%>

統計總數量:recordcount
<%
Set rs=Server.CreateObject("ADODB.Recordset")
rs.open "select * from 表名 order by id desc",conn,1,1
   response.write rs.recordcount      '顯示統計出來的總條數

rs.close
set rs=nothing
%>

代碼是死的,人的大腦是靈活的,就要看你如何去靈活運用吧!

下面我們來說說字段為空的判斷:
字段為空有兩種,一種是默認值設置為字符的比如SQL數據庫字段默認值可以填寫 N''
另一種默認值為空的,字段顯示內容為 null 的
平時我們查詢判斷字段為空的把兩種空都寫上
查詢所有為空的字段:
<%
Set rs=Server.CreateObject("ADODB.Recordset")
rs.open "Select * from 表名 where abc='' or abc is null",conn,1,1
%>
查詢所有不為空的字段:
<%
Set rs=Server.CreateObject("ADODB.Recordset")
rs.open "Select * from 表名 where abc<>'' or is abc not null",conn,1,1
%>

那麼在讀取字段的時候判斷是否為空的:
<%
if isnull(rs(字段名))=true or rs(字段名)="" then
    'true表示為空
else
    'false表示不為空
end if

if rs(字段名) is null or rs(字段名)="" then
    '表示為空
else
    '表示不為空
end if

if not rs(字段名) isnull or rs(字段名)<>"" then
    '表示不為空
else
    '表示為空
end if
%>

數據庫多表連接查詢
學習數據庫查詢的時候對多表連接查詢的有些概念還比較模糊。而連接查詢是在數據庫查詢操作的時候肯定要用到的。對於此概念,我用通

俗一些的語言和例子來進行講解。
首先我們做兩張表:員工信息表和部門信息表,在此,表的建立只為講述連接的概念,所以字段非常的簡單
eTB(員工信息表):
eid   ename tid
0001  張三  01
0002  李四  01
0003  王五  02
0004  趙六  02
0005  鄭七  NULL

tTB(部門信息表)
tid tname
01  技術部
02  市場部
03  工程部 
 


我們現在需要進行連接查詢,連接兩張表檢索數據。分別檢索員工信息表的員工編號、員工姓名和部門信息表中的部門名稱。
顯然,兩個表的連接條件是 員工表的部門編號=部門表的部門編號
注意:鄭七不屬於任何部門(新來的員工,還沒有分配到任何的部門),而工程部不存在任何的員工(比如是一個新成立的部門,還沒有員
工)
1、內連接查詢
我們可以有兩種方式,這兩種是等效的
一種是:Select e.eid,e.ename,d.tname from eTB as e,tTB as d where e.tid=d.tid
二種是:Select e.eid,e.ename,d.tname from eTB as e inner join tTB as d on e.tid=d.tid
檢索的結果都是:
eid   ename tname
0001  張三  技術部
0002  李四  技術部
0003  王五  市場部
0004  趙六  市場部

而“鄭七”和“工程部”的信息是不會檢索出來。因為采用內連接計算的時候必須要保證連接的條件e.tid=d.tid匹配,結果才會被檢索出來

。當我們連接兩張檢索數據的時候,檢索的方式是首先逐行掃描“員工信息表”中的記錄,然後根據連接條件來決定此記錄是否被檢索。比

如對於張三,這條記錄的tid是01(部門編號),它在部門表中能找到和它匹配的編號01,而編號01的部門名稱(tname)是“技術部”所以

張三這條記錄會被檢索,最終的結果肯定是:

0001  張三  技術部

同樣,李四、王五、趙六也能。但是鄭七的部門編號是NULL,它在部門信息表中找不到匹配的項(因為部門信息表中不存在部門編號為NULL

的部門),所以鄭七不會被檢索。
同理,沒有任何人員的部門編號為03,所以工程部的記錄也不會被檢索

2、左外聯結
但是有些情況下,我們需要知道所有員工的信息,即使他不屬於任何部門。這樣我們就可以采用外連接,在這裡為左外連接,也就是連接中

的左表的表中的記錄,無論能不能在右表中找到匹配的項,都要檢索,如果沒有匹配的項目,那麼右表中的字段值為NULL(空),在這裡就

代表,此員工不屬於任何部門。
檢索語句為:Select e.eid,e.ename,d.tname from eTB as e left outer join tTB as d on e.tid=d.tid
檢索的結果都是:
eid   ename tname
0001  張三  技術部
0002  李四  技術部
0003  王五  市場部
0004  趙六  市場部
0005  鄭七  NULL

但是在這裡,工程部同樣不會被檢索,因為,tname是在連接的右邊的表中,“工程部”在左表中不存在任何的記錄,所以不會被檢索。這裡

關注的是“連接中的左邊的表”


3、右外連接
有時,我們需要知道,全部部門的信息,即使它沒有任何的員工。在我們的查詢中部門表在連接的右邊,如果我們想知道右邊表中的所有記

錄信息,那麼就可以采用右外連接,如果此記錄在左邊的表中找不到匹配項,則相應字段(eid,ename)為NULL
檢索語句為:Select e.eid,e.ename,d.tname from eTB as e right outer join tTB as d on e.tid=d.tid
檢索的結果都是:
eid   ename tname
0001  張三  技術部
0002  李四  技術部
0003  王五  市場部
0004  趙六  市場部
NULL  NULL  工程部

但在這裡,鄭七是不會被檢索了,因為它在右表中找不到匹配項,這裡關注的是“連接中的右邊的表”

4、完全外連接
如果我們想知道所有的記錄呢?無論員工有沒有部門,部門有沒有員工,我們都需要檢索。這裡就可以使用完全外連接。關注連接中的兩部

分。如果沒有部門,部門為空,沒有員工,員工信息為空。
檢索語句為:Select e.eid,e.ename,d.tname from eTB as e full outer join tTB as d on e.tid=d.tid
檢索的結果都是:
eid   ename tname
0001  張三  技術部
0002  李四  技術部
0003  王五  市場部
0004  趙六  市場部
0005  鄭七  NULL
NULL  NULL  工程部

經常看到有新手來問如何接收傳送的值
下面我來詳細的說一下接收傳送值的多種方式
獲取傳送值通常使用三種方式來獲取
id=Request("id") '可以是post或get方式傳送的值
id=Request.Form("id") '只能post方式傳送的值
id=Request.Querystring("id") '只能get方式傳送的值

從表單提交的方式傳送的通常使用post方式傳送
例如:
<form action="abc.asp" method="post">
<input type="text" name="Uname" />
<input type="text" name="Pass" />
<input type="submit" name="submit" value="提交" />
</form>
表單形式的提交通常 method屬性值為post的,當然我們也可以改成 method="get",這樣提交過去會自動在地址欄顯示傳送的值了,例如:

http:///abc.asp?Uname=hmhz&Pass=123456
多個參數傳送用 & 符號分隔,格式如上

從地址欄傳送的都為get方式傳送
get傳送形式上面已經寫了,但get方式不一定非得使用表單來傳送,我們可以使用超連接,或用JS傳送均可以
例如:
<a href="abc.asp?id=<%=rs("id")%>">刪除</a>
<a href="javascript:location.href='abc.asp?id=<%=rs("id")%>'>刪除</a>
<a href="javascript:void(0);" onclick="location.href='abc.asp?id=<%=rs("id")%>'">刪除</a>

如果一個頁面很有可能會post方式提交來的參數,也有可能以get方式傳送的,那我們可以使用第一種接收方式
id=Request("id")
就行了,如果這個值只有一種方式傳送的,那最好使用對應的接收方式,因為這樣接收效率才會提高,也在安全上加了道門檻
 

 

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved