簡單的顯示記錄已經掌握,現在需要的就是通過ASP將資訊內容插入到資料庫中。
一、擁有資料庫cnbruce.mdb
本資料庫的作用就是用來被插入資料的,可以直接採用上節中已經建立的cnbruce.mdb檔案,當然串連開啟資料庫的檔案conn.asp也就順利引用了。
二、建立輸入插入資訊的頁面平台addit.html
本頁的主要作用是:顯示一些文本輸入框以用來提供輸入資訊內容提交資料庫。
1,addit.html
<form action="addit.asp" method="post"><br />Title:<input type="text" name="title"><br><br />Author:<input type="text" name="author"><br><br />Content:<br><br /><textarea name="content" rows="8" cols="30"></textarea><br><br /><input type="submit" value="Add"><br /><input type="reset" value="Reset"><br /></form><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
本頁其實很簡單,就是通過submit按鈕將表單的資訊內容提交到addit.asp頁面去處理。
三、建立處理接受資料並插入資料庫表的頁面程式addit.asp
2,addit.asp
<!--#include file="conn.asp" --> <% whattitle=request.form("title") whoauthor=request.form("author") whatcontent=request.form("content") %> <% Set rs = Server.CreateObject ("ADODB.Recordset") sql = "Select * from cnarticle" rs.Open sql,conn,3,2 %> <% rs.addnew rs("cn_title")=whattitle rs("cn_author")=whoauthor rs("cn_content")=whatcontent rs.update %> 文章添加成功,<a href="showit.asp">瀏覽</a> <% rs.close Set rs = Nothing conn.close set conn=Nothing %> |
恩,接著就是來具體分析一下。
1,<!--#include file="conn.asp" --> 不用說,凡是要和資料庫有聯絡的都要運用到該串連檔案。
2,whattitle=request.form("title")之類 就是將上頁表單中接受過來的值賦到一變數上,方便下面程式的調用。
3,rs.Open sql,conn,3,2 注意參數和顯示資料庫時採用的參數的不同。
4,rs.addnew 很簡單也很顯眼的一個聲明:建立一個資料庫記錄集行。
5,rs("cn_title")=whattitle之類 即將接受的表單值對應到相關欄位中。
6,rs.update 只是值和資料庫欄位的對應,完了後還要將對應的值上傳提交到資料庫表中去。
7,插入後可以跳轉到showit.asp查看 需要說明,以後的ASP例題可能都是建立在前幾節內容的基礎之上完成的。
8,釋放資源 是規矩,不要忘記。
那麼,現在。插入並顯示資料庫記錄,對你來說完全是小菜一碟了。大體架構搭建完畢,下面就是具體的細化了。
其中包括:用戶端的表單檢測,防止使用者資訊輸入的遺漏;當然最好還是要加上伺服器端的表單檢測,由於用戶端的某些原因(比如自行設計提交非檢測的頁面)基於安全考慮,一切還是依伺服器端所接受資訊為準。那下面就繼續細化應用下了。
1,用戶端檢測 其實就是通過簡單的指令碼檢測,這在初學ASP提到指令碼的時候說到,下面將再次重複。
加強的addit.html
<script laguage="javascript"><br /><!--<br />function form1_onsubmit()<br />{<br />if (document.form1.title.value=="")<br /> {<br /> alert("請輸入文章標題")<br /> document.form1.title.focus()<br /> return false<br /> }<br />else if(document.form1.content.value=="")<br /> {<br /> alert("請輸入文章內容")<br /> document.form1.content.focus()<br /> return false<br /> }<br />}<br />--><br /></script></p><p><form action="addit.asp" method="post" name="form1" onsubmit="return form1_onsubmit()"><br />Title:<input type="text" name="title"><br><br />Author:<input type="text" name="author"><br><br />Content:<br><br /><textarea name="content" rows="8" cols="30"></textarea><br><br /><input type="submit" value="Add"><br /><input type="reset" value="Reset"><br /></form><br />
[Ctrl+A 全部選擇進行拷貝 提示:可先修改部分代碼,再點擊運行]
2,伺服器端檢測 有人也許會問,既然有了用戶端的檢測,那還有多個伺服器端的檢測呢?原因很簡單,比如仿照HTML表單提交頁,自行設計一張去除了表單檢測的頁面。當點擊提交,並且沒有任何資訊時,到達伺服器端如沒有任何防禦則肯定會造成資料插入的失敗。
加強的addit.asp
<!--#include file="conn.asp" --> <% whattitle=trim(request.form("title")) whoauthor=trim(request.form("author")) whatcontent=trim(request.form("content")) %> <%if whattitle="" then%> <script language=vbs> alert("請輸入文章標題") history.go(-1) </script> <%end if%> <%if whatcontent="" then%> <script language=vbs> alert("請輸入文章標題") history.go(-1) </script> <%end if%> <% Set rs = Server.CreateObject ("ADODB.Recordset") sql = "Select * from cnarticle" rs.Open sql,conn,3,2 %> <% rs.addnew rs("cn_title")=whattitle rs("cn_author")=whoauthor rs("cn_content")=whatcontent rs.update %> 文章添加成功,<a href="showit.asp">瀏覽</a> <% rs.close Set rs = Nothing conn.close set conn=Nothing %> |
可以看出,就是添加了如下類似的判斷。
<%if whattitle="" then%> <script language=vbs> alert("請輸入文章標題") history.go(-1) </script> <%end if%> |
很簡單,如果接受過來的資訊為空白,則彈出警告框,並且確認後返回到上頁即addit.html了。當然cn_author沒有設定檢測,因為當初設計該欄位的接受值是允許為空白的。
OK,總結一下,插入記錄主要就是
rs.addnew rs("cn_title")=whattitle ... rs.update |
很簡單,先聲明addnew,然後一一對應,再提交插入資料庫。
這是一種插入資料庫的方法,下面就來接觸瞭解一下另外一種。
需要注意,結構化的查詢語言也就是SQL語句能夠完成一些比較苛刻的資料庫操作。當然,對於諸如提取、插入資訊之流就更不在話下了。所以下面採用的插入記錄的方法就是直接採用SQL文法完成。
修改了的addit.asp
<!--#include file="conn.asp" --> <% whattitle=request.form("title") whoauthor=request.form("author") whatcontent=request.form("content") %> <% sql = "insert into cnarticle(cn_title,cn_author,cn_content) values(' "&whattitle&" ',' "&whoauthor&" ',' "&whatcontent&" ')" conn.Execute(sql) %> 文章添加成功,<a href="showit.asp">瀏覽</a> <% conn.close set conn=Nothing %> |
本程式中,你會發現只要一行的SQL語句,不需要建立Rescord記錄集行,不需要聲明addnew,不要執行update。直接通過conn.Execute(sql)來完成。
當然應用此種方法,若必要欄位接受值為空白時,同樣能夠插入記錄。這和採用第一種會報
Microsoft JET Database Engine 錯誤 '80040e21' 欄位 'xxx.xxx' 不能是零長度的字串。 |
具有很大的容錯性。
是程式的可讀性還是方法的簡便高效率就任君選擇了。