<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>EC 寶典 &#187; 程式設計</title>
	<atom:link href="http://phpexe.com/archives/category/%e7%b6%b2%e7%ab%99%e8%a3%bd%e4%bd%9c/%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88/feed" rel="self" type="application/rss+xml" />
	<link>http://phpexe.com</link>
	<description>網路商店,電子商務,網站製作相關文章</description>
	<lastBuildDate>Wed, 04 Mar 2009 02:45:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>程式設計</title>
		<link>http://phpexe.com/archives/151</link>
		<comments>http://phpexe.com/archives/151#comments</comments>
		<pubDate>Fri, 15 Aug 2008 08:19:43 +0000</pubDate>
		<dc:creator>phpexe</dc:creator>
				<category><![CDATA[程式設計]]></category>

		<guid isPermaLink="false">http://www.phpexe.com/archives/156</guid>
		<description><![CDATA[網頁程式設計，顧名思義就是在網頁上套用程式的邏輯，使得您的網頁不再是靜態的頁面，它可能依照網友的操作行為，時間，地點等不同的變數，產生不同的變化。
想要進入網頁程式設計的領域，首先就要先了解到網頁程式分成兩個範疇，分別為伺服器端，以及客戶端。
伺服器端程式設計
所謂的伺服器端指的就是像RaidenHTTPD、IIS、Apache這樣子的Web Server。而這些伺服器基本上並不具有解譯(interprete)您寫好的伺服器端網頁程式的能力，但是通常這樣子的直譯器(interpreter)是能夠被安裝到Web Server上的，常見的伺服器端直譯器有PHP、PERL、ASP等等。而這些直譯器安裝到Web Server上需要一些共同的規格，好比插頭要插到插座上也必須規格吻合才行，將直譯器安裝到Web Server常見的規格有CGI，ISAPI等等。
Web Server: 提供WWW網站服務的伺服器如RaidenHTTPD(雷電HTTPD)
PHP: 一種主要是用於網站上的公開原始碼(Open Source)劇本檔語言(Scripting Language)，容易使用，能存取資料庫。
PERL: 一種主要是用於網站上的公開原始碼劇本檔語言，容易使用，能存取資料庫。
ASP: 一種主要用於微軟IIS的劇本檔語言，用戶數量廣大，是最受歡迎的商業級網頁伺服器端程式語言。
CGI: 將執行程式的結果，透過Web Server輸出給Web Browser來顯示的一種架構規格。CGI程式通常為C語言或是Perl撰寫。
ISAPI: 類似CGI但是效率更高，是微軟定制之規格，RaidenHTTPD(雷電HTTPD)就有支援。
客戶端程式設計
所謂的客戶端指的就是像Internet Explorer、Opera、Netscape、Firefox這樣子的網頁瀏覽器(Web Browser)。把這些瀏覽器想像為一個平台，而在這些平台上執行的程式就是所謂的客戶端程式。在客戶端執行程式，通常由瀏覽器直接解譯並且執行的有JavaScript、VBScript等等，這樣子的程式撰寫的方式就是在HTML原始碼裡面直接嵌入JavaScript的原始碼，網頁瀏覽器收到這個原始碼之後就會加以執行並且呈現在瀏覽器的畫面上。
另外還有一種在客戶端執行程式的方式，但是它又不是由瀏覽器來執行，而是透過內嵌於瀏覽器內的Plugin程式來執行，例如Flash、Active-X、Java Applet等等。這樣子的程式有優點也有缺點，優點就是功能強大，完全突破HTML及JavaScript的限制，例如Active-X就等同於Windows程式，可以使用視窗作業系統的所有功能，又例如Flash它能夠在網頁上顯示向量繪製的圖案及動畫、Java則為具有跨平台執行的優勢。
Internet Explorer、Opera、Netscape、Firefox: 網頁瀏覽器軟體，可瀏覽WWW網站。
JavaScript: 美國Netscape公司首創的物件導向程式語言，是一種專為Internet設計的程式語言，執行平台為瀏覽器。
Flash: 美國Adobe公司所開發出來的一種用於產生網頁動畫內容的技術，特色為支援向量繪圖，在製作動畫上非常節省容量。
Active-X: 在Windows環境下執行的程式元件，通常從網站伺服器下載之後，內嵌於網頁中並在客戶端電腦執行。
Java Applet: 類似Active-X，但執行時卻是在Java虛擬機器執行，優點是跨平台，缺點是速度不比原生程式快。
什麼時候用伺服器端程式？什麼時候用客戶端程式？
基本上若是偏向客戶端滑鼠，鍵盤操作的相對映動作，這個一定要用JavaScript等的客戶端執行程式語言，如果牽涉到帳務或是資料的計算，則推薦一定要由伺服器端執行，以免客戶端使用假造的資料欺騙您的系統。





]]></description>
			<content:encoded><![CDATA[<p>網頁程式設計，顧名思義就是在網頁上套用程式的邏輯，使得您的網頁不再是靜態的頁面，它可能依照網友的操作行為，時間，地點等不同的變數，產生不同的變化。</p>
<p>想要進入網頁程式設計的領域，首先就要先了解到網頁程式分成兩個範疇，分別為伺服器端，以及客戶端。<br />
伺服器端程式設計<br />
所謂的伺服器端指的就是像RaidenHTTPD、IIS、Apache這樣子的Web Server。而這些伺服器基本上並不具有解譯(interprete)您寫好的伺服器端網頁程式的能力，但是通常這樣子的直譯器(interpreter)是能夠被安裝到Web Server上的，常見的伺服器端直譯器有PHP、PERL、ASP等等。而這些直譯器安裝到Web Server上需要一些共同的規格，好比插頭要插到插座上也必須規格吻合才行，將直譯器安裝到Web Server常見的規格有CGI，ISAPI等等。<span id="more-151"></span></p>
<p>Web Server: 提供WWW網站服務的伺服器如RaidenHTTPD(雷電HTTPD)<br />
PHP: 一種主要是用於網站上的公開原始碼(Open Source)劇本檔語言(Scripting Language)，容易使用，能存取資料庫。<br />
PERL: 一種主要是用於網站上的公開原始碼劇本檔語言，容易使用，能存取資料庫。<br />
ASP: 一種主要用於微軟IIS的劇本檔語言，用戶數量廣大，是最受歡迎的商業級網頁伺服器端程式語言。<br />
CGI: 將執行程式的結果，透過Web Server輸出給Web Browser來顯示的一種架構規格。CGI程式通常為C語言或是Perl撰寫。<br />
ISAPI: 類似CGI但是效率更高，是微軟定制之規格，RaidenHTTPD(雷電HTTPD)就有支援。</p>
<p>客戶端程式設計<br />
所謂的客戶端指的就是像Internet Explorer、Opera、Netscape、Firefox這樣子的網頁瀏覽器(Web Browser)。把這些瀏覽器想像為一個平台，而在這些平台上執行的程式就是所謂的客戶端程式。在客戶端執行程式，通常由瀏覽器直接解譯並且執行的有JavaScript、VBScript等等，這樣子的程式撰寫的方式就是在HTML原始碼裡面直接嵌入JavaScript的原始碼，網頁瀏覽器收到這個原始碼之後就會加以執行並且呈現在瀏覽器的畫面上。</p>
<p>另外還有一種在客戶端執行程式的方式，但是它又不是由瀏覽器來執行，而是透過內嵌於瀏覽器內的Plugin程式來執行，例如Flash、Active-X、Java Applet等等。這樣子的程式有優點也有缺點，優點就是功能強大，完全突破HTML及JavaScript的限制，例如Active-X就等同於Windows程式，可以使用視窗作業系統的所有功能，又例如Flash它能夠在網頁上顯示向量繪製的圖案及動畫、Java則為具有跨平台執行的優勢。</p>
<p>Internet Explorer、Opera、Netscape、Firefox: 網頁瀏覽器軟體，可瀏覽WWW網站。<br />
JavaScript: 美國Netscape公司首創的物件導向程式語言，是一種專為Internet設計的程式語言，執行平台為瀏覽器。<br />
Flash: 美國Adobe公司所開發出來的一種用於產生網頁動畫內容的技術，特色為支援向量繪圖，在製作動畫上非常節省容量。<br />
Active-X: 在Windows環境下執行的程式元件，通常從網站伺服器下載之後，內嵌於網頁中並在客戶端電腦執行。<br />
Java Applet: 類似Active-X，但執行時卻是在Java虛擬機器執行，優點是跨平台，缺點是速度不比原生程式快。<br />
什麼時候用伺服器端程式？什麼時候用客戶端程式？<br />
基本上若是偏向客戶端滑鼠，鍵盤操作的相對映動作，這個一定要用JavaScript等的客戶端執行程式語言，如果牽涉到帳務或是資料的計算，則推薦一定要由伺服器端執行，以免客戶端使用假造的資料欺騙您的系統。</p>
<div style="margin:5px" align="right">
<script type="text/javascript"><!--
google_ad_client = "pub-7863017552796874";
/* 180x150, ѽ 2008/9/11 */
google_ad_slot = "8706783681";
google_ad_width = 180;
google_ad_height = 150;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

</div>]]></content:encoded>
			<wfw:commentRss>http://phpexe.com/archives/151/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cookie 簡介</title>
		<link>http://phpexe.com/archives/76</link>
		<comments>http://phpexe.com/archives/76#comments</comments>
		<pubDate>Thu, 05 May 2005 13:00:51 +0000</pubDate>
		<dc:creator>phpexe</dc:creator>
				<category><![CDATA[程式設計]]></category>
		<category><![CDATA[網站製作]]></category>

		<guid isPermaLink="false">http://www.phpexe.com/?p=22</guid>
		<description><![CDATA[

一、什麼是cookieCookie 是僅包含小片段文字的檔案，暫存於瀏覽器的記憶體，或由網站伺服器透過瀏覽器儲存到您的硬碟內；每次當您要再次瀏覽此網頁時，檔案中的訊息會被回傳到網站伺服器。網站使用 cookie 的主要目的是要驗證使用者的身份，藉以提供客製化網頁內容及用於線上銷售服務，或者就只是要收集統計資料。Cookie 大略可以區分為工作階段 cookie（session cookie）與永久性cookie（persistent cookie），session cookie 只是暫存於記憶體，一旦關閉瀏覽器就會消失，多是用於同一網站的網頁轉移，例如在電子商務網站中，透過 session cookie 記錄您購物車所選購的物品，以便作最後結算，如果您不接受這類 cookie，您就無法進行網路購物。
persistent cookie 則是以檔案形式儲存於使用者硬碟上，必須使用期限（expiration date）到了或使用者自行刪除才會消失；通常用來紀錄使用者參與的資訊，收集使用者網路瀏覽的習性或偏好的特定網站，像是這個網站您多久逛一次、一次逛多久這類的資訊。
二、關於Cookie 的疑慮
● 我可不可以自行刪除 cookie
可以，不管您使用的是 IE 或是 Netscape，cookie 都儲存成一個文字檔，只要您高興都可隨意刪除，但是刪除前請先關閉瀏覽器，因為cookie 會保留於記體體當中，如果在瀏覽器開啟狀態下刪除 cookie 檔案，記體當中的 cookie 會再度存回檔案。刪除方法以 IE 為例，開啟 IE 放置 cookie 的檔案夾（Windows 2000/XP 是位於根目錄下的 \Documents and Settings\Username\Cookies），選擇您要刪除的cookie。
● Cookie 會危害我的電腦嗎
不會，cookie 只是一小片段的文字檔，不是程式也不是外掛套件（plug-in），因此無法存取您的硬碟，也無法作為病毒散佈，頂多就是讓瀏覽器把 cookie 寫入您的硬碟。
● Cookie 對我的個人隱私是否有威脅
雖然 cookie 不會讀取您硬碟上的資料，但是任何您在網站上輸入進去的資訊，包括信用卡資料，都有可能被儲存於 cookie 內，這是資訊流通、便利化之後所產生不可避免的現象，這就像申辦百貨公司認同卡，您的消費喜好、習慣、週期都會成為百貨公司統計上的重要數據；因此比較明智的處置方式是，任何需要輸入私密資料的時機，請先考慮網站的公信力與安全架構是否完備。
三、Internet Explorer 6 關於 cookie [...]]]></description>
			<content:encoded><![CDATA[<table border="0" align="center" width="90%" cellPadding="1" cellSpacing="0">
<tr>
<td width="580" vAlign="top" style="font-size: 14px"><font><strong>一、什麼是cookieCookie 是僅包含小片段文字的檔案，暫存於瀏覽器的記憶體，或由網站伺服器透過瀏覽器儲存到您的硬碟內；每次當您要再次瀏覽此網頁時，檔案中的訊息會被回傳到網站伺服器。網站使用 cookie 的主要目的是要驗證使用者的身份，藉以提供客製化網頁內容及用於線上銷售服務，或者就只是要收集統計資料。Cookie 大略可以區分為工作階段 cookie（session cookie）與永久性cookie（persistent cookie），session cookie 只是暫存於記憶體，一旦關閉瀏覽器就會消失，多是用於同一網站的網頁轉移，例如在電子商務網站中，透過 session cookie 記錄您購物車所選購的物品，以便作最後結算，如果您不接受這類 cookie，您就無法進行網路購物。</p>
<p></strong>persistent cookie 則是以檔案形式儲存於使用者硬碟上，必須使用期限（expiration date）到了或使用者自行刪除才會消失；通常用來紀錄使用者參與的資訊，收集使用者網路瀏覽的習性或偏好的特定網站，像是這個網站您多久逛一次、一次逛多久這類的資訊。</p>
<p><strong>二、關於Cookie 的疑慮</strong></p>
<p>● 我可不可以自行刪除 cookie</p>
<p>可以，不管您使用的是 IE 或是 Netscape，cookie 都儲存成一個文字檔，只要您高興都可隨意刪除，但是刪除前請先關閉瀏覽器，因為cookie 會保留於記體體當中，如果在瀏覽器開啟狀態下刪除 cookie 檔案，記體當中的 cookie 會再度存回檔案。刪除方法以 IE 為例，開啟 IE 放置 cookie 的檔案夾（Windows 2000/XP 是位於根目錄下的 \Documents and Settings\Username\Cookies），選擇您要刪除的cookie。</p>
<p>● Cookie 會危害我的電腦嗎</p>
<p>不會，cookie 只是一小片段的文字檔，不是程式也不是外掛套件（plug-in），因此無法存取您的硬碟，也無法作為病毒散佈，頂多就是讓瀏覽器把 cookie 寫入您的硬碟。</p>
<p>● Cookie 對我的個人隱私是否有威脅</p>
<p>雖然 cookie 不會讀取您硬碟上的資料，但是任何您在網站上輸入進去的資訊，包括信用卡資料，都有可能被儲存於 cookie 內，這是資訊流通、便利化之後所產生不可避免的現象，這就像申辦百貨公司認同卡，您的消費喜好、習慣、週期都會成為百貨公司統計上的重要數據；因此比較明智的處置方式是，任何需要輸入私密資料的時機，請先考慮網站的公信力與安全架構是否完備。</p>
<p><strong>三、Internet Explorer 6 關於 cookie 的設定</strong></p>
<p>Internet Explorer 6 對於 cookie 的設定是位於「工具」→「網際網路選項」→「隱私權」，再移動滑桿來調整 cookie 的設定，可以選擇接受部分、全部或完全不接受 Cookie 存在您的電腦上。設定當中所謂的第一方網站是指目前正在瀏覽的網站，第三方網站則是目前瀏覽網站以外的網站，通常連結到目前網站的部分內容，例如提供來自其他網站的廣告，這也是為什麼沒逛過這些網站，電腦卻存有這些網站 cookie 的原因。更改隱私權設定之後可能不會影響現存硬碟上的 cookie 檔案，因此請先刪除設定前建立的cookie 檔才能讓設定生效。</p>
<p></font></td>
</tr>
<tr>
<td align="right">(責任編輯:admin)</td>
</tr>
</table>
<div style="margin:5px" align="right"><!--adsense--></div>]]></content:encoded>
			<wfw:commentRss>http://phpexe.com/archives/76/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>學習使用ASP對像和組件</title>
		<link>http://phpexe.com/archives/75</link>
		<comments>http://phpexe.com/archives/75#comments</comments>
		<pubDate>Thu, 07 Apr 2005 13:01:36 +0000</pubDate>
		<dc:creator>phpexe</dc:creator>
				<category><![CDATA[程式設計]]></category>
		<category><![CDATA[網站製作]]></category>

		<guid isPermaLink="false">http://www.phpexe.com/?p=23</guid>
		<description><![CDATA[

ASP對像讓你的服務器和瀏覽器互相影響，你會例行公事的在你的ASP腳本中使用一個或者多個對象。你不用安裝任何東西來使用它們，但是你必須要記住打開或者關閉它們。    ASP組件，和ASP對像不同，它是ActiveX控制和ASP接口讓普通進程單一化。一些普通的使用對像和組件就在這個下面定義。對像
請求對像
    請求對像讓你的通過一個HTTP請求分接信息。你可以使用請求對像分析編碼URLs，從一個表格中訪問信息並且讀取cookies，客戶認證和HTTP頭文件。
響應對像
    響應對象是你將信息發送給用戶的關鍵。你可以書寫到屏幕，改變方向到下一頁並且創建一個使用相應對象的cookies。
應用對像
    執行的Web服務器是一個應用程序。使用應用對象，你可以控制和開始以及關閉程序相關的特性，同時存儲應該被應用程序訪問的信息。
服務器對像
    服務器對像讓你執行例程函數，比如映射一個虛擬路徑到物理上並創造一個組件例圖。
會議對像
    使用會議對象，你可以存儲和每個訪問你站點用戶相關的信息。
組件
廣告轉換器
    廣告轉換器是為你的標題廣告建立一個交付系統的流線進程。在一個分開的文件中，你可以存儲關於標題的信息。組件就會在每次頁面下載的時候隨機地選擇標題。
瀏覽器能力
    瀏覽器組件讓你確定用戶使用什麼瀏覽器和瀏覽器支持什麼性能。
協作數據對像(CDO)
    利用IIS SMTP服務器，CDO讓你可以發送和接受電子郵件。有了CDO，你可以執行一個表格不需要依賴Perl腳本和CGI。
內容連接
    這個是一個手動對象，它創建一個線性或者連續的路徑到你的站點或者站點的一部分。你可以包含一個簡單的文本來列出文件的適當順序。你可以將next和previous連接添加到你的頁面，使你的頁面更加容易連接。
內容轉換器
    如果你需要噴射內容，這個是非常好的組件。它非常好使用並且它可以讓你添加動態內容到任何頁面而不需要使用一個數據庫。在分開的文本文件中，你存儲了HTML代碼的知識塊，它們交替的放入頁面的空格。內容轉換器會在頁面每次再下載的時候顯示一個知識塊。
數據庫訪問
    使用這個組件，你可以讓數據庫寫組件到瀏覽器屏幕並創建或者更新存在的數據庫文件。
第三方組件
    還有很多第三方組件，有收費和不收費的，都可以被ASP利用。如果你運行你自己的餓服務器，你可以按意願安裝組件，註冊一個.dll通常是安裝的擴展，因此，一個組件可以是一個時間的拯救者。你可以省下不少時間來檢查是否組件存在並可以用手操作工作。
    如果你的站點由一個ISP坐主機，你可以安裝你自己的組件或者讓他們自己安裝，因此，你可以檢查你的ISP的支持團隊。



(責任編輯:admin)


]]></description>
			<content:encoded><![CDATA[<table border="0" align="center" width="90%" cellPadding="1" cellSpacing="0">
<tr>
<td width="580" vAlign="top" style="font-size: 14px"><font>ASP對像讓你的服務器和瀏覽器互相影響，你會例行公事的在你的ASP腳本中使用一個或者多個對象。你不用安裝任何東西來使用它們，但是你必須要記住打開或者關閉它們。    ASP組件，和ASP對像不同，它是ActiveX控制和ASP接口讓普通進程單一化。一些普通的使用對像和組件就在這個下面定義。對像</p>
<p>請求對像<br />
    請求對像讓你的通過一個HTTP請求分接信息。你可以使用請求對像分析編碼URLs，從一個表格中訪問信息並且讀取cookies，客戶認證和HTTP頭文件。</p>
<p>響應對像<br />
    響應對象是你將信息發送給用戶的關鍵。你可以書寫到屏幕，改變方向到下一頁並且創建一個使用相應對象的cookies。</p>
<p>應用對像<br />
    執行的Web服務器是一個應用程序。使用應用對象，你可以控制和開始以及關閉程序相關的特性，同時存儲應該被應用程序訪問的信息。</p>
<p>服務器對像<br />
    服務器對像讓你執行例程函數，比如映射一個虛擬路徑到物理上並創造一個組件例圖。</p>
<p>會議對像<br />
    使用會議對象，你可以存儲和每個訪問你站點用戶相關的信息。</p>
<p>組件</p>
<p>廣告轉換器<br />
    廣告轉換器是為你的標題廣告建立一個交付系統的流線進程。在一個分開的文件中，你可以存儲關於標題的信息。組件就會在每次頁面下載的時候隨機地選擇標題。</p>
<p>瀏覽器能力</p>
<p>    瀏覽器組件讓你確定用戶使用什麼瀏覽器和瀏覽器支持什麼性能。<br />
協作數據對像(CDO)<br />
    利用IIS SMTP服務器，CDO讓你可以發送和接受電子郵件。有了CDO，你可以執行一個表格不需要依賴Perl腳本和CGI。</p>
<p>內容連接<br />
    這個是一個手動對象，它創建一個線性或者連續的路徑到你的站點或者站點的一部分。你可以包含一個簡單的文本來列出文件的適當順序。你可以將next和previous連接添加到你的頁面，使你的頁面更加容易連接。</p>
<p>內容轉換器<br />
    如果你需要噴射內容，這個是非常好的組件。它非常好使用並且它可以讓你添加動態內容到任何頁面而不需要使用一個數據庫。在分開的文本文件中，你存儲了HTML代碼的知識塊，它們交替的放入頁面的空格。內容轉換器會在頁面每次再下載的時候顯示一個知識塊。</p>
<p>數據庫訪問<br />
    使用這個組件，你可以讓數據庫寫組件到瀏覽器屏幕並創建或者更新存在的數據庫文件。<br />
第三方組件<br />
    還有很多第三方組件，有收費和不收費的，都可以被ASP利用。如果你運行你自己的餓服務器，你可以按意願安裝組件，註冊一個.dll通常是安裝的擴展，因此，一個組件可以是一個時間的拯救者。你可以省下不少時間來檢查是否組件存在並可以用手操作工作。</p>
<p>    如果你的站點由一個ISP坐主機，你可以安裝你自己的組件或者讓他們自己安裝，因此，你可以檢查你的ISP的支持團隊。</p>
<p></font></td>
</tr>
<tr>
<td align="right">(責任編輯:admin)</td>
</tr>
</table>
<div style="margin:5px" align="right"><!--adsense--></div>]]></content:encoded>
			<wfw:commentRss>http://phpexe.com/archives/75/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP初學者必看</title>
		<link>http://phpexe.com/archives/33</link>
		<comments>http://phpexe.com/archives/33#comments</comments>
		<pubDate>Tue, 22 Mar 2005 13:04:54 +0000</pubDate>
		<dc:creator>phpexe</dc:creator>
				<category><![CDATA[程式設計]]></category>
		<category><![CDATA[網站製作]]></category>

		<guid isPermaLink="false">http://www.phpexe.com/?p=27</guid>
		<description><![CDATA[

對於用ASP技術編程的初學者來說，無從下手是第一感覺，筆者曾經有這麼一段經歷。經過一番&#8221;磨難&#8221;以後，你就會找到靈感。現將本人編程中積累的一些經驗，擬成本文，奉獻給讀者。1 首先要學習一些例子程序。接到任務後，不要盲目地急於編寫代碼，而是先看一下別人成功的例子，然後在其上修改或模仿調試，這樣會加快你熟悉的速度。例如，關於ASP編程的教科書上經常有這麼一個例子出現，即顯示系統當前時間的語句：&#60;%=now()%&#62; ，別看這麼簡單的一條語句，裡邊卻包含了ASP的編程思想和格式，會給你後邊的工作帶來很大的幫助。比如說，測試IIS（Internet Information Server）WEB SERVER是否正常工作，用上邊的一個語句測試就足夠了。2 在WINDOWS NT上安裝ODBC後，要測試和後台數據庫確實連通後，再開始編程測試。
可能您沒有看懂題目的意思，我在這裡解釋一下：比如說，後台數據庫是ORACLE，那麼在NT SEVER上首先要安裝SQL*NET（或NET 8），然後配置ODBC，確定和ORACLE數據庫連通，可以用SQL*PLUS測試，還要選擇和ORACLE數據庫相同的字符集，這個工作要在註冊表裡完成。最後在ODBC裡邊測試和ORACLE數據庫連通後，說明WEB SERVER 到後台數據庫端的工作就完成了，下邊再開始編程工作。反過來，你若先編程，後做ODBC的工作，那麼你無法調試程序是否正確，可能大大降低編程效率。在ODBC配置中要選擇MICROSOFT ODBC FOR ORACLE,不要選擇ORACLE ODBC DRIVER，否則不能和數據庫建立聯繫。
在ASP程序中，和數據庫連接的語句是比較固定的，舉例如下：
Set Conn = Server.CreateObject(&#8221;ADODB.Connection&#8221;)
Conn.Open &#8220;odbclink&#8221;,&#8221;o7people&#8221;,&#8221;peoplepd&#8221;
在這裡，odbclink是數據源的名字，可以說成是ODBC和數據庫連接的定義，o7people是ORACLE的一個用戶名，peoplepd是用戶o7people的密碼。
3 記錄下出錯信息，尋找糾錯規律。
在編程、調試過程中，是一個出錯、糾錯的循環過程，但是時間長了，會發現一些規律，排除錯誤的效率會大大提高。
3．1 出錯信息：
Microsoft OLE DB Provider for ODBC Drivers 錯誤 80040e14
[Microsoft][ODBC driver for Oracle][Oracle]ORA-00933: SQL command not properly ended
/default.asp, 行781
這種錯誤，一般是在執行 Conn.Execute(&#8221;SQL 語句&#8221;)操作時，所定義的&#8221;SQL 語句&#8221;有問題，檢查此語句就能發現問題，如日期格式不對，等等。
3．2 出錯信息：
ADODB.Field 錯誤 800a0bcd
BOF 或 EOF 中有一個是&#8221;真&#8221;，或者當前的記錄已被刪除，但應用程序要求操作的是當前的記錄。
/lzjsblr.asp, 行123
這個錯誤，一般發生在執行下列語句的過程中：
set RS = Conn.Execute(&#8221;SQL 語句&#8221; )
varnum1=RS(0)
RS.CLOSE
所取的值RS(0)無意義或無意義，還要檢查&#8221;SQL [...]]]></description>
			<content:encoded><![CDATA[<table border="0" align="center" width="90%" cellPadding="1" cellSpacing="0">
<tr>
<td width="580" vAlign="top" style="font-size: 14px"><font>對於用ASP技術編程的初學者來說，無從下手是第一感覺，筆者曾經有這麼一段經歷。經過一番&#8221;磨難&#8221;以後，你就會找到靈感。現將本人編程中積累的一些經驗，擬成本文，奉獻給讀者。<font color="#dc143c">1 首先要學習一些例子程序。</font>接到任務後，不要盲目地急於編寫代碼，而是先看一下別人成功的例子，然後在其上修改或模仿調試，這樣會加快你熟悉的速度。例如，關於ASP編程的教科書上經常有這麼一個例子出現，即顯示系統當前時間的語句：&lt;%=now()%&gt; ，別看這麼簡單的一條語句，裡邊卻包含了ASP的編程思想和格式，會給你後邊的工作帶來很大的幫助。比如說，測試IIS（Internet Information Server）WEB SERVER是否正常工作，用上邊的一個語句測試就足夠了。<font color="#dc143c">2 在WINDOWS NT上安裝ODBC後，要測試和後台數據庫確實連通後，再開始編程測試。</font></p>
<p>可能您沒有看懂題目的意思，我在這裡解釋一下：比如說，後台數據庫是ORACLE，那麼在NT SEVER上首先要安裝SQL*NET（或NET 8），然後配置ODBC，確定和ORACLE數據庫連通，可以用SQL*PLUS測試，還要選擇和ORACLE數據庫相同的字符集，這個工作要在註冊表裡完成。最後在ODBC裡邊測試和ORACLE數據庫連通後，說明WEB SERVER 到後台數據庫端的工作就完成了，下邊再開始編程工作。反過來，你若先編程，後做ODBC的工作，那麼你無法調試程序是否正確，可能大大降低編程效率。在ODBC配置中要選擇MICROSOFT ODBC FOR ORACLE,不要選擇ORACLE ODBC DRIVER，否則不能和數據庫建立聯繫。</p>
<p>在ASP程序中，和數據庫連接的語句是比較固定的，舉例如下：<br />
Set Conn = Server.CreateObject(&#8221;ADODB.Connection&#8221;)<br />
Conn.Open &#8220;odbclink&#8221;,&#8221;o7people&#8221;,&#8221;peoplepd&#8221;<br />
在這裡，odbclink是數據源的名字，可以說成是ODBC和數據庫連接的定義，o7people是ORACLE的一個用戶名，peoplepd是用戶o7people的密碼。</p>
<p><font color="#dc143c">3 記錄下出錯信息，尋找糾錯規律。</font></p>
<p>在編程、調試過程中，是一個出錯、糾錯的循環過程，但是時間長了，會發現一些規律，排除錯誤的效率會大大提高。</p>
<p><strong>3．1 出錯信息：</strong><br />
Microsoft OLE DB Provider for ODBC Drivers 錯誤 80040e14<br />
[Microsoft][ODBC driver for Oracle][Oracle]ORA-00933: SQL command not properly ended<br />
/default.asp, 行781<br />
這種錯誤，一般是在執行 Conn.Execute(&#8221;SQL 語句&#8221;)操作時，所定義的&#8221;SQL 語句&#8221;有問題，檢查此語句就能發現問題，如日期格式不對，等等。</p>
<p><strong>3．2 出錯信息：</strong><br />
ADODB.Field 錯誤 800a0bcd<br />
BOF 或 EOF 中有一個是&#8221;真&#8221;，或者當前的記錄已被刪除，但應用程序要求操作的是當前的記錄。<br />
/lzjsblr.asp, 行123<br />
這個錯誤，一般發生在執行下列語句的過程中：<br />
set RS = Conn.Execute(&#8221;SQL 語句&#8221; )<br />
varnum1=RS(0)<br />
RS.CLOSE<br />
所取的值RS(0)無意義或無意義，還要檢查&#8221;SQL 語句&#8221;的正確性。</p>
<p><strong>3．3 出錯信息：</strong><br />
Microsoft VBScript 編譯器錯誤 錯誤 800a0409<br />
未結束的字符串常量<br />
/people/default.asp, 行86<br />
insert_sql = insert_sql &amp; dwdm &amp; &#8220;,&#8221; &amp; d1 &amp; &#8220;,&#8221; &amp; t1 &amp; &#8220;,&#8221; &amp; t2 &amp; &#8220;,<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;^<br />
次項錯誤也是出在SQL語句的定義上，檢查引號、單引號等的配對情況。</p>
<p>4.下邊是一個基於瀏覽器的網上用戶註冊登記程序，筆者在裡邊運用了一些技巧，奉獻給感興趣的讀者。<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
……<br />
&lt;<br />
&lt;%和數據庫連接<br />
Set Conn = Server.CreateObject(&#8221;ADODB.Connection&#8221;)<br />
Conn.Open &#8220;odbclink&#8221;,&#8221;o7people&#8221;,&#8221;peoplepd&#8221;<br />
將選擇的數據放入選擇框<br />
Set RS = Conn.Execute(&#8221;SELECT dwmc FROM tab_dw order by dwdm&#8221;)<br />
%&gt;<br />
&lt;% Do While Not RS.EOF %&gt; &lt;option&gt;&lt;% = RS(0) %&gt;&lt;/option&gt;<br />
&lt;%<br />
RS.MoveNext<br />
Loop<br />
RS.Close<br />
%&gt;<br />
&lt;%<br />
定義變量<br />
Dim D1,D2,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,csrq,sqrq<br />
事件觸發按鈕<br />
B1=&#8221;commit&#8221;<br />
B2=&#8221;return&#8221;<br />
%&gt;<br />
&lt;%<br />
將信息初始化<br />
Sub Reset()<br />
D1 = &#8220;&#8221;<br />
……<br />
T9 = date()<br />
T10 = &#8220;&#8221;<br />
End Sub<br />
%&gt;<br />
&lt;%<br />
Call Reset()<br />
%&gt;<br />
&lt;%<br />
信息提交條件（觸發條件）<br />
if Request(&#8221;B1&#8243;) = &#8220;commit&#8221; Then Save Button<br />
D1 = Request(&#8221;D1&#8243;)<br />
set DWDM_RS = Conn.Execute(&#8221;SELECT dwdm FROM table_dw where dwmc=&#8221;&amp;D1&amp;&#8221; &#8221; )<br />
DWDM=DWDM_RS(0)<br />
DWDM_RS.CLOSE<br />
D2 = Request(&#8221;D2&#8243;)<br />
……<br />
日期數據轉換成ORACLE識別的格式<br />
csrq = DAY(T6) &amp; &#8220;-&#8221; &amp; month_array(Month(T6)) &amp; &#8220;-&#8221; &amp; Year(T6)<br />
sqrq = DAY(T9) &amp; &#8220;-&#8221; &amp; month_array(Month(T9)) &amp; &#8220;-&#8221; &amp; Year(T9)<br />
定義SQL語句<br />
Sql_insert = &#8220;INSERT INTO peopleuser(dwdm,dwmc,sjks,tele,address,zipcode,xm,xb,csrq,peoplename,peoplepd,sqsj,bz) VALUES (&#8221;<br />
Sql_insert = Sql_insert &amp; DWDM &amp; &#8220;,&#8221; &amp; D1 &amp; &#8220;,&#8221; &amp; T1 &amp; &#8220;,&#8221; &amp; T2 &amp; &#8220;,&#8221; &amp; T3 &amp; &#8220;,&#8221; &amp; T4 &amp; &#8220;,&#8221;<br />
Sql_insert = Sql_insert &amp;T5&amp;&#8221;,&#8221;&amp; D2 &amp; &#8220;,&#8221; &amp; CSRQ &amp; &#8220;,&#8221; &amp; T7 &amp; &#8220;,&#8221; &amp; T8 &amp; &#8220;,&#8221; &amp; SQRQ &amp; &#8220;,&#8221;<br />
Sql_insert = Sql_insert &amp; T10 &amp; &#8220;)&#8221;<br />
將信息入庫<br />
Set LFMC_R4 = Conn.Execute(Sql_insert)<br />
信息提交完成後，將屏幕信息初始化<br />
call reset()<br />
end if<br />
%&gt;</p>
<p>。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。</p>
<p>　　1、設計規劃<br />
　　現在是模塊化程序設計的天下，應用程序要實現的目標就是金字塔尖，進行程序設計規劃的意義就在於，對構成金字塔的基礎模塊進行劃分，規劃得越詳細，模塊分工越明確，越容易明白下一步該做什麼，這好比搭積木的遊戲，你可以把你的積木塊組合成各種各樣的形狀，但首先要熟悉每個積木塊的功能。</p>
<p>　　2、有備無患<br />
　　實戰之前，先找幾個樣例程序研究研究，最起碼明白怎麼開頭，怎麼結尾，別打無準備之仗。</p>
<p>　　3、葵花寶典<br />
　　做一份所用程序語言的精簡列表，包括基本數據類型、各類運算符說明、基本語句結構、常用關鍵詞（保留字）、常用函數（控件）說明等等。</p>
<p>　　4、自由獨立<br />
　　為你的應用程序建立一個單獨的目錄，這樣既方便應用程序文件的管理，而且如果你要給程序搬「家」，捲起鋪蓋就可以走人了。</p>
<p>　　5、見名知意<br />
　　程序再小，用的變量也不會少，變量起名應當見名知意是個老話題了，好處是顯而易見的。推薦程序員使用「匈牙利命名法」，它會使你的起名工作變得輕而易舉，而且相當專業。</p>
<p>　　6、對稱之美<br />
　　中國人講究對稱之美，用在編程裡也很合適，如果程序裡用到A循環嵌套B判斷，B判斷又包含C循環之類的結構，記著使用縮進法，讓A:ENDDO對齊A:DO，B:ENDIF對齊B:IF……諸如此類，依次縮進，總之對稱就等於美觀加易讀。</p>
<p>　　7、多加註解<br />
　　對程序中自定義的變量、函數、子程序加以功能性的註釋說明，別嫌麻煩。如果過了三月五月，連自己寫的東西都看不明白了，那才大麻煩。</p>
<p>　　8、環境保護<br />
　　如果應用程序需要修改系統設置，記著應用開始前先保存設置，應用結束後要恢復設置，千萬別污染環境。</p>
<p>　　9、拿來主義<br />
　　一個人的力量是有限的，大家的力量是無限的，平時多看看別人的程序，如果碰巧有好的經驗，巧的方法，用得上的段子，不妨拿來。</p>
<p>　　10、忍者無敵<br />
　　當你認為程序代碼寫的「百分百」正確，而程序編譯執行百分百有毛病，你基本屬於暈菜的時候，千萬要忍，歇口氣，重頭來，別放棄！相信最終的勝利是屬於你的！</p>
<p>。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。</p>
<p>ASP提速技巧五則</p>
<p>技巧之一：提高使用Request集合的效率<br />
訪問一個ASP集合來提取一個值是費時的、佔用計算資源的過程。因為這個操作包含了一系列對相關集合的搜索，這比訪問一個局部變量要慢得多。因此，如果打算在頁面中多次使用Request集合中的一個值，應該考慮將其存貯為一個局部變量。例如將代碼寫成下面的形式以加快腳本引擎處理速度：<br />
strTitle=Request.Form(&#8221;Title&#8221;)<br />
strFirstName=Request.Form(&#8221;FirstName&#8221;)　<br />
strLastName=Request.Form(&#8221;LastName&#8221;)　<br />
If Len(strTitle) Then strTitle=strTitle &amp; &#8221; &#8220;　<br />
If strFirstName=&#8221;" Then strFullName=strTitle &amp; &#8221; &#8221; &amp; strLastName　<br />
Elseif Len(strFirstName)=1 Then<br />
strFullName=strTitle &amp; strFirstName &amp; &#8220;. &#8221; &amp; strLastName<br />
Else<br />
strFullName=strTitle &amp; strFirstName &amp; &#8221; &#8221; &amp; strLastName　<br />
End If</p>
<p>技巧之二：直接訪問適當的集合<br />
如果不是別無選擇，否則不要使用strPage=Request(&#8221;page&#8221;)的這樣的形式來獲取參數，因為這將按順序搜索全部的集合—QueryString、Form、Cookies、ClientCertificate、ServerVarible直到發現第一個匹配值的名稱。這樣做比直接訪問適當的集合效率低，並且是不安全的，除非能絕對保證這個值不會出現在另外一個集合中。<br />
例如，可能希望搜索滿足客戶請求的WEB服務器名稱，這通過出現在每個查詢中的Request.ServerVarables集合中尋找「SERVER_NAME」來實現。然而，假如其他的集合也包含名為「SERVER_NAME」的值（鍵名不區分大小寫），當使用Request(&#8221;server_Name&#8221;)時，就會得到錯誤的結果。總而言之，應盡可能直接訪問適當的集合。</p>
<p>技巧之三：在費時操作前使用Response.IsClientConnected屬性<br />
使用Response.IsClientConnected是觀察用戶是否仍連到服務器並正在載入ASP創建的網頁的有用方式。如果用戶斷開連接或停止下載，我們就不用再浪費服務器的資源創建網頁，因為緩衝區內容將被IIS丟棄。所以，對那些需要大量時間計算或資源使用較多的網頁來說，值得在每一階段都檢查遊覽者是否已離線：<br />
…… Code to create first part of the page<br />
If Response.IsClientConnected Then<br />
Response.Flush<br />
Else<br />
Response.End<br />
End If<br />
…… Code to create next part of page</p>
<p>技巧之四：優化ASP中的ADO操作<br />
通常面言，數據構成了WEB站點的實際內容。所以，優化ADO操作以加速ASP代碼執行，十分有用：<br />
a. 僅選擇所需的列：當打開ADO記錄集時，除非需要獲得所有的列，否則不應自動地使用表名（即SELECT *）。使用單獨的列意味著將減少發送到服務器或從服務器取出的數據量。即使需要使用全部列，單獨地命名每個列也會獲得最佳的性能，因為服務器不必再解釋這些列的名字。<br />
b. 盡可能的使用存儲過程。存儲過程是預先編譯的程序，含有一個已經準備好的執行計劃，所以比SQL語句執行更快。<br />
c. 使用適當的光標和鎖定模式。如果所做的全部工作只是從記錄集中讀取數據，並將其顯示在屏幕上，那麼就使用缺省的只能前移、只讀的記錄集。ADO用來維護記錄和鎖定的細節的工作越少，執行的性能就越高。<br />
d. 使用對像變量。當遍歷記錄集時一個肯定能提高性能的方法是使用對像變量指向集合中的成員。例如：<br />
While Not RsGc.EOF<br />
Response.Write &#8220;工程名稱：&#8221; &amp; RsGc(&#8221;GcMC&#8221;) &amp; &#8220;(工程代碼：&#8221; &amp; RsGc(&#8221;GcCode&#8221;) &amp; &#8220;)<br />
&#8220;　<br />
RsGc.MoveNext<br />
Wend<br />
可以用改寫為下面的代碼以加快執行：<br />
set GcMc=RsGc(&#8221;GcMc&#8221;)<br />
set GcCode=RsGc(&#8221;GcCode&#8221;)　<br />
While Not rsGc.EOF Response.Write &#8220;工程名稱：&#8221; &amp; GcMc &amp; &#8220;(工程代碼：&#8221; &amp; GcCode &amp; &#8220;)<br />
&#8221; RsGc.MoveNext　<br />
Wend<br />
新的代碼建立了對象變量的引用，所以可以使用對像變量而不是實際的變量，這意味著腳本引擎的工作減少了，因為在集合中進行索引的次數變少了。</p>
<p>技巧五：不要混用腳本引擎<br />
我們知道，ASP頁面中既可以使用VBScript，也可以使用JScript。但是在同一個頁面上同時使用JScript和VBScript則是不可取的。因為服務器必須實例化並嘗試緩存兩個（而不是一個）腳本引擎，這在一定程度上增加了系統負擔。因此，從性能上考慮，不應在同一頁面中混用多種腳本引擎。</p>
<p></font></td>
</tr>
<tr>
<td align="right">(責任編輯:admin)</td>
</tr>
</table>
<div style="margin:5px" align="right"><!--adsense--></div>]]></content:encoded>
			<wfw:commentRss>http://phpexe.com/archives/33/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1小時ASP入門，非常簡單</title>
		<link>http://phpexe.com/archives/32</link>
		<comments>http://phpexe.com/archives/32#comments</comments>
		<pubDate>Tue, 22 Mar 2005 13:04:02 +0000</pubDate>
		<dc:creator>phpexe</dc:creator>
				<category><![CDATA[程式設計]]></category>
		<category><![CDATA[網站製作]]></category>

		<guid isPermaLink="false">http://www.phpexe.com/?p=26</guid>
		<description><![CDATA[

&#60;%
語句
……
%&#62;&#60;2&#62;定義變量dim語句
&#60;%
dim a,b
a=10
b=」ok!」
%&#62;
注意：定義的變量可以是數值型，也可以是字符或者其他類型的&#60;3&#62;簡單的控制流程語句
1. If 條件1 then
語句1
elseif 條件2 then
語句2
else
語句3
endif
2.while 條件
語句
wend
3.for count=1 to n step m
語句1
exit for
語句2
next二.ASP數據庫簡單操作教程
&#60;1&#62;.數據庫連接(用來單獨編製連接文件conn.asp)
&#60;%
Set conn = Server.CreateObject(&#8221;ADODB.Connection&#8221;)
conn.Open &#8220;DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=&#8221; &#38; Server.MapPath(&#8221;\bbs\db1\user.mdb&#8221;)
%&#62;
(用來連接bbs\db1\目錄下的user.mdb數據庫)
&#60;2&#62;顯示數據庫記錄
原理：將數據庫中的記錄一一顯示到客戶端瀏覽器，依次讀出數據庫中的每一條記錄
如果是從頭到尾：用循環並判斷指針是否到末 使用: not rs.eof
如果是從尾到頭：用循環並判斷指針是否到開始 使用：not rs.bof
&#60;!&#8211;#include file=conn.asp&#8211;&#62; (包含conn.asp用來打開bbs\db1\目錄下的user.mdb數據庫)
&#60;%
set rs=server.CreateObject(&#8221;adodb.recordset&#8221;) (建立recordset對像)
sqlstr=&#8221;select * from message&#8221; &#8212;-&#62;(message為數據庫中的一個數據表，即你要顯示的數據所存放的數據表)
rs.open sqlstr,conn,1,3 &#8212;-&#62;(表示打開數據庫的方式)
rs.movefirst &#8212;-&#62;(將指針移到第一條記錄)
while not rs.eof &#8212;-&#62;(判斷指針是否到末尾)
response.write(rs(&#8221;name&#8221;)) &#8212;-&#62;(顯示數據表message中的name字段)
rs.movenext &#8212;-&#62;(將指針移動到下一條記錄)
wend &#8212;-&#62;(循環結束)
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
rs.close
conn.close 這幾句是用來關閉數據庫
set rs=nothing
set conn=nothing
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
%&#62;
其中response對象是服務器向客戶端瀏覽器發送的信息
&#60;3&#62;增加數據庫記錄像
增加數據庫記錄用到rs.addnew,rs.update兩個函數
&#60;!&#8211;#include file=conn.asp&#8211;&#62; (包含conn.asp用來打開bbs\db1\目錄下的user.mdb數據庫)
&#60;%
set rs=server.CreateObject(&#8221;adodb.recordset&#8221;) (建立recordset對像)
sqlstr=&#8221;select * from [...]]]></description>
			<content:encoded><![CDATA[<table border="0" align="center" width="90%" cellPadding="1" cellSpacing="0">
<tr>
<td width="580" vAlign="top" style="font-size: 14px"><font>&lt;%<br />
語句<br />
……<br />
%&gt;&lt;2&gt;<font color="#dc143c">定義變量dim語句</font><br />
&lt;%<br />
dim a,b<br />
a=10<br />
b=」ok!」<br />
%&gt;<br />
注意：定義的變量可以是數值型，也可以是字符或者其他類型的&lt;3&gt;<font color="#dc143c">簡單的控制流程語句</font><br />
<strong>1</strong>. If 條件1 then<br />
語句1<br />
elseif 條件2 then<br />
語句2<br />
else<br />
語句3<br />
endif<br />
<strong>2</strong>.while 條件<br />
語句<br />
wend<br />
<strong>3</strong>.for count=1 to n step m<br />
語句1<br />
exit for<br />
語句2<br />
next二.ASP數據庫簡單操作教程<br />
&lt;1&gt;.<font color="#dc143c">數據庫連接</font>(用來單獨編製連接文件conn.asp)<br />
&lt;%<br />
Set conn = Server.CreateObject(&#8221;ADODB.Connection&#8221;)<br />
conn.Open &#8220;DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=&#8221; &amp; Server.MapPath(&#8221;\bbs\db1\user.mdb&#8221;)<br />
%&gt;<br />
(用來連接bbs\db1\目錄下的user.mdb數據庫)</p>
<p>&lt;2&gt;<font color="#dc143c">顯示數據庫記錄</font><br />
原理：將數據庫中的記錄一一顯示到客戶端瀏覽器，依次讀出數據庫中的每一條記錄<br />
如果是從頭到尾：用循環並判斷指針是否到末 使用: not rs.eof<br />
如果是從尾到頭：用循環並判斷指針是否到開始 使用：not rs.bof</p>
<p>&lt;!&#8211;#include file=conn.asp&#8211;&gt; (包含conn.asp用來打開bbs\db1\目錄下的user.mdb數據庫)<br />
&lt;%<br />
set rs=server.CreateObject(&#8221;adodb.recordset&#8221;) (建立recordset對像)<br />
sqlstr=&#8221;select * from message&#8221; &#8212;-&gt;(message為數據庫中的一個數據表，即你要顯示的數據所存放的數據表)<br />
rs.open sqlstr,conn,1,3 &#8212;-&gt;(表示打開數據庫的方式)<br />
rs.movefirst &#8212;-&gt;(將指針移到第一條記錄)<br />
while not rs.eof &#8212;-&gt;(判斷指針是否到末尾)<br />
response.write(rs(&#8221;name&#8221;)) &#8212;-&gt;(顯示數據表message中的name字段)<br />
rs.movenext &#8212;-&gt;(將指針移動到下一條記錄)<br />
wend &#8212;-&gt;(循環結束)<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
rs.close<br />
conn.close 這幾句是用來關閉數據庫<br />
set rs=nothing<br />
set conn=nothing<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
%&gt;<br />
其中response對象是服務器向客戶端瀏覽器發送的信息</p>
<p>&lt;3&gt;<font color="#dc143c">增加數據庫記錄像</font><br />
增加數據庫記錄用到rs.addnew,rs.update兩個函數<br />
&lt;!&#8211;#include file=conn.asp&#8211;&gt; (包含conn.asp用來打開bbs\db1\目錄下的user.mdb數據庫)<br />
&lt;%<br />
set rs=server.CreateObject(&#8221;adodb.recordset&#8221;) (建立recordset對像)<br />
sqlstr=&#8221;select * from message&#8221; &#8212;-&gt;(message為數據庫中的一個數據表，即你要顯示的數據所存放的數據表)<br />
rs.open sqlstr,conn,1,3 &#8212;-&gt;(表示打開數據庫的方式)<br />
rs.addnew 新增加一條記錄<br />
rs(&#8221;name&#8221;)=&#8221;xx&#8221; 將xx的值傳給name字段<br />
rs.update 刷新數據庫<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
rs.close<br />
conn.close 這幾句是用來關閉數據庫<br />
set rs=nothing<br />
set conn=nothing<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>%&gt;</p>
<p>&lt;4&gt;<font color="#dc143c">刪除一條記錄</font><br />
刪除數據庫記錄主要用到rs.delete,rs.update<br />
&lt;!&#8211;#include file=conn.asp&#8211;&gt; (包含conn.asp用來打開bbs\db1\目錄下的user.mdb數據庫)<br />
&lt;%<br />
dim name<br />
name=&#8221;xx&#8221;<br />
set rs=server.CreateObject(&#8221;adodb.recordset&#8221;) (建立recordset對像)<br />
sqlstr=&#8221;select * from message&#8221; &#8212;-&gt;(message為數據庫中的一個數據表，即你要顯示的數據所存放的數據表)<br />
rs.open sqlstr,conn,1,3 &#8212;-&gt;(表示打開數據庫的方式)<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
while not rs.eof<br />
if rs.(&#8221;name&#8221;)=name then<br />
rs.delete<br />
rs.update 查詢數據表中的name字段的值是否等於變量name的值&#8221;xx&#8221;，如果符合就執行刪除，<br />
else 否則繼續查詢,直到指針到末尾為止<br />
rs.movenext<br />
emd if<br />
wend<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
rs.close<br />
conn.close 這幾句是用來關閉數據庫<br />
set rs=nothing<br />
set conn=nothing<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
%&gt;</p>
<p>&lt;5&gt;<font color="#dc143c">關於數據庫的查詢</font><br />
(a) <strong>查詢字段為字符型</strong><br />
&lt;%<br />
dim user,pass,qq,mail,message<br />
user=request.Form(&#8221;user&#8221;)<br />
pass=request.Form(&#8221;pass&#8221;)<br />
qq=request.Form(&#8221;qq&#8221;)<br />
mail=request.Form(&#8221;mail&#8221;)<br />
message=request.Form(&#8221;message&#8221;)<br />
if trim(user)&amp;&#8221;x&#8221;=&#8221;x&#8221; or trim(pass)&amp;&#8221;x&#8221;=&#8221;x&#8221; then (檢測user值和pass值是否為空，可以檢測到空格)<br />
response.write(&#8221;註冊信息不能為空&#8221;)<br />
else<br />
set rs=server.CreateObject(&#8221;adodb.recordset&#8221;)<br />
sqlstr=&#8221;select * from user where user=&#8221;&amp;user&amp;&#8221;" (查詢user數據表中的user字段其中user字段為字符型)<br />
rs.open sqlstr,conn,1,3<br />
if rs.eof then<br />
rs.addnew<br />
rs(&#8221;user&#8221;)=user<br />
rs(&#8221;pass&#8221;)=pass<br />
rs(&#8221;qq&#8221;)=qq<br />
rs(&#8221;mail&#8221;)=mail<br />
rs(&#8221;message&#8221;)=message<br />
rs.update<br />
rs.close<br />
conn.close<br />
set rs=nothing<br />
set conn=nothing<br />
response.write(&#8221;註冊成功&#8221;)<br />
end if<br />
rs.close<br />
conn.close<br />
set rs=nothing<br />
set conn=nothing<br />
response.write(&#8221;註冊重名&#8221;)<br />
%&gt;<br />
(b)<strong>查詢字段為數字型</strong><br />
&lt;%<br />
dim num<br />
num=request.Form(&#8221;num&#8221;)<br />
set rs=server.CreateObject(&#8221;adodb.recordset&#8221;)<br />
sqlstr=&#8221;select * from message where id=&#8221;&amp;num (查詢message數據表中id字段的值是否與num相等，其中id為數字型)<br />
rs.open sqlstr,conn,1,3<br />
if not rs.eof then<br />
rs.delete<br />
rs.update<br />
rs.close<br />
conn.close<br />
set rs=nothing<br />
set conn=nothing<br />
response.write(&#8221;刪除成功&#8221;)<br />
end if<br />
rs.close<br />
conn.close<br />
set rs=nothing<br />
set conn=nothing<br />
response.write(&#8221;刪除失敗&#8221;)<br />
%&gt;</p>
<p>&lt;6&gt;<font color="#dc143c">幾個簡單的asp對象的講解</font><br />
response對像:服務器端向客戶端發送的信息對像,包括直接發送信息給瀏覽器,重新定向URL，或設置cookie值<br />
request對像:客戶端向服務器提出的請求<br />
session對像:作為一個全局變量，在整個站點都生效<br />
server對像：提供對服務器上方法和屬性的訪問<br />
(a) <strong>response對象的一般使用方法</strong><br />
比如：<br />
&lt;%<br />
resposne.write(&#8221;hello, welcome to asp!&#8221;)<br />
%&gt;<br />
在客戶端瀏覽器就會看到 hello, welcome to asp! 這一段文字<br />
&lt;%<br />
response.Redirect(&#8221;www.sohu.com&#8221;)<br />
%&gt;<br />
如果執行這一段，則瀏覽器就會自動連接到 「搜狐」 的網址<br />
關於response對象的用法還有很多，大家可以研究研究<br />
request對象的一般使用方法<br />
比如客戶端向服務器提出的請求就是通過request對像來傳遞的<br />
列如 ：你在申請郵箱的所填寫的個人信息就是通過該對像來將<br />
你所填寫的信息傳遞給服務器的<br />
比如：這是一段表單的代碼，這是提供給客戶填寫信息的，填寫完了按<br />
「提交」傳遞給request.asp文件處理後再存入服務器數據庫<br />
&lt;form name=&#8221;form1&#8243; method=&#8221;post&#8221; action=&#8221;request.asp&#8221;&gt;<br />
&lt;p&gt;<br />
&lt;input type=&#8221;text&#8221; name=&#8221;user&#8221;&gt;<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
&lt;input type=&#8221;text&#8221; name=&#8221;pass&#8221;&gt;<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
&lt;input type=&#8221;submit&#8221; name=&#8221;Submit&#8221; value=&#8221;提交&#8221;&gt;<br />
&lt;/p&gt;<br />
&lt;/form&gt;<br />
那麼request.asp該如何將其中的信息讀入，在寫入數據庫，在這裡就要用到request對象了，下面我們就來分析request.asp的寫法<br />
&lt;%<br />
dim name,password (定義user和password兩個變量)<br />
name=request.form(「user」) (將表單中的user信息傳給變量name)<br />
password=request.form(「pass」) (將表單中的pass信息傳給變量password)<br />
%&gt;<br />
通過以上的幾句代碼我們就將表單中的數據讀進來了，接下來我們要做的就是將信息寫入數據庫了，寫入數據庫的方法上面都介紹了，這裡就不一一複述了。<br />
（通過上面的學習大家完全可以自己做一個留言版了）</p>
<p></font></td>
</tr>
<tr>
<td align="right">(責任編輯:admin)</td>
</tr>
</table>
<div style="margin:5px" align="right"><!--adsense--></div>]]></content:encoded>
			<wfw:commentRss>http://phpexe.com/archives/32/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP開發web站點</title>
		<link>http://phpexe.com/archives/31</link>
		<comments>http://phpexe.com/archives/31#comments</comments>
		<pubDate>Tue, 22 Mar 2005 13:03:24 +0000</pubDate>
		<dc:creator>phpexe</dc:creator>
				<category><![CDATA[程式設計]]></category>
		<category><![CDATA[網站製作]]></category>

		<guid isPermaLink="false">http://www.phpexe.com/?p=25</guid>
		<description><![CDATA[

說明：由於行文倉促及作者水平有限，難免有錯，歡迎來信指正。一般的大型網站目前已經越來越少的使用ASP來架構，不過在中小型商務站點上，ASP依然佔據了較大的市場範圍。ASP以其簡單，開發週期短，易維護的優點受到中小型站點管理員的青睞。不過，據我所知，完全使用ASP來集成更新維護網站的僅常見於那些真正的商務站點或者比較成熟的技術站點，更多的網站僅僅有一些獨立的欄目在使用ASP程序。這樣的特點是站點管理過於分散，比如：每進入一個欄目管理都要輸入不同的帳號和密碼。不僅浪費管理員的精力，更加重了網站的維護困難程度。而我們看見的那些單欄目使用的ASP程序有很多是從網上尋找的源代碼，這樣使你的網站安全性也會受到一定的威脅，因為網上提供的源代碼都是開放的，每個人都可以研究這個代碼，當然後果你也知道，ASP的安全性本來就是一個受用戶長期關注的問題，而被開放的源代碼更是危險。當然我並不是不贊成大家使用網上的源代碼，只是希望各位能夠注意這個問題，不要完全信奉拿來主義，該修改的地方還是要修改，該打補丁的地方還是要打上補丁（當然絕不是讓你去修改人家的版權信息）。綜上所述，我覺得凡是對ASP有一定瞭解的人都可以自己開發一套整站系統，並且使集成化的。本專題的目的就是為了指引大家如何建立一套完整的web動態站點。為了使各個層次的讀者都能看懂本文，有必要先講講下面這些話：
如果你是初學者，你應該掌握什麼？
必要的VBscript和Javascript。vbs作為主要的ASP程序編寫語言來自於Visual Basic，學過VB的人可以很快的掌握，Javascript就不用說了，嵌入在網頁裡面，客戶端使用平凡的腳本語言。你最好擁有一定的HTML語言知識，不然會覺得很惱火。
SQL語句基礎亦是基礎！
初期你不必掌握全部，基本的就可以了。
前提：我們將用最基本的語句和功能編寫一套web動態站點的整站系統。
您只要認真看完此專題，可以基本掌握web整站開發的思想，並已能賦予實際應用。當然，隨學習的深入，您可以加入更多的功能或對程序算法進行改進。
(1)對網站進行需求分析：
很多人都忽略了這一點，他們認為開發web站點程序不需要用軟件工程的思想，實際上最後會導致web站點的無序化，比如：一些人想到要開發什麼站點想都不想，直接開始寫代碼，想到什麼就寫什麼，直到他們寫完之後，才發現我還需要什麼功能沒有寫，然後就立刻返回加代碼。這樣的話，使得程序極易出錯。所以一開始的時候還是建議你像軟件工程一樣，制定web站點開發的需求分析，應包括所開發web系統的基本要求，如：功能，性能，用戶群，基本的數據流程和處理流程，安全與保密的要求。web系統的目標，條件、假設、限制等。
詳細一點來說，就以我們的站點來說，它是一個技術型站點，就應包括新聞系統、文章系統、下載系統等等，那麼這些系統需要具備哪些功能就是我們要分析的問題。
下面我們就從實例來分析要實現的功能：
新聞系統：一個新聞系統最重要的一點就是能夠實時的把新聞傳達給用戶，那麼新聞系統應該具備哪些功能？發佈時間，點擊次數，插入圖片，以及對新聞來源赫作者的一些註釋。當然發佈時間這些都是非常容易實現的功能。插入圖片可以使用html功能，ubb轉換表或上傳圖片來解決，這些方法本文就不再一一闡述，大家可以參考有關資料。
實際上，不管對於什麼系統，當你在一開始對其需求進行了詳細分析之後，實現起來肯定比想到哪寫道哪輕鬆高效。如果方便的話用電腦或者紙將web系統的開發需求記錄下來，在開發過程中也可以進行參考。這裡還不得不提的一個話題是關於用戶驗證的，一般我們對用戶的驗證使用的是session和cookie，Session變量和cookies是同一類型的。如果某用戶將瀏覽器設置為不兼容任何cookie，那麼該用戶就無法使用這個Session變量及cookies。一般來說，對於網站管理員的操作我個人推薦使用session，因為我們的主題是開發web整站，那麼管理員肯定要在多個管理頁面中跳轉，在這裡session是非常方便的。若是對用戶進行驗證，那麼可以使用cookies，比如用戶可以設置強制瀏覽器把cookie存儲在計算機上面，只需要使用response.cookies的Expires屬性就可以輕鬆的做到，還有一點就是因為sessionID的信息是非常容易丟失的，對於用戶這種長時間訪問的集群，則必須通過在用戶的web瀏覽器中存儲一個專用的cookie，並且把cookie信息保存到數據庫中來創建一個用戶標識。
上面這一節我們講到了web整站開發的先期需求分析，就我個人認為是在網站工程中非常重要的一步。
(2)組織和管理站點結構
往往在開發一個有一定規模的站點的時候，使站點具有較好的目錄結構是一個值得注意的問題。商業應用的程序往往都要求具有在事務內部運行腳本和組件的能力。事務是服務器端的操作，簡單的說就是即便該操作包含了許多步驟，例如：下定單，查看定單，打印訂單等也只能整體返回操作是成功還是失敗。用戶可以創建在事務內部運行的ASP腳本，如果教本的任何一部分操作失敗，那麼整個事務就終止。
這裡我們要詳細說明的並不是事務性腳本在整站中的應用，而是要讓你在開發中不至於被眾多的文件，眾多的操作攪昏了頭。
合理的對文件名進行組織。例如：我們將管理頁面命名為admin.asp,而管理頁面中對各個欄目進行操作的頁面可以在admin後面加下劃線然後命以這個欄目的名稱，比如新聞管理頁面admin_news.asp,下載管理頁面admin_download.asp
關於文件的放置。我這裡僅是以我得做法來講解，相信各位能有自己的見解。將所有管理操作頁面放置於同一目錄下面，為的是更加方便的管理和分配權限。各個欄目用戶頁面可以放在一個目錄下方便於管理。數據庫可以放在統一的目錄下面。
怎樣減少文件的數量。你沒有必要為每個添加，刪除，修改或者別的操作新建許多頁面，你可以使用參數來減少頁面，打一個比方，在管理頁面admin_news.asp中，當admin_news.asp?action=addnew的時候執行添加操作，當admin_news.asp?action=del的時候執行刪除操作，這樣將大大增強你站點集成化程度。
可以重用的代碼。很多代碼是可以重複使用的，比如UBB的轉換表等，可以把它們單獨放在一個目錄中。
(3)開發後台管理
我不知道各位開發者是不是和我一樣，先將後台開發完畢後再進行前台開發。或者你是混在一起來做。不過，我認為先開發後台是比較合適的。前面我們講過先要對系統進行分析，要實現哪些功能自己心裡要有個底。這樣做起來才會事半功倍，也會減少許多不必要的錯誤。後台管理無非具有以下這些功能：
1）用戶驗證
2）添加網站數據
3）修改網站數據
4）刪除網站數據
5）站點系統設置
6）站點訪問統計
7）搜集用戶信息
&#8230;
如何把他們同意的集中在一起管理，是我們要解決的問題。比如說用戶驗證我們可以這樣來實現：
&#60;%
&#8230;
username=replace(trim(request(&#8221;username&#8221;)),&#8221;",&#8221;")
password=replace(trim(Request(&#8221;password&#8221;)),&#8221;",&#8221;")
set rs=server.createobject(&#8221;adodb.recordset&#8221;)
sql=&#8221;select * from admin where password=&#8221;&#38;password&#38;&#8221; and username=&#8221;&#38;username&#38;&#8221;"
rs.open sql,conn,1,1
if not(rs.bof and rs.eof) then
if password=rs(&#8221;password&#8221;) then
session(&#8221;admin&#8221;)=rs(&#8221;username&#8221;)
session(&#8221;flag&#8221;)=rs(&#8221;flag&#8221;)
else
end if
else
end if
&#8230;
%&#62;
username和password是從用戶表單輸入傳遞過來的值，你一定要注意用replace處理一次後再和數據庫中存儲的值進行對比。因為我們知道username=username是恆等的，必須把用戶輸入的去掉。
通過驗證後建立一個session變量，可以很方便的在各個管理頁面中進行管理。
要對用戶進行驗證的頁面可以這樣寫：
&#60;%if session(&#8221;admin&#8221;)=&#8221;" then
response.write &#8220;no access&#8221;
else
&#8230;
end if
%&#62;
有人在數據處理的頁面會遺忘寫這個驗證，這是非常危險的，用戶可以通過這個缺陷非法提交數據。
再來說說如何收集用戶信息，這似乎都不涉及到太多技術了，一般可以這麼做，比如你站點的特色是提供自主產權的軟件下載，你可以讓用戶在下載前填寫用戶信息表，這個方法在外國網站用的比較多，在中國還很少見，我的網站就擁有這個功能，讓我輕鬆的知道來自美國和新西蘭的用戶比較多。
在進行後台管理開發的時候還往往遇到這個問題，為不同的管理員分配不同的權限。僅以西路整站系統講一種方法。在上面驗證用戶的時候我們還將flag寫入了session變量，我們可以通過flag來判斷用戶級別，當然前提是你已經為flag分配了不同的值。具體可以這樣實現：
&#60;%
select case session(&#8221;flag&#8221;)
case &#8220;1&#8243;
case &#8220;9&#8243;
case &#8220;10&#8243;
case else
%&#62;
&#60;script language=&#8221;javascript&#8221;&#62;
if (confirm(&#8221;您的操作權限不夠(進入站點新聞設置界面需要第1或9,10級權限),系統拒絕你的訪問,請點確定返回,或者點取消退出重新登錄&#8221;))
location.href=&#8221;admin.asp&#8221; mce_href=&#8221;admin.asp&#8221;;
else
location.href=&#8221;quit.asp&#8221; mce_href=&#8221;quit.asp&#8221;;
&#60;/script&#62;
&#60;%end select%&#62;
以上確定了三種級別可以進入該操作頁面的管理員。當然這裡僅僅是說明了一種簡單的驗證方法，其實你亦可以使用split函數等來確定用戶權限。



(責任編輯:admin)


]]></description>
			<content:encoded><![CDATA[<table border="0" align="center" width="90%" cellPadding="1" cellSpacing="0">
<tr>
<td width="580" vAlign="top" style="font-size: 14px"><font>說明：由於行文倉促及作者水平有限，難免有錯，歡迎來信指正。一般的大型網站目前已經越來越少的使用ASP來架構，不過在中小型商務站點上，ASP依然佔據了較大的市場範圍。ASP以其簡單，開發週期短，易維護的優點受到中小型站點管理員的青睞。不過，據我所知，完全使用ASP來集成更新維護網站的僅常見於那些真正的商務站點或者比較成熟的技術站點，更多的網站僅僅有一些獨立的欄目在使用ASP程序。這樣的特點是站點管理過於分散，比如：每進入一個欄目管理都要輸入不同的帳號和密碼。不僅浪費管理員的精力，更加重了網站的維護困難程度。而我們看見的那些單欄目使用的ASP程序有很多是從網上尋找的源代碼，這樣使你的網站安全性也會受到一定的威脅，因為網上提供的源代碼都是開放的，每個人都可以研究這個代碼，當然後果你也知道，ASP的安全性本來就是一個受用戶長期關注的問題，而被開放的源代碼更是危險。當然我並不是不贊成大家使用網上的源代碼，只是希望各位能夠注意這個問題，不要完全信奉拿來主義，該修改的地方還是要修改，該打補丁的地方還是要打上補丁（當然絕不是讓你去修改人家的版權信息）。綜上所述，我覺得凡是對ASP有一定瞭解的人都可以自己開發一套整站系統，並且使集成化的。本專題的目的就是為了指引大家如何建立一套完整的web動態站點。為了使各個層次的讀者都能看懂本文，有必要先講講下面這些話：</p>
<p>如果你是初學者，你應該掌握什麼？<br />
必要的VBscript和Javascript。vbs作為主要的ASP程序編寫語言來自於Visual Basic，學過VB的人可以很快的掌握，Javascript就不用說了，嵌入在網頁裡面，客戶端使用平凡的腳本語言。你最好擁有一定的HTML語言知識，不然會覺得很惱火。</p>
<p>SQL語句基礎亦是基礎！<br />
初期你不必掌握全部，基本的就可以了。</p>
<p>前提：我們將用最基本的語句和功能編寫一套web動態站點的整站系統。</p>
<p>您只要認真看完此專題，可以基本掌握web整站開發的思想，並已能賦予實際應用。當然，隨學習的深入，您可以加入更多的功能或對程序算法進行改進。<br />
(1)對網站進行需求分析：</p>
<p>很多人都忽略了這一點，他們認為開發web站點程序不需要用軟件工程的思想，實際上最後會導致web站點的無序化，比如：一些人想到要開發什麼站點想都不想，直接開始寫代碼，想到什麼就寫什麼，直到他們寫完之後，才發現我還需要什麼功能沒有寫，然後就立刻返回加代碼。這樣的話，使得程序極易出錯。所以一開始的時候還是建議你像軟件工程一樣，制定web站點開發的需求分析，應包括所開發web系統的基本要求，如：功能，性能，用戶群，基本的數據流程和處理流程，安全與保密的要求。web系統的目標，條件、假設、限制等。</p>
<p>詳細一點來說，就以我們的站點來說，它是一個技術型站點，就應包括新聞系統、文章系統、下載系統等等，那麼這些系統需要具備哪些功能就是我們要分析的問題。</p>
<p>下面我們就從實例來分析要實現的功能：</p>
<p>新聞系統：一個新聞系統最重要的一點就是能夠實時的把新聞傳達給用戶，那麼新聞系統應該具備哪些功能？發佈時間，點擊次數，插入圖片，以及對新聞來源赫作者的一些註釋。當然發佈時間這些都是非常容易實現的功能。插入圖片可以使用html功能，ubb轉換表或上傳圖片來解決，這些方法本文就不再一一闡述，大家可以參考有關資料。</p>
<p>實際上，不管對於什麼系統，當你在一開始對其需求進行了詳細分析之後，實現起來肯定比想到哪寫道哪輕鬆高效。如果方便的話用電腦或者紙將web系統的開發需求記錄下來，在開發過程中也可以進行參考。這裡還不得不提的一個話題是關於用戶驗證的，一般我們對用戶的驗證使用的是session和cookie，Session變量和cookies是同一類型的。如果某用戶將瀏覽器設置為不兼容任何cookie，那麼該用戶就無法使用這個Session變量及cookies。一般來說，對於網站管理員的操作我個人推薦使用session，因為我們的主題是開發web整站，那麼管理員肯定要在多個管理頁面中跳轉，在這裡session是非常方便的。若是對用戶進行驗證，那麼可以使用cookies，比如用戶可以設置強制瀏覽器把cookie存儲在計算機上面，只需要使用response.cookies的Expires屬性就可以輕鬆的做到，還有一點就是因為sessionID的信息是非常容易丟失的，對於用戶這種長時間訪問的集群，則必須通過在用戶的web瀏覽器中存儲一個專用的cookie，並且把cookie信息保存到數據庫中來創建一個用戶標識。</p>
<p>上面這一節我們講到了web整站開發的先期需求分析，就我個人認為是在網站工程中非常重要的一步。<br />
(2)組織和管理站點結構</p>
<p>往往在開發一個有一定規模的站點的時候，使站點具有較好的目錄結構是一個值得注意的問題。商業應用的程序往往都要求具有在事務內部運行腳本和組件的能力。事務是服務器端的操作，簡單的說就是即便該操作包含了許多步驟，例如：下定單，查看定單，打印訂單等也只能整體返回操作是成功還是失敗。用戶可以創建在事務內部運行的ASP腳本，如果教本的任何一部分操作失敗，那麼整個事務就終止。</p>
<p>這裡我們要詳細說明的並不是事務性腳本在整站中的應用，而是要讓你在開發中不至於被眾多的文件，眾多的操作攪昏了頭。</p>
<p>合理的對文件名進行組織。例如：我們將管理頁面命名為admin.asp,而管理頁面中對各個欄目進行操作的頁面可以在admin後面加下劃線然後命以這個欄目的名稱，比如新聞管理頁面admin_news.asp,下載管理頁面admin_download.asp</p>
<p>關於文件的放置。我這裡僅是以我得做法來講解，相信各位能有自己的見解。將所有管理操作頁面放置於同一目錄下面，為的是更加方便的管理和分配權限。各個欄目用戶頁面可以放在一個目錄下方便於管理。數據庫可以放在統一的目錄下面。</p>
<p>怎樣減少文件的數量。你沒有必要為每個添加，刪除，修改或者別的操作新建許多頁面，你可以使用參數來減少頁面，打一個比方，在管理頁面admin_news.asp中，當admin_news.asp?action=addnew的時候執行添加操作，當admin_news.asp?action=del的時候執行刪除操作，這樣將大大增強你站點集成化程度。</p>
<p>可以重用的代碼。很多代碼是可以重複使用的，比如UBB的轉換表等，可以把它們單獨放在一個目錄中。<br />
(3)開發後台管理<br />
我不知道各位開發者是不是和我一樣，先將後台開發完畢後再進行前台開發。或者你是混在一起來做。不過，我認為先開發後台是比較合適的。前面我們講過先要對系統進行分析，要實現哪些功能自己心裡要有個底。這樣做起來才會事半功倍，也會減少許多不必要的錯誤。後台管理無非具有以下這些功能：<br />
1）用戶驗證<br />
2）添加網站數據<br />
3）修改網站數據<br />
4）刪除網站數據<br />
5）站點系統設置<br />
6）站點訪問統計<br />
7）搜集用戶信息<br />
&#8230;<br />
如何把他們同意的集中在一起管理，是我們要解決的問題。比如說用戶驗證我們可以這樣來實現：</p>
<p>&lt;%<br />
&#8230;<br />
username=replace(trim(request(&#8221;username&#8221;)),&#8221;",&#8221;")<br />
password=replace(trim(Request(&#8221;password&#8221;)),&#8221;",&#8221;")<br />
set rs=server.createobject(&#8221;adodb.recordset&#8221;)<br />
sql=&#8221;select * from admin where password=&#8221;&amp;password&amp;&#8221; and username=&#8221;&amp;username&amp;&#8221;"<br />
rs.open sql,conn,1,1<br />
if not(rs.bof and rs.eof) then<br />
if password=rs(&#8221;password&#8221;) then<br />
session(&#8221;admin&#8221;)=rs(&#8221;username&#8221;)<br />
session(&#8221;flag&#8221;)=rs(&#8221;flag&#8221;)<br />
else<br />
end if<br />
else<br />
end if<br />
&#8230;<br />
%&gt;</p>
<p>username和password是從用戶表單輸入傳遞過來的值，你一定要注意用replace處理一次後再和數據庫中存儲的值進行對比。因為我們知道username=username是恆等的，必須把用戶輸入的去掉。</p>
<p>通過驗證後建立一個session變量，可以很方便的在各個管理頁面中進行管理。<br />
要對用戶進行驗證的頁面可以這樣寫：</p>
<p>&lt;%if session(&#8221;admin&#8221;)=&#8221;" then<br />
response.write &#8220;no access&#8221;<br />
else<br />
&#8230;<br />
end if<br />
%&gt;</p>
<p>有人在數據處理的頁面會遺忘寫這個驗證，這是非常危險的，用戶可以通過這個缺陷非法提交數據。</p>
<p>再來說說如何收集用戶信息，這似乎都不涉及到太多技術了，一般可以這麼做，比如你站點的特色是提供自主產權的軟件下載，你可以讓用戶在下載前填寫用戶信息表，這個方法在外國網站用的比較多，在中國還很少見，我的網站就擁有這個功能，讓我輕鬆的知道來自美國和新西蘭的用戶比較多。</p>
<p>在進行後台管理開發的時候還往往遇到這個問題，為不同的管理員分配不同的權限。僅以西路整站系統講一種方法。在上面驗證用戶的時候我們還將flag寫入了session變量，我們可以通過flag來判斷用戶級別，當然前提是你已經為flag分配了不同的值。具體可以這樣實現：</p>
<p>&lt;%<br />
select case session(&#8221;flag&#8221;)<br />
case &#8220;1&#8243;<br />
case &#8220;9&#8243;<br />
case &#8220;10&#8243;<br />
case else<br />
%&gt;<br />
&lt;script language=&#8221;javascript&#8221;&gt;<br />
if (confirm(&#8221;您的操作權限不夠(進入站點新聞設置界面需要第1或9,10級權限),系統拒絕你的訪問,請點確定返回,或者點取消退出重新登錄&#8221;))<br />
location.href=&#8221;admin.asp&#8221; mce_href=&#8221;admin.asp&#8221;;<br />
else<br />
location.href=&#8221;quit.asp&#8221; mce_href=&#8221;quit.asp&#8221;;<br />
&lt;/script&gt;<br />
&lt;%end select%&gt;</p>
<p>以上確定了三種級別可以進入該操作頁面的管理員。當然這裡僅僅是說明了一種簡單的驗證方法，其實你亦可以使用split函數等來確定用戶權限。</p>
<p></font></td>
</tr>
<tr>
<td align="right">(責任編輯:admin)</td>
</tr>
</table>
<div style="margin:5px" align="right"><!--adsense--></div>]]></content:encoded>
			<wfw:commentRss>http://phpexe.com/archives/31/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>網頁設計規範</title>
		<link>http://phpexe.com/archives/30</link>
		<comments>http://phpexe.com/archives/30#comments</comments>
		<pubDate>Tue, 22 Mar 2005 13:02:26 +0000</pubDate>
		<dc:creator>phpexe</dc:creator>
				<category><![CDATA[程式設計]]></category>
		<category><![CDATA[網站製作]]></category>

		<guid isPermaLink="false">http://www.phpexe.com/?p=24</guid>
		<description><![CDATA[

一. 規範有效期：從PSD源文件到HTM頁面交付給客戶為止；二. 面向的對象：所有的設計人員及編輯人員； 三. 生成HTM文件的命名1. 網站結構
生成大於兩個頁面的網站時必須有以下結構.
例: (citk.net)
index.htm 根目錄
/common 公司用件夾(swf/js/css)文件存放處
/images 網站使用圖片
/Templates DW自動生成的模版目錄
/news * 是否使用二級目錄結構 *
&#8230;
/service * 是否使用二級目錄結構 *
2. 模版的命名
一般情況下設計出來的網頁一般有三個兩種版式(推薦使用下面這三個文件命名)
index.dwt (可選, 一個網站只要有一個index件)
list.dwt
memo.dwt
3. 模版的可編輯區命名(待定)
4. 關於模版的套用
希望網站中(除了index外)所的網頁(HTM文件)都應該對應一個模版(dwt文件)
5. 關於鏈接
除了標注的幾個鏈接(如: http://zf.91.com)外，其他頁面禁止使用絕對鏈接(就是使用http://開頭的鏈接格式)
6. 關於CSS
生成頁面時，請重新定義 &#60;TD&#62; 樣式標籤
css定義（待定)
7. 網站首頁head區代碼規範_ (是否由編輯來填)
註釋 &#60;!&#8212; 日期與設計師姓名 &#8212;&#62; *　是否需要
&#60;!&#8212; 日期與修改者(編輯)姓名 &#8212;&#62; *
網站簡介 &#60;META NAME=&#8221;DESCRIPTION&#8221; CONTENT=&#8221;網站簡介&#8221;&#62;
搜索關鍵字 &#60;META NAME=&#8221;keywords&#8221; CONTENT=&#8221;關鍵字1,關鍵字2,關鍵字3&#8243;&#62;
css規範 &#60;LINK href=&#8221;style/style.css&#8221; mce_href=&#8221;style/style.css&#8221; rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221;&#62;
搜索機器人&#60;META NAME=&#8221;robots&#8221; CONTENT=&#8221;"&#62;
　　　CONTENT的參數有all,none,index,noindex,follow,nofollow。默認是all。
js規範 &#60;script language=&#8221;JavaScript&#8221; type=&#8221;text/JavaScript&#8221; src=&#8221;menu.js&#8221; mce_src=&#8221;menu.js&#8221;&#62;&#60;/script&#62;
其他由ps or [...]]]></description>
			<content:encoded><![CDATA[<table border="0" align="center" width="90%" cellPadding="1" cellSpacing="0">
<tr>
<td width="580" vAlign="top" style="font-size: 14px"><font>一. <font color="#dc143c">規範有效期</font>：從PSD源文件到HTM頁面交付給客戶為止；</font><font>二. <font color="#dc143c">面向的對象</font>：所有的設計人員及編輯人員； </font><font>三. <font color="#dc143c">生成HTM文件的命名</font></font><font>1. 網站結構<br />
生成大於兩個頁面的網站時必須有以下結構.<br />
例: (citk.net)<br />
index.htm 根目錄<br />
/common 公司用件夾(swf/js/css)文件存放處<br />
/images 網站使用圖片<br />
/Templates DW自動生成的模版目錄<br />
/news * 是否使用二級目錄結構 *<br />
&#8230;<br />
/service * 是否使用二級目錄結構 *</p>
<p>2. 模版的命名<br />
一般情況下設計出來的網頁一般有三個兩種版式(推薦使用下面這三個文件命名)<br />
index.dwt (可選, 一個網站只要有一個index件)<br />
list.dwt<br />
memo.dwt</p>
<p>3. 模版的可編輯區命名(待定)</p>
<p>4. 關於模版的套用<br />
希望網站中(除了index外)所的網頁(HTM文件)都應該對應一個模版(dwt文件)</p>
<p>5. 關於鏈接<br />
除了標注的幾個鏈接(如: http://zf.91.com)外，其他頁面禁止使用絕對鏈接(就是使用http://開頭的鏈接格式)</p>
<p>6. 關於CSS<br />
生成頁面時，請重新定義 &lt;TD&gt; 樣式標籤<br />
css定義（待定)</p>
<p>7. 網站首頁head區代碼規範_ (是否由編輯來填)</p>
<p>註釋 &lt;!&#8212; 日期與設計師姓名 &#8212;&gt; *　是否需要<br />
&lt;!&#8212; 日期與修改者(編輯)姓名 &#8212;&gt; *</p>
<p>網站簡介 &lt;META NAME=&#8221;DESCRIPTION&#8221; CONTENT=&#8221;網站簡介&#8221;&gt;</p>
<p>搜索關鍵字 &lt;META NAME=&#8221;keywords&#8221; CONTENT=&#8221;關鍵字1,關鍵字2,關鍵字3&#8243;&gt;</p>
<p>css規範 &lt;LINK href=&#8221;style/style.css&#8221; mce_href=&#8221;style/style.css&#8221; rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221;&gt;</p>
<p>搜索機器人&lt;META NAME=&#8221;robots&#8221; CONTENT=&#8221;"&gt;<br />
　　　CONTENT的參數有all,none,index,noindex,follow,nofollow。默認是all。</p>
<p>js規範 &lt;script language=&#8221;JavaScript&#8221; type=&#8221;text/JavaScript&#8221; src=&#8221;menu.js&#8221; mce_src=&#8221;menu.js&#8221;&gt;&lt;/script&gt;</p>
<p>其他由ps or ir 自動生成</p>
<p>四. <font color="#dc143c">注意事項</font></p>
<p>1. 編輯大於三個頁面的網站，請使用DW站點管理器；<br />
2. 在生成頁面時，盡量把網頁的內容模塊化；<br />
3. 在生成頁面時，要求使用已經存在的元素(圖片,Js,樣式)<br />
4. 頁面的頭部及底部使用(ifarme)內嵌頁面</p>
<p>編者註：事實上，我覺得個人網站沒有必要這樣規範，遵循一般的命名規則即可。但對於團隊協作者，規範還是非常有必要的。</p>
<p></font></td>
</tr>
<tr>
<td align="right">(責任編輯:admin)</td>
</tr>
</table>
<div style="margin:5px" align="right"><!--adsense--></div>]]></content:encoded>
			<wfw:commentRss>http://phpexe.com/archives/30/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
