據(jù)Merriam-WebsterOnline地解釋,動態(tài)一詞的意思是網(wǎng)頁的內容由“通常是連續(xù)的和實時生成的活動或者改變的信息組成?!币虼水斘覀冋務搫討B(tài)數(shù)據(jù)的時候,我們也就是在談論作為Web頁面發(fā)送給用戶的信息是由不同的源數(shù)據(jù)組合而成的。這與靜態(tài)網(wǎng)頁的概念是相對的,靜態(tài)網(wǎng)頁的內容并不依賴用戶輸入的數(shù)據(jù)而改變而且通常是直接解析給用戶。Web頁面上的動態(tài)信息有三種主要的類型:
為相山等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及相山網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為網(wǎng)站制作、成都網(wǎng)站設計、相山網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
動態(tài)數(shù)據(jù)晌森--在一個Web頁面里產(chǎn)生的變量。
動態(tài)Web頁面--整個Web頁面都是動態(tài)生成的。
動態(tài)內容--Web頁面的一部分是動態(tài)生成的。
你如果源昌希望對動態(tài)內容產(chǎn)生的過程進行細微的控制,就象動態(tài)數(shù)據(jù)的那種類型一樣,那么數(shù)據(jù)處理的過程就會復雜一些。而如果你想生成大范圍的信息,就象動態(tài)Web頁面的生成那樣,那么程序的邏輯就會變得復雜。動態(tài)內容的生成是這兩種方式的折衷,它能夠讓我們使用兩個很有用的PHP函數(shù),include()和require()。
要記住,你在后端加入的邏輯越多,那么你的Web站點的性能將會損失得越嚴重。幸運的是,PHP能夠很流暢的進行預處理過程,所以當我在處理動態(tài)內容和數(shù)據(jù)的時候都盡可能多的使用PHP的功能。
數(shù)據(jù)源和PHP功能
所有的動態(tài)內容都有一個共同點:它們從一個原始頁面以外的數(shù)據(jù)源而來。圖A列出了一些常見的數(shù)據(jù)源以及用來處理它們的相應的PHP函數(shù)。
FigureA
數(shù)據(jù)源
PHP函數(shù)
注釋
User
$HTTP_POST_VARS
$HTTP_GET_VARS
這些函數(shù)處理由用戶通過Web表單直接輸入的數(shù)據(jù)。
Database(localorremote)
dbtype_connect()
dbtype_pconnect()
dbtype_close()
dbtype_function()
example:
mysql_fetch_array()
這些都只是PHP許多數(shù)據(jù)庫訪問函數(shù)中的一部分,許多函數(shù)是為每個不同的數(shù)據(jù)庫特別編寫的。你能夠在PHP函數(shù)參考手冊里找到這些函數(shù)的完整列表。
Remotefile
fopen(),fclose()
fgets(),fputs()
這些函數(shù)處理一個遠程服務器上文件中的數(shù)據(jù),這個文件可以通過FTP訪問。
Localfile
include(),require()
fopen(),fclose()
這些函數(shù)處理位于本地服務器上的文件中的數(shù)據(jù),比方說配置文件。
常見的數(shù)據(jù)源和處理它們的PHP函數(shù)
在這篇文章“教程:PHP起步中,”我們觀看了一個演示的腳本,這個腳本要求用戶輸入他們最喜歡的數(shù)字。根據(jù)用戶輸入的結果,我們在Web頁面上顯示一條消息。這就是一個由用戶驅動的動態(tài)Web內容的例子。從Web表單返回的結果將決定顯示的內容。一個更復雜的例子是“點擊流程”應用程序,這個程序能夠根據(jù)一個用戶在Web站點上訪問過的頁面來決定向他或者她發(fā)送什么廣告。
一旦數(shù)據(jù)已經(jīng)輸入,不管它是由用戶或者其它的方式輸入的,將會被保存在一個數(shù)據(jù)庫中并在以后重新使用。如果它被用來決定顯示的內容,那么這些內容將可以被認為是“由數(shù)據(jù)庫驅動的動態(tài)內容?!蔽覀儗⒃谙乱黄恼轮懈屑毜目纯催@種類型的動態(tài)信息。目前,讓我們先察看一個由文件驅動的動態(tài)內容的簡單的PHP腳本的例子。我們將使用基于一個配置文件的邏輯來決定在Web頁面上應該顯示什么樣的頁面風格和字體。我們選擇的頁面風格將會在用戶請求Web頁面的時候顯示出來。(這里我想就包括文件的例子給你提個醒:你真的應該在這個例子中為完成要求的功能而使用風格頁。)
例子程序:Display.php
Display腳本使用一個獨立的配宴裂畝置文件來包含變量值和幾個含有HTML的變量部分的包括文件。雖然這看起來不是特別動態(tài),但是你能夠輕易的要求用戶使用Web表單來創(chuàng)建一個配置文件并使用一定的邏輯來判斷應該加載哪一個配置文件,等等。(我們在“理解PHP的函數(shù)和類”這篇文章中所作的討論將幫助你完成這個工作。)
由于本文的目的所限,我們將跳過這方面的處理過程并盡量使它簡化。表A展示了我們的主頁面,以及你通過瀏覽器調用的頁面,Display.php。(PHP代碼將用粗體進行顯示。)
表A
這段簡單的代碼必須做三件事情:
使用PHPinclude()函數(shù)來包含!--display.php這個Web頁面的風格由一個配置文件決定--
html
head
titleMoodPage/title
/head
?php
include("displayconf.php");
$required_file=$display.".php";
require$required_file;
?
brbr
centerThisisthebest"moodpage"ever!/center
/font
/body
/html
Displayconf.php中的變量并對它們進行求值。
創(chuàng)建一個表示用戶請求的文件名的變量。在我們這個例子中,Displayconf.php文件里定義的變量$display被求值,然后加上.php后綴。(這是由我們的邏輯完成的。)
使用PHP的require()函數(shù)顯示正確的包含文件里的內容。
你應該注意到在我們的例子中,PHPrequire()函數(shù)和include()函數(shù)是完全可以互換的。這兩個函數(shù)之間主要的區(qū)別在于目標文件處理的方式不同。一個require()語句將會由它所調用的文件替換。這意味著在一個循環(huán)當中,遠程的文件只會被調用一次。而另一方面,在每次遇到include()函數(shù)的時候,它都會被重新求值。這意味著在一個循環(huán)的過程中,文件將在每一次循環(huán)過程中都被訪問一次,而且在包括文件中設置的變量每次都會更新。
在這個例子中,我試圖講清楚什么時候使用什么函數(shù)合適。對于文件Displayconf.php,很有可能它里面的變量值已經(jīng)改變。畢竟,這是一個配置文件。因此,我選擇了include()函數(shù)。而另一方面,$required文件在交互的過程中很有可能不會改變。如果用戶請求的是不同的文件體,那么我們有可能會創(chuàng)建一個新的文件再把它包括進來,所以我使用require()函數(shù)。
高級用戶可能希望看看PHP的手冊來了解更多的關于函數(shù)require_once()和include_once()的信息以便能夠對文件處理和配置文件變量的管理進行更好的控制。
表B顯示了我們的配置文件,Displayconf.php。(為了簡單化的目的,我們將把所有的文件放在和Web服務器相同的目錄下。)我們在這里要做的就是將$display變量設置成一個可選的值。
表B
?php#displayconf.php
#display.php的配置文件
#-------------------------------------------------
#將變量$display設置成下列值之一:
#happy,sad,或者generic
$display="happy";
?
最后我們需要一些內容文件--對應配置文件中的每一個選項。因為這些內容都是靜態(tài)的HTML,所以我們不需要在文件里加上PHP腳標。當你在PHP里使用include()或者require()函數(shù)的時候,被調用的文件在處理過程開始的時候被跳過然后在處理結束的時候被加進來。
"happy"文件內容(happy.php)
bodybgcolor=pinktext=yellow
fontsize="+5"
"Sad"文件內容(sad.php)
bodybgcolor=bluetext=white
fontface="arial,helvetica"size="+5"
"Generic"文件內容(generic.php)
bodybgcolor=whitetext=black
fontface="courier"size="+5"
當你單擊頁面Display.php的時候,這個頁面的外觀和感受將會根據(jù)你在配置文件中輸入的值而改變。
總結
在本文中,我們討論了動態(tài)信息的基礎知識并使用一個腳本來創(chuàng)建由文件驅動的動態(tài)內容。特別的是,我們使用include()和require()PHP函數(shù)來提取和發(fā)送我們的數(shù)據(jù)。
下面是一些最后的話。雖然我相信你一定熟悉WAIWeb編程指南,但是你也許還應該看看W3C對于動態(tài)內容所說的支配以及用戶對它的訪問能力。你可能還要看看PHP手冊中的這一章“使用遠程文件”來學習如何使用FTP來提取配置數(shù)據(jù)。
用ASP連接各種數(shù)據(jù)庫的方法
一、ASP的對象存取數(shù)據(jù)庫方法
在ASP中,用來存取數(shù)據(jù)庫的對象統(tǒng)稱ADO(Active Data Objects),主要含有三種對象:Connection、Recordset 、Command
Connection:負責打開或連接數(shù)據(jù)
Recordset:負責存取數(shù)據(jù)表
Command:負責對數(shù)據(jù)庫執(zhí)行行動查詢命令
二、連接各數(shù)據(jù)庫的驅動程序
連接各數(shù)據(jù)庫可以使用驅動程序,也可以使用數(shù)據(jù)源,不洞孫過我建議大家使用驅動程序,因為使用驅動程序非常方便、簡單,而使用數(shù)據(jù)源比較麻煩。
ODBC鏈接
適合數(shù)據(jù)庫類型 鏈接方式
access "Driver={microsoft access driver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;"
dBase "Driver={microsoft dbase driver(*.dbf)};driverid=277;dbq=------------;"
Oracle "Driver={microsoft odbc for oracle};server=oraclesever.world;uid=admin;pwd=pass;"
MSSQL server "Driver={sql server};server=servername;database=dbname;uid=sa;pwd=pass;"
MS text "Driver={microsoft text driver(*.txt; *.csv)};dbq=-----;extensions=asc,csv,tab,txt;Persist SecurityInfo=false;"
Visual Foxpro "Driver={microsoft Visual Foxpro driver};sourcetype=DBC;sourceDB=*.dbc;Exclusive=No;"
MySQL "Driver={mysql};database=yourdatabase;uid=username;pwd=yourpassword;option=16386;"
OLEDB鏈接
適合的數(shù)據(jù)庫類型 鏈接方式
access "Provider=microsoft.jet.oledb.4.0;data source=your_database_path;user id=admin;password=pass;"
Oracle "Provider=OraOLEDB.Oracle;data source=dbname;user id=admin;password=pass;"
MS SQL Server "Provider=SQLOLEDB;data source=machinename;initial catalog=dbname;userid=sa;password=pass;"
MS text "Provider=microsof.jet.oledb.4.0;data source=your_path;Extended Properties′text;FMT=Delimited′"
而我們在一般情況下使用Access的數(shù)據(jù)庫比較多,在這里我建議大家連接Access數(shù)據(jù)庫使用下面的方法:
dim conn
set conn = server.createobject("adodb.connection")
conn.open = "provider=microsoft.jet.oledb.4.0;" "data source = " server.mappath("../db/bbs.mdb")
其中../db/bbs.mdb是你的數(shù)據(jù)庫存放的相對路徑!緩悶如果你的數(shù)據(jù)庫和ASP文件在同一目錄下,你只納哪鏈要這樣寫就可以了:
dim conn
set conn = server.createobject("adodb.connection")
conn.open = "provider=microsoft.jet.oledb.4.0;" "data source = " server.mappath("bbs.mdb")
有許多初學者在遇到數(shù)據(jù)庫連接時總是會出問題,然而使用上面的驅動程序只要你的數(shù)據(jù)庫路徑選對了就不會出問題了。
基于HTML和基于PHP的新聞系統(tǒng)設計和實現(xiàn)存在很大的區(qū)別。HTML是一種標記語言,用于描述和定義網(wǎng)頁的結構和內容,而PHP是一種腳本語言,用于動態(tài)生成網(wǎng)頁內容和實現(xiàn)網(wǎng)站的交互功能。
具體來說,基于HTML的新聞系統(tǒng)通常是一個靜態(tài)的網(wǎng)頁,其中包含固定的新聞內容和頁面布局,更新新聞需要手動編輯HTML代碼。這種系統(tǒng)比較簡單,易于開發(fā)和維護,但缺乏交互性和動態(tài)性,更新內容較為繁瑣。
而基于PHP的新聞系統(tǒng)則可以實現(xiàn)更加復雜和動態(tài)的功能,如用戶登錄、評論、搜索、發(fā)布等。PHP可以通過連接數(shù)據(jù)庫或其他數(shù)據(jù)源,動態(tài)地生成網(wǎng)頁內容和更新新鉛枝聞。這種系統(tǒng)槐晌敏需要編寫PHP腳本和連接數(shù)據(jù)庫,相對比較復雜,但具有更謹蠢好的擴展性和靈活性。
總之,基于HTML的新聞系統(tǒng)比較簡單,適合于小型網(wǎng)站和簡單的新聞發(fā)布需求;而基于PHP的新聞系統(tǒng)則更為靈活和強大,適合于需要更多功能和交互性的大型網(wǎng)站。