在本章開(kāi)始的時(shí)候,我介紹了Web 1.0的世界,但在創(chuàng)建Web 1.1之前不久,開(kāi)發(fā)了諸如Java,JavaScript,JScript之類的瀏覽器增強(qiáng)功能(微軟的JavaScript的輕微變體)和ActiveX。在服務(wù)器端,使用諸如Perl(替代PHP語(yǔ)言)和服務(wù)器端腳本(動(dòng)態(tài)插入一個(gè)文件的內(nèi)容或者一個(gè)文件的輸出)之類的腳本語(yǔ)言在通用網(wǎng)關(guān)接口(CGI)系統(tǒng)調(diào)用另一個(gè))。
一旦塵埃落定,三項(xiàng)主要技術(shù)就站在頭頂和肩膀上方。盡管Perl仍然是一種廣受歡迎的腳本語(yǔ)言,但PHP的簡(jiǎn)單性和與MySQL數(shù)據(jù)庫(kù)程序的內(nèi)置鏈接使其獲得了超過(guò)兩倍的用戶數(shù)。而JavaScript已經(jīng)成為動(dòng)態(tài)操作CSS(層疊樣式表)的等式的重要部分,現(xiàn)在承擔(dān)了處理Ajax過(guò)程的客戶端的更加強(qiáng)大的任務(wù)。在Ajax下(在使用JavaScript中描述),網(wǎng)頁(yè)執(zhí)行數(shù)據(jù)處理并在后臺(tái)向Web服務(wù)器發(fā)送請(qǐng)求 - Web用戶不知道這是否正在進(jìn)行。
毫無(wú)疑問(wèn),PHP和MySQL的共生本質(zhì)有助于推動(dòng)它們向前發(fā)展,但首先吸引開(kāi)發(fā)者的是什么?簡(jiǎn)單的答案必須是您可以輕松使用這些技術(shù)在網(wǎng)站上快速創(chuàng)建動(dòng)態(tài)元素。 MySQL是一個(gè)快速且功能強(qiáng)大且易于使用的數(shù)據(jù)庫(kù)系統(tǒng),它提供網(wǎng)站可能需要的任何信息,以便為瀏覽器查找和提供數(shù)據(jù)。當(dāng)PHP與MySQL結(jié)盟并存儲(chǔ)這些數(shù)據(jù)時(shí),您將擁有開(kāi)發(fā)社交網(wǎng)站所需的基本部分以及Web 2.0的開(kāi)端。
而且,當(dāng)您將JavaScript和CSS也融入其中時(shí),您將擁有構(gòu)建高度動(dòng)態(tài)互動(dòng)網(wǎng)站的秘訣。
使用PHP
使用PHP,在網(wǎng)頁(yè)中嵌入動(dòng)態(tài)活動(dòng)非常簡(jiǎn)單。當(dāng)您為.php擴(kuò)展名提供頁(yè)面時(shí),他們可以立即訪問(wèn)腳本語(yǔ)言。從開(kāi)發(fā)人員的角度來(lái)看,你所要做的就是編寫如下的代碼:
<?php
echo "Hello World. Today is ".date("l").". ";
?>
How are you?
開(kāi)頭<?php告訴Web服務(wù)器允許PHP程序解釋所有以下代碼直到?>命令。除此之外,所有內(nèi)容都以直接HTML格式發(fā)送給客戶端。所以,文本“你好嗎?”只是輸出到瀏覽器;在PHP標(biāo)簽中,內(nèi)置的日期函數(shù)根據(jù)服務(wù)器的系統(tǒng)時(shí)間顯示當(dāng)前的星期幾。
兩部分的最終輸出如下所示:
Hello World. Today is Wednesday. How are you?
PHP是一種靈活的語(yǔ)言,有些人更喜歡將PHP構(gòu)造直接放置在PHP代碼旁邊,如下所示:
Hello World. Today is <?php echo date("l"); ?>. How are you?
還有其他格式化和輸出信息的方式,我將在PHP的章節(jié)中解釋。重點(diǎn)在于,使用PHP,Web開(kāi)發(fā)人員擁有腳本語(yǔ)言,盡管速度不如使用C語(yǔ)言或類似語(yǔ)言編譯代碼的速度快,但它也可以無(wú)縫集成HTML代碼。
注意
如果您打算在本書中輸入PHP示例以與我一起工作,則必須記住在前面添加<?php和?>,以確保PHP解釋器處理它們。為了實(shí)現(xiàn)這一點(diǎn),您可能希望準(zhǔn)備一個(gè)名為example.php的文件,并使用這些標(biāo)簽。
使用PHP,您可以無(wú)限制地控制Web服務(wù)器。無(wú)論您是需要即時(shí)修改HTML,處理信用卡,將用戶詳細(xì)信息添加到數(shù)據(jù)庫(kù),還是從第三方網(wǎng)站獲取信息,都可以在HTML本身駐留的相同PHP文件中完成所有操作。
使用MySQL
當(dāng)然,除非您有辦法跟蹤用戶在使用您的網(wǎng)站時(shí)所做的更改,否則動(dòng)態(tài)更改HTML輸出的意義不大。在網(wǎng)絡(luò)的早期,許多網(wǎng)站使用“平面”文本文件來(lái)存儲(chǔ)用戶名和密碼等數(shù)據(jù)。但是,如果文件沒(méi)有被正確鎖定以防止來(lái)自多個(gè)同時(shí)訪問(wèn)的損壞,則此方法可能會(huì)導(dǎo)致問(wèn)題。另外,一個(gè)平面文件在變得難以管理之前只能得到如此之大 - 更不用說(shuō)在任何合理的時(shí)間內(nèi)嘗試合并文件和執(zhí)行復(fù)雜搜索的難度。
這就是具有結(jié)構(gòu)化查詢的關(guān)系數(shù)據(jù)庫(kù)變得至關(guān)重要的地方。 MySQL可以自由使用并安裝在大量的互聯(lián)網(wǎng)Web服務(wù)器上,隨時(shí)隨地升級(jí)。它是一個(gè)強(qiáng)大且速度極快的數(shù)據(jù)庫(kù)管理系統(tǒng),它使用類似英語(yǔ)的命令。
MySQL結(jié)構(gòu)的最高級(jí)別是一個(gè)數(shù)據(jù)庫(kù),您可以在其中擁有一個(gè)或多個(gè)包含數(shù)據(jù)的表。例如,假設(shè)您正在處理一個(gè)名為users的表格,在這個(gè)表格中您已經(jīng)創(chuàng)建了姓氏,名字和電子郵件的列,現(xiàn)在您希望添加另一個(gè)用戶。您可能使用的一個(gè)命令是:
INSERT INTO users VALUES('Smith', 'John', 'jsmith@mysite.com');
當(dāng)然,如前所述,您將發(fā)布其他命令來(lái)創(chuàng)建數(shù)據(jù)庫(kù)和表并設(shè)置所有正確的字段,但此處的INSERT命令顯示向數(shù)據(jù)庫(kù)添加新數(shù)據(jù)的過(guò)程是多么簡(jiǎn)單。 INSERT命令是SQL(它代表結(jié)構(gòu)化查詢語(yǔ)言)的一個(gè)例子,它是在20世紀(jì)70年代早期設(shè)計(jì)的語(yǔ)言,讓人聯(lián)想到最古老的編程語(yǔ)言之一COBOL。但是,它非常適合數(shù)據(jù)庫(kù)查詢,這就是為什么它始終在使用中的原因。
查找數(shù)據(jù)同樣很容易。假設(shè)您有一個(gè)用戶的電子郵件地址,您需要查找該人的姓名。要做到這一點(diǎn),你可以發(fā)出一個(gè)MySQL查詢,例如:
SELECT surname,firstname FROM users WHERE email='jsmith@mysite.com';
然后,MySQL將返回Smith,John和任何其他可能與數(shù)據(jù)庫(kù)中該電子郵件地址相關(guān)聯(lián)的名稱對(duì)。
正如你所期望的那樣,你可以用MySQL做的不僅僅是簡(jiǎn)單的INSERT和SELECT命令。例如,您可以根據(jù)不同的標(biāo)準(zhǔn)連接多個(gè)表,以各種不同的順序請(qǐng)求結(jié)果,只知道正在搜索的字符串的一部分時(shí)進(jìn)行部分匹配,僅返回第n個(gè)結(jié)果,還有更多。
使用PHP,您可以將所有這些調(diào)用直接發(fā)送到MySQL,而無(wú)需自己運(yùn)行MySQL程序或使用其命令行界面。這意味著您可以將結(jié)果保存在數(shù)組中進(jìn)行處理,并執(zhí)行多次查找,每次查找都依賴于從早期返回的結(jié)果,并向下鉆取您需要的數(shù)據(jù)項(xiàng)。
正如你稍后會(huì)看到的,為了獲得更多的功能,MySQL中還內(nèi)置了額外的功能,你可以調(diào)用它來(lái)實(shí)現(xiàn)常用操作和額外的速度。
使用JavaScript
本書中描述的最古老的核心技術(shù)JavaScript是為了使腳本能夠訪問(wèn)HTML文檔的所有元素而創(chuàng)建的。換句話說(shuō),它為動(dòng)態(tài)用戶交互提供了一種手段,例如檢查輸入表單中的電子郵件地址有效性,顯示諸如“您是否真的這么意思?”等提示(盡管它不能依賴于安全性,應(yīng)該始終在Web服務(wù)器上執(zhí)行)。
結(jié)合CSS(請(qǐng)參閱以下部分),JavaScript是動(dòng)態(tài)網(wǎng)頁(yè)背后的力量,而不是在服務(wù)器返回新頁(yè)面時(shí)發(fā)生變化。
但是,由于不同瀏覽器設(shè)計(jì)者選擇實(shí)現(xiàn)它的方式之間存在一些主要差異,因此JavaScript的使用也可能非常棘手。這主要是因?yàn)橐恍┲圃焐淘噲D以犧牲與競(jìng)爭(zhēng)對(duì)手的兼容性為代價(jià)來(lái)增加功能到瀏覽器中。
值得慶幸的是,開(kāi)發(fā)人員現(xiàn)在大多已經(jīng)意識(shí)到他們已經(jīng)意識(shí)到他們的產(chǎn)品之間需要完全兼容,所以Web開(kāi)發(fā)人員不必編寫多重代碼。但仍有數(shù)以百萬(wàn)計(jì)的傳統(tǒng)瀏覽器將在未來(lái)很多年內(nèi)使用。幸運(yùn)的是,有不兼容問(wèn)題的解決方案,本書后面我們將介紹一些技術(shù),使您能夠安全地忽略這些差異。
現(xiàn)在,讓我們快速瀏覽一下如何使用基本的JavaScript,并被所有瀏覽器接受:
<script type="text/javascript">
document.write("Hello World. Today is " + Date() );
</script>
該代碼片段告訴Web瀏覽器將腳本標(biāo)記內(nèi)的所有內(nèi)容解釋為JavaScript,然后瀏覽器通過(guò)編寫文本“Hello World”來(lái)解釋它。今天是“通過(guò)使用JavaScript函數(shù)Date將當(dāng)前文檔和日期連接起來(lái)。結(jié)果將如下所示:
Hello World. Today is Thu Jan 01 2015 01:23:45
注意
值得一提的是,除非您需要指定JavaScript的精確版本,否則通??梢允÷詔ype =“text / javascript”,只需使用<script>即可開(kāi)始解釋JavaScript。
如前所述,JavaScript最初是為了對(duì)HTML文檔中的各種元素提供動(dòng)態(tài)控制而開(kāi)發(fā)的,這仍然是它的主要用途。但越來(lái)越多的JavaScript被用于Ajax。這是在后臺(tái)訪問(wèn)Web服務(wù)器的過(guò)程的術(shù)語(yǔ)。 (它最初的意思是“異步JavaScript和XML”,但這個(gè)詞已經(jīng)過(guò)時(shí)了。)
Ajax是現(xiàn)在被稱為Web 2.0(由本書出版公司的創(chuàng)始人兼首席執(zhí)行官Tim O'Reilly推廣的術(shù)語(yǔ))背后的主要過(guò)程,其中網(wǎng)頁(yè)開(kāi)始類似于獨(dú)立程序,因?yàn)樗鼈儾槐仨毴恐匦录虞d。相反,快速的Ajax調(diào)用可以引入并更新網(wǎng)頁(yè)上的單個(gè)元素,例如更改社交網(wǎng)站上的照片,或者用點(diǎn)擊的按鈕替換問(wèn)題的答案。這個(gè)主題在第17章中有詳細(xì)介紹。
使用CSS
隨著近年來(lái)CSS3標(biāo)準(zhǔn)的出現(xiàn),CSS現(xiàn)在提供了以前僅由JavaScript支持的動(dòng)態(tài)交互級(jí)別。例如,您不僅可以設(shè)置任何HTML元素的樣式來(lái)更改其尺寸,顏色,邊框,間距等,現(xiàn)在您還可以使用幾行CSS為網(wǎng)頁(yè)添加動(dòng)畫轉(zhuǎn)換和轉(zhuǎn)換。
使用CSS可以很簡(jiǎn)單,只需在網(wǎng)頁(yè)的頭部插入<style>和</ style>標(biāo)簽之間的幾條規(guī)則即可:
<style>
p{
text-align:justify;
font-family:Helvetica;
}
</style>
這些規(guī)則將改變<p>標(biāo)簽的默認(rèn)對(duì)齊方式,以使其中包含的段落完全對(duì)齊并使用Helvetica字體。
正如你將在第18章中學(xué)到的那樣,你可以通過(guò)很多不同的方式來(lái)設(shè)計(jì)CSS規(guī)則,你也可以直接將它們包含在標(biāo)簽中,或者將一組規(guī)則保存到一個(gè)外部文件中以分別加載。這種靈活性使您不僅可以精確設(shè)計(jì)HTML的樣式,您還將看到它如何提供內(nèi)置的懸停功能,以便在鼠標(biāo)指針經(jīng)過(guò)它們時(shí)為對(duì)象設(shè)置動(dòng)畫。您還將學(xué)習(xí)如何從JavaScript以及HTML訪問(wèn)元素的所有CSS屬性。
借助Safari,您可以了解最佳學(xué)習(xí)方式。無(wú)限制地訪問(wèn)視頻,實(shí)時(shí)在線培訓(xùn),學(xué)習(xí)路徑,書籍,互動(dòng)教程等。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。