Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
NET Core 支持適用于各種內(nèi)置和第三方日志記錄提供程序的日志記錄 API。 本文介紹了如何將日志記錄 API 與內(nèi)置提供程序一起使用。
本文中所述的大多數(shù)代碼示例都來自 ASP.NET Core 應(yīng)用。 這些代碼片段的日志記錄特定部分適用于任何使用通用主機(jī)的 .NET Core 應(yīng)用。 ASP.NET Core Web 應(yīng)用模板使用通用主機(jī)。
日志記錄提供程序存儲日志,但顯示日志的 Console 提供程序除外。 例如,Azure Application Insights 提供程序?qū)⑷罩敬鎯υ?Azure Application Insights 中。 可以啟用多個提供程序。
默認(rèn) ASP.NET Core Web 應(yīng)用模板:
C#
SP.NET 幫助器 - 對象參考手冊
Analytics 對象參考手冊(Google)
Helper | 描述 |
---|---|
Analytics.GetGoogleHtml(webPropertyId) | 為指定的 ID 呈現(xiàn) Google Analytics JavaScript 代碼。 |
Analytics.GetStatCounterHtml(project, security) | 為指定的項(xiàng)目呈現(xiàn) StatCounter Analytics JavaScript 代碼。 |
Analytics.GetYahooHtml(account) | 為指定的賬號呈現(xiàn) Yahoo Analytics JavaScript 代碼。 |
Bing 對象參考手冊
Helper | 描述 |
---|---|
Bing.SearchBox([boxWidth]) | 給 Bing 傳遞搜索。您可以設(shè)置 Bing.SiteUrl 和 Bing.SiteTitle 屬性來設(shè)定站點(diǎn)搜索和搜索框的標(biāo)題,通常是在 _AppStart 頁面設(shè)置這些屬性。 |
Bing.AdvancedSearchBox([, boxWidth] [, resultWidth] [, resultHeight] [, themeColor] [, locale]) | 用可選的格式顯示 Bing 搜索結(jié)果在頁面上。您可以設(shè)置 Bing.SiteUrl 和 Bing.SiteTitle 屬性來設(shè)定站點(diǎn)搜索和搜索框的標(biāo)題,通常是在 _AppStart 頁面設(shè)置這些屬性。 |
Chart 對象參考手冊
Helper | 描述 |
---|---|
Chart(width, height [, template] [, templatePath]) | 初始化圖表。 |
Chart.AddLegend([title] [, name]) | 給圖表添加一個圖例。 |
Chart.AddSeries([name] [, chartType] [, chartArea] [, axisLabel] [, legend] [, markerStep] [, xValue] [, xField] [, yValues] [, yFields] [, options]) | 給圖表添加一系列數(shù)據(jù)。 |
Crypto 對象參考手冊
Helper | 描述 |
---|---|
Crypto.Hash(string [, algorithm]) Crypto.Hash(bytes [, algorithm]) | 返回指定數(shù)據(jù)的哈希。默認(rèn)算法是 sha256。 |
Facebook 對象參考手冊
Helper | 描述 |
---|---|
Facebook.LikeButton(href [, buttonLayout] [, showFaces] [, width] [, height] [, action] [, font] [, colorScheme] [, refLabel]) | 讓 Facebook 用戶連接到網(wǎng)頁。 |
FileUpload 對象參考手冊
Helper | 描述 |
---|---|
FileUpload.GetHtml([initialNumberOfFiles] [,allowMoreFilesToBeAdded] [, includeFormTag] [, addText] [, uploadText]) | 為上傳文件呈現(xiàn) UI。 |
GamerCard 對象參考手冊
Helper | 描述 |
---|---|
GamerCard.GetHtml(gamerTag) | 呈現(xiàn)指定的 Xbox gamer 標(biāo)簽。 |
Gravatar 對象參考手冊
Helper | 描述 |
---|---|
Gravatar.GetHtml(email [, imageSize] [, defaultImage] [, rating] [, imageExtension] [, attributes]) | 為指定的電子郵件地址呈現(xiàn) Gravatar 圖像。 |
Json 對象參考手冊
Helper | 描述 |
---|---|
Json.Encode(object) | 用 JavaScript Object Notation (JSON) 把數(shù)據(jù)對象轉(zhuǎn)換為字符串。 |
Json.Decode(string) | 轉(zhuǎn)換 JSON 編碼的輸入字符串為您指定的數(shù)據(jù)對象。 |
LinkShare 對象參考手冊
Helper | 描述 |
---|---|
LinkShare.GetHtml(pageTitle [, pageLinkBack] [, twitterUserName] [, additionalTweetText] [, linkSites]) | 使用指定的標(biāo)題和可選的 URL 呈現(xiàn)社會網(wǎng)絡(luò)鏈接。 |
ModelState 對象參考手冊
Helper | 描述 |
---|---|
ModelStateDictionary.AddError(key, errorMessage) | 關(guān)聯(lián)錯誤信息和一個表單域。使用 ModelState 幫助器訪問成員。 |
ModelStateDictionary.AddFormError(errorMessage) | 關(guān)聯(lián)錯誤信息和一個表單。使用 ModelState 幫助器訪問成員。 |
ModelStateDictionary.IsValid | 如果沒有驗(yàn)證錯誤,返回 true。使用 ModelState 幫助器訪問成員。 |
ObjectInfo 對象參考手冊
Helper | 描述 |
---|---|
ObjectInfo.Print(value [, depth] [, enumerationLength]) | 呈現(xiàn)一個對象和所有子對象的屬性和值。 |
Recaptcha 對象參考手冊
Helper | 描述 |
---|---|
Recaptcha.GetHtml([, publicKey] [, theme] [, language] [, tabIndex]) | 呈現(xiàn) reCAPTCHA 驗(yàn)證測試。 |
ReCaptcha.PublicKey ReCaptcha.PrivateKey | 設(shè)置 reCAPTCHA 服務(wù)的公共和私有密鑰。通常是在_AppStart 頁面設(shè)置這些屬性。 |
ReCaptcha.Validate([, privateKey]) | 返回 reCAPTCHA 測試結(jié)果。 |
ServerInfo.GetHtml() | Renders 呈現(xiàn)有關(guān) ASP.NET Web Pages 的狀態(tài)信息。 |
Twitter 對象參考手冊
Helper | 描述 |
---|---|
Twitter.Profile(twitterUserName) | 為指定的用戶呈現(xiàn) Twitter 流。 |
Twitter.Search(searchQuery) | 為指定的搜索文本呈現(xiàn) Twitter 流。 |
Video 對象參考手冊
Helper | 描述 |
---|---|
Video.Flash(filename [, width, height]) | 為指定的文件呈現(xiàn)寬度和高度可選的 Flash 視頻播放。 |
Video.MediaPlayer(filename [, width, height]) | 為指定的文件呈現(xiàn)寬度和高度可選 的 Windows Media 播放器。 |
Video.Silverlight(filename, width, height) | 為指定的 .xap 文件呈現(xiàn)所需的寬度和高度 的 Silverlight 播放器。 |
WebCache 對象參考手冊
Helper | 描述 |
---|---|
WebCache.Get(key) | 通過 key 返回指定的對象,如果對象未找到則返回 null。 |
WebCache.Remove(key) | 通過 key 從緩存中刪除指定的對象。 |
WebCache.Set(key, value [, minutesToCache] [, slidingExpiration]) | 通過 key 把 value 放置到指定名稱的緩存中。 |
WebGrid 對象參考手冊
Helper | 描述 |
---|---|
WebGrid(data) | Creates a 使用查詢數(shù)據(jù)創(chuàng)建一個新的 WebGrid 對象。 |
WebGrid.GetHtml() | Renders markup 顯示數(shù)據(jù)在 HTML 表格中。 |
WebGrid.Pager() | 為 WebGrid 對象呈現(xiàn)一個頁面。 |
WebImage 對象參考手冊
Helper | 描述 |
---|---|
WebImage(path) | 從指定的路徑加載一個圖像。 |
WebImage.AddImagesWatermark(image) | 為指定圖像加水印。 |
WebImage.AddTextWatermark(text) | 為圖像添加指定文本。 |
WebImage.FlipHorizontal() WebImage.FlipVertical() | 水平/垂直翻轉(zhuǎn)圖像 |
WebImage.GetImageFromRequest() | 當(dāng)圖像被傳送到一個文件上傳頁面時,加載圖像。 |
WebImage.Resize(width, height) | 調(diào)整圖像大小。 |
WebImage.RotateLeft() WebImage.RotateRight() | 向左或向右旋轉(zhuǎn)圖像。 |
WebImage.Save(path [, imageFormat]) | 保存圖像到指定路徑。 |
鳥學(xué)ASP
學(xué)習(xí)目的:安裝調(diào)試ASP的環(huán)境,并且調(diào)試第一個簡單的程序。
因?yàn)槲覀儗W(xué)ASP的目的就是想建立一個網(wǎng)站,那么一般習(xí)慣是建立的網(wǎng)站內(nèi)所有文件應(yīng)該同時放到一個文件夾中(當(dāng)然這個文件夾中還可以按需要設(shè)置子文件夾!),所以在這里我在E盤建立一個myweb的文件夾。
首先來安裝Windows 2000/XP自帶的IIS作為服務(wù)器。在這里因?yàn)槲业臋C(jī)器是XP所以所有截圖都是XP下完成的。
控制面板-->>添加或刪除程序。
然后是添加刪除windows組件-選中IIS組件前面的勾,之后等待安裝,這里可以觀看本站以前給大家做的視頻教程,完成安裝后。
之后在控制面板中雙擊“管理工具”。
然后雙擊“internet信息服務(wù)”,這就是IIS。
選擇“默認(rèn)網(wǎng)站”,然后右鍵屬性或者直接按快捷鍵
在屬性頁面內(nèi)只有三個頁面需要修改,先是網(wǎng)站,如果用戶有固定IP,可以分配一個IP
接下來在注主目錄中選擇一個自己硬盤上面的文件夾存放網(wǎng)站(這個目錄就是我們上面說的在e盤建立的目錄),選中讀取、寫入
在文檔中添加默認(rèn)的頁面,比如打http://www.liexiaow.com獵校網(wǎng) 調(diào)用了一個默認(rèn)文檔即是你添加的頁面。
接下來也是最關(guān)鍵的:
1、在剛才你定義的一個文件夾里面新建一個文件,可以用記事本建立一個文本文件然后把下面的內(nèi)容復(fù)制到記事本中:
<%response.write "hello world!"%>
保存為1.asp文件(注意:.asp不能省略啊,如果省略了你就保存了一個文本文件了)。
最后打開IE,在地址欄內(nèi)輸入:http://127.0.0.1/1.asp(或者h(yuǎn)ttp://localhost/1.asp)回車后就可以看到效果了。
最后解釋一下代碼的含義。
response.write就是顯示的意思,前后的 <% 和 %> 是asp的標(biāo)記符號,在這里面的信息都由服務(wù)器處理。127.0.0.1是地址,1.asp是文件名。第一天就結(jié)束了!
表單元素要放在一個表單域里面,建立一個表單域。然后修改動作里面的文件為要接受這個表單變量的ASP文件。方法有兩種,一種是POST,這個方法傳送的變量不會在瀏覽器的地址欄里面顯示,可以大批量傳送數(shù)據(jù);GET則是會在瀏覽器地址欄里面顯示的,等一會舉例子。
下面我們看一個表單元素。
文本域,這個是最基本的,傳送的是文本信息,一般用戶名,密碼都要用這個傳送,不過要是密碼的話要在類型里面選擇密碼,這樣就會以*代替顯示出來的字符,文本域的名字很重要,以后會用到這個名字所以一般不用默認(rèn)的名字。
現(xiàn)在舉一個例子:如果文本域的名字是name的話,用來傳送網(wǎng)上用戶登記的名字,在表單域里面,傳送到reg.asp,用POST方法,那么在reg.asp里面這樣得到變量<%name=request.form("name")%>如果要顯示變量再家加一句,response.write name,這樣就形成了一個從客戶端到瀏覽器再回到客戶端的過程。如果方法用的是GET的話,那么就改為name=request.querystring("name")實(shí)際上兩者可以統(tǒng)一為name=request("name")。下面看看按鈕,按鈕里面無非兩種,一種是提交表單的按鈕,一種是重新輸入的按鈕。單選按鈕,一個按鈕有一個值。在列表里面同樣,添加列表選項(xiàng)和值。下面舉一個例子,實(shí)際上各種表單元素都是差不多的。
下面是具體的代碼: (注:把下面代碼保存為一個.htm的文件就可以了.我保存的1.htm)
<form name="form1" method="post" action="reg.asp">
姓名:
<input type="text" name="name"> //文本域,名字叫name
<br>
密碼:
<input type="password" name="psw"> //文本域,用來輸入密碼,名字叫psw
<br>
<br>
性別:
<input type="radio" name="sex" value="男"> //單選,名字叫sex,數(shù)值是"男"
男
<input type="radio" name="sex" value="女"> //單選,名字叫sex,數(shù)值是"女"
女 <br>
<br>
城市:
<select name="city">
<option value="上海" selected>上海</option> //復(fù)選,大家自己分析一下
<option value="北京">北京</option>
</select>
<br>
<input type="submit" name="Submit" value="提交"> //提交按鈕
<input type="reset" name="Submit2" value="重置">
</form>
下面是reg.asp的代碼,用來顯示出剛才受到的信息:
<%
name=request.form("name")
psw=request.form("psw")
sex=request.form("sex")
city=request.form("city")
response.write name
response.write psw
response.write sex
response.write city
%>
打開瀏覽器在地址欄內(nèi)輸入:http://localhost/1.htm如下圖:(呵呵,因?yàn)槭蔷毩?xí),我沒有美化頁面啊!)
下面我們要開始學(xué)數(shù)據(jù)庫了!只要把表單和數(shù)據(jù)庫相應(yīng)的字段連接上就可以了。
學(xué)會ACCEES數(shù)據(jù)庫的使用。
首先,要安裝OFFICE里面的ACCEES(我的演示是OFFICE 2003版本),安裝過程這里就不說了,安裝好以后會,打開Access.按空數(shù)據(jù)庫,新建一個數(shù)據(jù)庫,文件名字可以叫g(shù)uestbook.mdb。(提示:為了安全期間,文件名復(fù)雜一點(diǎn)好,因?yàn)锳CCESS數(shù)據(jù)庫可以被下載的!!)
使用設(shè)計(jì)器創(chuàng)建新的表,一個數(shù)據(jù)庫MDB文件里面可以建立多個表。雙擊“使用設(shè)計(jì)器創(chuàng)建表”
填寫字段名字然后選擇字段類型,一條記錄可以有很多字段,可以有很多字段類型,字段大小的意思就是這個字段最多可以容納的字符數(shù),當(dāng)這個字段沒有任何信息是,ACCEES會用默認(rèn)值代替(沒有任何信息不是空的意思),一般必填字段和允許空字符串分別設(shè)置為否、是,以防止出錯
按照上圖分別建立幾個字段,在時間中默認(rèn)值為=now()就是這個字段不需要填寫,系統(tǒng)直接以當(dāng)前時間代替。
所以的字段都建立以后,關(guān)閉這個窗口,按提示保存表,輸入表的名字guest,最后出現(xiàn)下圖的提示,選擇是,主鍵是記錄的標(biāo)識,為了以后簡單,大家可以把編號改為ID,還有在ACCEES里面盡量不要用中文表示字段名字
最后,雙擊打開這個表,觀看表里面的記錄
握ACCESS數(shù)據(jù)庫的連接和讀取記錄
首先還打開我們上一節(jié)課建立的數(shù)據(jù)庫中的表,隨便輸入幾條記錄,如下圖:
這節(jié)課學(xué)習(xí)的內(nèi)容有一點(diǎn)枯燥,但是很重要。在這里不需要知道命令具體的運(yùn)行情況,外面的很多書籍之所以不適合入門就是因?yàn)榻榻B了太多的理論知識,讓初學(xué)者一頭霧水。
下面開門見山,看兩行代碼:
<%
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("data/guestbook.mdb")
%>
第一行定義了一個adodb數(shù)據(jù)庫連接組件,第二行連接了數(shù)據(jù)庫,大家只要修改后面的數(shù)據(jù)庫名字就可以了。是不是很簡單?
下面再看三行:
<%
exec="select * from guest"
set rs=server.createobject("adodb.recordset")
rs.open exec,conn,1,1
%>
這三行加在前面兩行的后面,第一句:設(shè)置查詢數(shù)據(jù)庫的命令,select后面加的是字段,如果都要查詢的話就用*,from后面再加上表的名字,我們前面建立的是不是一個gust表阿?第二句:定義一個記錄集組件,所有搜索到的記錄都放在這里面,第三句是打開這個記錄集,exec就是前面定義的查詢命令,conn就是前面定義的數(shù)據(jù)庫連接組件,后面參數(shù)“1,1”,這是讀取,后面講到修改記錄就把參數(shù)設(shè)置為1,3,好了接下來我們讀取記錄。
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<%do while not rs.eof%><tr>
<td><%=rs("name")%></td>
<td><%=rs("tel")%></td>
<td><%=rs("message")%></td>
<td><%=rs("time")%></td>
</tr><%
rs.movenext
loop
%>
</table>
//下面的三條語句是用于關(guān)閉數(shù)據(jù)庫
rs.close
set rs=nothing
conn.close
set conn=nothing
在一個表格中,我們用4列分別顯示了上次建立的表里面的四個字段,用do循環(huán),not rs.eof的意思是條件為沒有讀到記錄集的最后,rs.movenext的意思是顯示完一條轉(zhuǎn)到下面一條記錄,<%=%>就等于<%response.write%>用于在html代碼里面插入asp代碼,主要用于顯示變量。
把上面三段代碼依次復(fù)制粘貼到剪貼板中,一定要按順序復(fù)制粘貼啊!,然后保存為duqu.asp就可以了!打開瀏覽器,在地址欄內(nèi)輸入:http://localhost/duqu.asp.
下面是我機(jī)器上面的結(jié)果圖片。
學(xué)會數(shù)據(jù)庫的基本操作--寫入記錄
數(shù)據(jù)庫的基本操作無非是:查詢記錄,寫入記錄,刪除記錄,修改記錄。
今天我們先學(xué)習(xí)寫入記錄。先建立一個表單:(把下面文章保存為5.htm)
<form name="form1" method="post" action="exa5.asp">
name <input type="text" name="name"><br>
tel <input type="text" name="tel"><br>
message <input type="text" name="message" value=""><br>
<input type="submit" name="Submit" value="提交">
<input type="reset" name="Submit2" value="重置">
</form>
表單提交到exa5.asp,下面是exa5.asp的代碼: (把下面代碼保存為5.asp)
<%
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("data/guestbook.mdb")
name=request.form("name")
tel=request.form("tel")
message=request.form("message")
exec="insert into guest(name,tel,message)values('"+name+"',"+tel+",'"+message+"')"
conn.execute exec
conn.close
set conn=nothing
response.write "記錄添加成功!"
%>
在這里前面兩句我不說了,后面三句我也不說了,前面說過exec里面的是執(zhí)行的命令,添加記錄的比較繁,大家要仔細(xì)看。
insert into后面加的是表的名字,后面的括號里面是需要添加的字段,不用添加的或者字段的內(nèi)容就是默認(rèn)值的可以省略。注意,這里的變量一定要和ACCESS里面的字段名對應(yīng),否則就會出錯。values后面加的是傳送過來的變量。exec是一個字符串,"insert into guest(name,tel,message)values('"是第一段,在ASP里面不能嵌雙引號,所以可以用'代替雙引號,放在雙引號里面,連接兩個變量用+或者&所以"',"又是一段,中間夾了一個name就是表單傳來的變量,這樣就可以在這個變量外面加兩個'',表示是字符串了,后面的tel是數(shù)字型變量所以不需要外面包圍'',大家慢慢分析這句話,如果用表單傳來的數(shù)據(jù)代替變量名字的話這句話為(假設(shè)name="aaa",tel=111,message="bbb"):"insert into guest(name,tel,message)values('aaa',111,'bbb')"。
接下來的conn.execute 就是執(zhí)行這個exec命令,最后別忘記把打開的數(shù)據(jù)庫關(guān)閉,把定義的組件設(shè)置為空,這樣可以返回資源。
下面幾條語句用于關(guān)閉數(shù)據(jù)庫的代碼:
rs.close
set rs=nothing
conn.close
set conn=nothing
記住,次序不可以顛倒! 可以到數(shù)據(jù)庫里面去看一看,或者用duqu.asp讀取看看是不是多了記錄阿?下面是我利用上一節(jié)的文件讀取數(shù)據(jù)庫的圖:
學(xué)會數(shù)據(jù)庫的基本操作--查詢記錄
在第四天中我們用到下面這樣一個程序:
<%
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("data/guestbook.mdb")
exec="select * from guest"
set rs=server.createobject("adodb.recordset")
rs.open exec,conn,1,1
%>
我們查詢的是所有的記錄,但是我們要修改、刪除記錄的時候不可能是所有記錄,所有我們要學(xué)習(xí)檢索合適的記錄。先看一條語句:
a="aaa"
b=1111110
exec="select * from guestbook where name='"+a+"'and tel="+b
where后面加上的是條件,與是and,或是or,我想=,<=,>=,<,>的含義大家都知道吧。這句話的意思就是搜索name是“aaa”的,并且電話是“1111110”的記錄。還有一點(diǎn)就是如果要搜索一個字段里面是不是包含一個字符串就可以這么寫:where instr(name,a)也就是搜索name里面有a(aaa)這個字符串的人。
我這里的a,b,是常量,大家可以讓a,b是表單提交過來的變量,這樣就可以做一個搜索了。
下面大家看看這個代碼,理解一下:(把下面代碼存為6.htm文件)
<form name="form1" method="post" action="exam6.asp">
搜索:<br>
name=<input type="text" name="name">
and tel=<input type="text" name="tel">
<br>
<input type="submit" name="Submit" value="提交">
<input type="reset" name="Submit2" value="重置">
</form>
exam6.asp(把下面代碼存為exam6.asp)
<%
name=request.form("name")
tel=request.form("tel")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("data/guestbook.mdb")
exec="select * from guest where name='"+name+"' and tel="+tel
set rs=server.createobject("adodb.recordset")
rs.open exec,conn,1,1
%>
<html>
<head>
<title>無標(biāo)題文檔</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<%
do while not rs.eof
%><tr>
<td><%=rs("name")%></td>
<td><%=rs("tel")%></td>
<td><%=rs("message")%></td>
<td><%=rs("time")%></td>
</tr>
<%
rs.movenext
loop
%>
</table>
</body>
</html>
首先在瀏覽器中輸入http://localhost/6.htm如下圖所示:
學(xué)會數(shù)據(jù)庫的基本操作--刪除記錄
開門見山,大家直接看程序。
exec="delete * from guest where id="&request.form("id")
上面這句話完成了刪除記錄的操作,不過鎖定記錄用了記錄唯一的表示id,我們前面建立數(shù)據(jù)庫的時候用的是系統(tǒng)給我們的主鍵,名字是編號,由于是中文的名字不是很方便,大家可以修改為id,我已經(jīng)修改了啊!
不修改的話就是用下面的代碼了:
exec="delete * from guestbook where 編號="&request.form("id")
下面我們看完整的代碼:一個表單傳給ASP文件一個ID,然后這個ASP文件就刪除了這個ID。
7.htm:
<form name="form1" method="post" action="exam7.asp">
請輸入刪除的ID號:
<input type="text" name="id">
<input type="submit" name="Submit" value="提交">
</form>
exam7.asp:(可以先運(yùn)行這個文件看一下所有記錄的ID和想刪除記錄的ID,刪除記錄以后也可以通過這個文件復(fù)查。)
<%
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("data/guestbook.mdb")
exec="select * from guest"
set rs=server.createobject("adodb.recordset")
rs.open exec,conn,1,1
%>
<html>
<head>
<title>無標(biāo)題文檔</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<%
do while not rs.eof
%><tr>
<td><%=rs("id")%></td>
<td><%=rs("name")%></td>
<td><%=rs("tel")%></td>
<td><%=rs("message")%></td>
<td><%=rs("time")%></td>
</tr>
<%
rs.movenext
loop
%>
</table>
</body>
</html>
學(xué)會數(shù)據(jù)庫的基本操作--修改記錄
先來看代碼:(存為exam8.asp就可以了)
<%
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("data/guestbook.mdb")
exec="select * from guest where id="&request.form("id")
set rs=server.createobject("adodb.recordset")
rs.open exec,conn
%>
<form name="form1" method="post" action="modifysave.asp">
<table width="748" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>name</td>
<td>tel</td>
<td>message</td>
</tr>
<tr>
<td>
<input type="text" name="name" value="<%=rs("name")%>">
</td>
<td>
<input type="text" name="tel" value="<%=rs("tel")%>">
</td>
<td>
<input type="text" name="message" value="<%=rs("message")%>">
<input type="submit" name="Submit" value="提交">
<input type="hidden" name="id" value="<%=request.form("id")%>">
</td>
</tr>
</table>
</form>
<%
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
到現(xiàn)在應(yīng)該分析這個代碼沒有什么問題了吧,這個代碼的作用是接受前面一個頁面的ID然后顯示這條記錄,文本框即是輸入的地方也是顯示的地方,如果需要修改的話修改以后按提交;如果不需要修改就可以直接按提交按鈕。
在這里因?yàn)楸窘坛踢m合初學(xué)的,所以也把提交的表單內(nèi)容給出來,把下面代碼存為8.htm文件
<form name="form1" method="post" action="exam8.asp">
請輸入要修改的記錄的ID:
<input type="text" name="id">
<br>
<input type="submit" name="submit" value="提交">
</form>
這里還有一個東西以前沒有說,那就是隱藏的表單元素:hidden元素,里面的value是不用用戶輸入的,會隨著表單一起提交,用于傳遞變量。
下面是modifysave.asp的代碼:
<%
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("data/guestbook.mdb")
exec="select * from guest where id="&request.form("id")
set rs=server.createobject("adodb.recordset")
rs.open exec,conn,1,3
rs("name")=request.form("name")
rs("tel")=request.form("tel")
rs("message")=request.form("message")
rs.update
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
在這里,rs.open exec,conn,1,3后面的參數(shù)是1,3,這我以前提過,修改記錄就要用1,3。實(shí)際上修改記錄很容易看懂,記錄集是rs,rs("aa")就是當(dāng)前記錄aa字段的東西,讓它等于新的數(shù)據(jù)request.form("aa")當(dāng)然就修改了,不過最后別忘記保存,那就是rs.update!
說到這里,記錄的搜索,讀取,修改,插入都說了,通過這最基本的東西就可以作出復(fù)雜的東西了,外面的大型數(shù)據(jù)庫:新聞系統(tǒng),留言簿就是字段多一點(diǎn)罷了。今天的示例中的代碼是結(jié)合以前的數(shù)據(jù)庫的,以后回去調(diào)試分析一下。
大家測試的流程:首先運(yùn)行8.htm文件
基本的SESSION組件,總結(jié)response,request組件。
首先,有會員系統(tǒng)的任何程序都會用到檢測是不是用戶已經(jīng)登陸這個步驟。這就用到了SESSION組件,下面我們 看一個代碼來說明。
<%
session("login")="yes"
%>
這句話的意思就是在session里面定義一個login字符串變量,值為"yes",直接可以賦值,不需要聲明。是不是很簡單?
如果我們做管理員登陸系統(tǒng)的話,首先是一段檢測是不是管理員:
if 是 then
session("isadmin")=yes"
else
session("isadmin")="no"
end if
在每一個需要管理員才能看的頁面最前面加上:
<%
if not session("isaadmin")="yes" then
response.redirect "login.htm"
%>
這樣一般用戶就無法打開這個頁面。解釋一下response.redirect,它是轉(zhuǎn)向的意思,后面的"login.htm"就是轉(zhuǎn)向的文件。這樣沒有登陸的管理員是無法看到后面的內(nèi)容的。
response組件基本就是用到response.write(),response.redirect() 分別是寫字符串和轉(zhuǎn)向的作用。
request基本就是request.form(),request.querystring() 分別是接受post,get方法傳來的信息。
最后我們一起來制作一個簡單的后臺登陸管理界面,首先在myweb目錄下建立一個admin文件夾,然后我們建立一個數(shù)據(jù)庫名字為admin.mdb,然后我們再建立一個表,表中設(shè)置兩個字段name,password,類型都是文本型的!最后退出時設(shè)置主鍵,保存為表名check。然后可以輸入一條記錄用戶名:admin,密碼:admin。具體建立數(shù)據(jù)庫的方法請看《菜鳥十天學(xué)會ASP教程之第三天:數(shù)據(jù)庫的建立》
下面我們開始編寫ASP程序,首先建立一個index.asp(管理主界面)程序,代碼如下:
<%@language=vbscript%>
<%if not session("checked")="yes" then
response.Redirect "login.asp"
else
%>
<html>
<head>
<title>管理界面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<frameset cols="167,*" frameborder="YES" border="1" framespacing="1" rows="*" bordercolor="#666666">
<frame name="leftFrame" scrolling="auto" noresize src="left.asp">
<frame name="mainFrame" src="right.asp">
</frameset>
<noframes>
<body bgcolor="#FFFFFF" text="#000000">
</body>
</noframes>
</html>
<%end if%>
在上面的代碼中,大家可以看到用到login.asp,left.asp,right.asp程序
login.asp://登陸系統(tǒng)程序
<html>
<head>
<title>管理員入口</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
.topic { font-family: "宋體"; font-size: 11pt; font-weight: bold; color: #FFFFFF}
.font { font-family: "宋體"; font-size: 10pt; font-weight: normal; color: #000000}
.table { border-color: #666666 black; border-style: solid; border-top-width: 1pt; border-right-width: 0px; border-bottom-width: 1pt; border-left-width: 0px}
.text { border: 1pt #999999 solid; height: 15pt}
-->
</style>
</head>
<body text="#000000" topmargin="0" bgcolor="#FFFFFF">
<table width="100%" border="0" cellpadding="0" cellspacing="0" align="center" height="100%">
<tr>
<td height="129" valign="top" colspan="3"> </td>
</tr>
<tr>
<td width="230" height="170" valign="top"> </td>
<td valign="top" width="277">
<table width="100%" border="0" cellspacing="1" cellpadding="0" height="100%" bgcolor="#000000" align="center">
<tr>
<td align="center" valign="middle" height="167">
<form name="form1" method="post" action="check.asp">
<table width="100%" border="0" cellspacing="0" cellpadding="0" height="100%">
<tr bgcolor="#62892C">
<td height="31" class="topic" colspan="2">
<div align="center">管理員入口<br>
</div>
</td>
</tr>
<tr>
<td bgcolor="#87bc3c" colspan="2" class="table">
<div align="center"> <span class="font"> 管理員:</span>
<input type="text" name="name" class="text" size="20" onMouseOver="this.focus()">
<br>
<span class="font">密 碼:</span>
<input type="password" name="password" class="text" size="20" onMouseOver="this.focus()"><%if session("check")="wrong" then response.Write "<br><span class='font'><font color=red>驗(yàn)證錯誤!</font></span>" end if%>
</div>
</td>
</tr>
<tr>
<td bgcolor="#87bc3c" width="52%">
<div align="center" class="font">
<input type="reset" name="Submit2" value="重置" class="text">
</div>
</td>
<td bgcolor="#87bc3c" width="48%">
<div align="center" class="font">
<input type="submit" name="Submit22" value="提交" class="text">
</div>
</td>
</tr>
</table> </form>
</td>
</tr>
</table>
</td>
<td width="241" valign="top"> </td>
</tr>
<tr>
<td height="123" valign="top" colspan="3"> </td>
</tr>
</table>
</body>
</html>
在上面的程序中用到一個檢查用戶和密碼是否正確的程序check.asp://核對輸入的用戶和密碼是否正確
<%
dim name,password
name=request.form("name")
password=request.form("password")
dim exec,conn,rs
exec="select *from check where(name='"&name&"' and password='"&password&"')"
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("admin.mdb")
set rs=server.createobject("adodb.recordset")
rs.open exec,conn
if not rs.eof then
rs.Close
conn.Close
session("checked")="yes"
session("check")="right"
response.Redirect "index.asp"
else
session("checked")="no"
session("check")="wrong"
response.Redirect "login.asp"
end if
%>
left.asp://管理導(dǎo)航
<%@language=vbscript%>
<%if not session("checked")="yes" then
response.Redirect "login.asp"
else
%>
<html>
<head>
<title>管理界面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body text="#000000" topmargin="0" bgcolor="#ffffff" leftmargin="10">
<div align="center"><a href="index.asp" target="_parent"><br>
<br>
管理界面首頁</a> <a href="exit.asp" target="_parent">退出</a><br>
<br>
</div>
</body>
</html>
<%end if%>
exit.asp://退出系統(tǒng)
<%@language=vbscript%>
<%
session("check")=""
session("checked")=""
response.redirect "login.asp"
%>
right.asp://具體管理的內(nèi)容
<%@language=vbscript%>
<%if not session("checked")="yes" then
response.Redirect "login.asp"
else
%>
<html>
<title>管理界面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#ffffff" text="#000000" topmargin="20" class="title">
這里是網(wǎng)頁教學(xué)網(wǎng)的管理系統(tǒng)示例!請大家多研究使用!
</body>
</html>
<%end if%>
運(yùn)行時首先運(yùn)行index.asp程序,運(yùn)行效果部分截圖如下:
分頁技術(shù)
今天最后一天我們學(xué)習(xí)一下ASP里面稍微難一點(diǎn)地分頁技術(shù),畢竟當(dāng)我們有N條記錄的時候我們不可能把所有記錄顯示在一個頁面里面吧。
<%
exec="select * from test"
set rs=server.createobject("adodb.recordset")
rs.open exec,conn,1,1
rs.PageSize=3
pagecount=rs.PageCount
page=int(request.QueryString ("page"))
if page<=0 then page=1
if request.QueryString("page")="" then page=1
rs.AbsolutePage=page
%>
rs.pagesize設(shè)置一個頁面里面顯示的記錄數(shù),pagecount是我們自己定義的一個變量,rs.pagecount是記錄的個數(shù),page也是我們自己定義的一個變量,我們下一頁的鏈接可以設(shè)置為list.asp?page=<%=page+1%>,下一頁的鏈接可以設(shè)置為list.asp?page=<%=page-1%>,這樣當(dāng)按下鏈接的時候調(diào)用頁面自己,page這個變量就+1或者-1了,最后我們讓rs.absolutepage(當(dāng)前頁面)為第page頁就可以了。
if request.QueryString("page")="" then page=1,這句話的作用就是我們打開list.asp的時候沒有跟隨page變量,自動設(shè)置為page=1,防止出錯,還有當(dāng)我們if....then...放在一行的時候end if可以省略。是不是分頁也不難?
下面說一種特殊情況:
if page=1 and not page=pagecount,這個時候沒有上一頁,但是有下一頁
elseif page=pagecount and not page=1,這個時候沒有下一頁,但是有上一頁
elseif page<1,這個時候沒有任何記錄
elseif page>pagecount then,這個時候沒有任何記錄
elseif page=1 and page=pagecount,這個時候沒有上一頁,沒有下一頁
else,這個時候有上一頁,也有下一頁。
下面看一段顯示1到n頁,且每一個數(shù)字點(diǎn)擊以后就出現(xiàn)這個數(shù)在代表的頁面的代碼,很常見哦。
<%for i=1 to pagecount%>
<a href="list.asp?page=<%=i%>"><%=i%></a><%next%>
for....next是循環(huán)從i=1開始,循環(huán)一次加1到pagecount為止。
最后我的實(shí)例里面包含了一個最簡單的ASP程序,但是功能樣樣有,是ASP的精髓,每一個ASP大型程序都包含了它。
add.htm增加記錄頁面
add.asp增加記錄操作
conn.asp數(shù)據(jù)庫鏈接
del.asp刪除記錄操作
modify.asp修改記錄頁面
modifysave.asp修改記錄操作
list.asp這個是這個程序的核心,通過這個頁面實(shí)現(xiàn)記錄的添加、修改、刪除。
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。