上一節(jié)我們學(xué)習(xí)了如何通過指令插入數(shù)據(jù)。我們試想一下一般一個創(chuàng)建欄目這樣的功能操作流程是如何的。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請域名、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、固鎮(zhèn)網(wǎng)站維護(hù)、網(wǎng)站推廣。那插入數(shù)據(jù)這段指令應(yīng)該是在什么時(shí)候執(zhí)行呢?相信大家也想到了,應(yīng)該是在④后⑤前執(zhí)行。
根據(jù)這個我們可以聯(lián)想出如下一句話。如果點(diǎn)擊了提交按鈕,那就執(zhí)行插入數(shù)據(jù)的指令,其他情況下不執(zhí)行插入數(shù)據(jù)的指令。
上面這句話就是程序中的條件語句的基本形式了。
用PHP的格式表現(xiàn)出來的話如下:
if(點(diǎn)了提交按鈕) {插入數(shù)據(jù)} else {啥也不干}
if代表如果,else代表其他,小括號里是需要滿足的條件,大括號里需要執(zhí)行的事情。很簡單吧?
控制器頁面
OK回到上面的六個步驟,可以看得出來有某個頁面和創(chuàng)建欄目的頁面。但是一般程序中還會有一個為了優(yōu)化結(jié)構(gòu)而存在的控制器頁面。OK那一共就是三個頁面了。
在DW中按鍵盤CTRL+N鍵創(chuàng)建PHP頁面。如下圖所示:
在<body>和</body>之間寫上創(chuàng)建欄目,charset改成utf-8,保存為category_add.php到我們的站點(diǎn)目錄htdocscainiao下,如下圖:
再創(chuàng)建一個PHP頁面,代碼改成如下圖,保存為category_list.php
其中<br />代表著換行,跟WORD中的Shift+Enter鍵的操作是一樣的。<a>標(biāo)簽代表的是鏈接,href中定義需要鏈接到的頁面地址。
因?yàn)槭荘HP教程,HTML的部分就不會講的太細(xì)了。我們學(xué)習(xí)這個教程的主要目的是通過學(xué)習(xí)程序來培養(yǎng)邏輯思維能力。HTML和CSS的技術(shù)是用于頁面的展現(xiàn)效果,跟邏輯思維的部分關(guān)系不是很大,所以會一帶而過。
現(xiàn)在我們的站點(diǎn)目錄下應(yīng)該有3個文件了。
打開index.php文件,刪掉插入數(shù)據(jù)的那行代碼,也就是INSERT INTO category部分,然后把代碼改成如下圖。
可以看得出來有兩部分代碼是這次新增的,一個是 error_reporting(E_ALL ^ E_NOTICE); 另外一個是 if 條件語句部分。
error_reporting(E_ALL ^ E_NOTICE); 是用來屏蔽PHP的一般提示,錯誤提示是會顯示出來的。大家可以自己試試刪除這行。
保存好代碼訪問 http://127.0.0.1/cainiao/index.php 可以看到我們進(jìn)入了欄目列表頁面如下圖:
點(diǎn)擊下方的創(chuàng)建欄目按鈕進(jìn)入到創(chuàng)建欄目頁。如下圖:
細(xì)心的同學(xué)可能已經(jīng)發(fā)現(xiàn)了,通過瀏覽器地址可以看出,一直也沒有離開index.php頁面,但是顯示的內(nèi)容卻是category_list.php和category_add.php兩個頁面的內(nèi)容。
這就是include(‘category_add.php’);和include(‘category_list.php’);的功勞了。include是包含,列入的意思。通過include命令把頁面category_add.php和category_list.php頁面包含到了index.php頁面內(nèi)。
但是為什么這兩個頁面沒有同時(shí)被包含進(jìn)來了呢?我想大家應(yīng)該已經(jīng)猜到了,就是if條件語句的作用。當(dāng)條件為 $_GET[‘act’]==add 的時(shí)候我們包含了category_add.php頁面,其他時(shí)候包含了category_list.php頁面。
那 $_GET[‘act’]==add 又是什么意思呢?可以從上圖中看出瀏覽器地址欄的末端index.php后面還有?act=add這樣一段,$_GET[‘參數(shù)名’] 是PHP從當(dāng)前鏈接(URL)地址獲取參數(shù)值的方法。?act=add中act是參數(shù)的名稱add是參數(shù)的值。
那$_GET[‘act’]==add 這段代碼的意思就是從瀏覽器獲取到的參數(shù)act的值是等于add的時(shí)候。 備注:在程序中兩個等號才是等于的意思。
關(guān)于變量、URL地址、等號等概念在下一節(jié)會重點(diǎn)講,在這里就先略過了。
整個條件語句總結(jié)出來就如下圖所示了。
PHP中可以通過雙斜杠 // 添加備注信息,備注不會影響程序運(yùn)行,PHP程序會當(dāng)他不存在。
現(xiàn)在打開category_add.php增加如下代碼:
保存好之后從瀏覽器打開 http://127.0.0.1/cainiao/index.php ,點(diǎn)擊創(chuàng)建欄目進(jìn)入創(chuàng)建欄目頁面,可以看到如下結(jié)果。
代碼<hr />是一條橫線。
從<form>到</form>部分是我們需要操作的部分,稱之為表單。文本框和按鈕可以理解成表單中的元素,元素有很多種類型(文本框,提交按鈕,文本域,下拉選項(xiàng),單選按鈕等等)。我們本次用到了兩種類型,input type=”text” 和 input type=”submit”,即文本框和提交按鈕。點(diǎn)擊提交按鈕將把文本框中的參數(shù)名為cat_name的參數(shù)值傳遞到服務(wù)器上,并跳轉(zhuǎn)到form action中的地址?act=insert中去。當(dāng)action中的地址格式是問號開始的時(shí)候,將會把問號開始及后面的部分全部加到當(dāng)前地址后方。也就是把?act=insert加到了地址 http://127.0.0.1/cainiao/index.php 后面。也就是action=”?act=insert”和action=”http://127.0.0.1/cainiao/index.php?act=insert”是一樣的意思。
form中的method是提交的方法,常見的有post和get兩種,get將會把參數(shù)值傳遞到地址欄中并顯示出來,post會把參數(shù)值隱藏起來,相對來說post方法更為安全一些。
input標(biāo)簽中name是參數(shù)名,value是參數(shù)值,因?yàn)樵谔峤豁撁娌恍枰J(rèn)值所以value=””部分是空的。
我們點(diǎn)擊提交按鈕可以看到如下變化
可以看出地址欄的URL地址變成了form action中的地址?act=insert,之前有說過當(dāng)點(diǎn)擊了提交按鈕之后執(zhí)行插入數(shù)據(jù)的指令。那如何去判斷有沒有點(diǎn)擊提交按鈕呢?就是通過地址欄的這個地址來判斷了。當(dāng)act的值從add變成insert的時(shí)候執(zhí)行插入數(shù)據(jù)的命令。
打開index.php頁面增加如下代碼
紅框部分就是本次新增的代碼,在if和else中間這次多了個elseif,當(dāng)我們所需要判斷的條件有多個的時(shí)候我們就會用elseif來判斷第一個條件以外的條件。elseif可以出現(xiàn)N次,如 if(條件一){指令一} elseif(條件二) {指令二} elseif(條件三) {指令三} elseif(條件四) {指令四} else {指令五} 以此類推。
第12行通過echo命令輸出了一段javascript代碼用于提示欄目添加成功,并返回到index.php頁面。
INSERT INTO 部分我們上一節(jié)中已經(jīng)講過了,不知道有沒有同學(xué)發(fā)現(xiàn)上一節(jié)我用的是VALUE這一節(jié)我用的是VALUES,其實(shí)在高版本的MYSQL里這兩種寫法都是可以支持的,不過在一些低版本里只能支持VALUES,所以建議還是都寫VALUES吧。
$_POST[cat_name]和$_GET方法的道理是一樣的,同樣用于獲取參數(shù)值,只不過一個是在地址欄中看不到的,一個是能看到的而已。通過$_POST[cat_name]獲取了,在上一頁通過表單提交上來的參數(shù)值。不過在這里$_POST[cat_name]不能寫成$_POST[‘cat_name’],因?yàn)橥饷嬉呀?jīng)用了一個單引號括起來了,不可在里面再寫一次。
保存好之后從http://127.0.0.1/cainiao/index.php開始一步一步添加欄目試試吧。添加成功之后到phpmyadmin里查看數(shù)據(jù)是否有了沒。 我想大家都應(yīng)該成功了吧?嗯,現(xiàn)在就差一個時(shí)間的添加了。當(dāng)前操作時(shí)間總不能像欄目名稱一樣我們打字進(jìn)去吧。下面來講一下關(guān)于時(shí)間。
時(shí)間的獲取以及格式化
在DW中新建一個PHP頁面,把原有的代碼都刪掉之后輸入如下代碼,保存為time.php
time();是PHP中自動獲取當(dāng)前時(shí)間的代碼,我們通過echo輸出了獲取到的當(dāng)前時(shí)間。
打開http://127.0.0.1/cainiao/time.php 可以看到頁面中有一串不明覺厲的數(shù)字。不過,沒錯,這就是時(shí)間。在系統(tǒng)中時(shí)間是以這種形式保存著的,這個叫unix時(shí)間戳。
我們需要把這串?dāng)?shù)字格式化成我們能看得懂的樣子。代碼如下
再次運(yùn)行可以看到時(shí)間格式變正常了。但是大部分同學(xué)會發(fā)現(xiàn)這個時(shí)間和當(dāng)前時(shí)間不一樣,差好多小時(shí)呢。沒辦法,誰讓程序是老外發(fā)明的呢,顯示的自然也是老外的時(shí)間了。我們需要增加一段代碼把時(shí)間定位成中國時(shí)間。代碼如下。
PS:Y-m-d H:i:s大小寫要注意,都可以改成大寫或者小寫,但是所代表的結(jié)果都是不一樣的。如果有興趣可以查看PHP手冊種的date();方法。
好了,現(xiàn)在輪到把時(shí)間跟欄目名稱一起提交上去了。index.php頁面代碼改成如下
在這里我們定義了一個叫nowtime的變量,并把獲取到的時(shí)間保存到變量nowtime里。
之前也說到過在程序中兩個等號才是等于的意思,一個等號的作用的是把等號右側(cè)的結(jié)果保存到等號左側(cè)的變量里,也就是賦值的意思。
賦好值的變量我們可以在程序中“隨意”調(diào)用,在這里我們就在INSER INTO這段代碼中調(diào)用了nowtime這個變量。
到這里,我們創(chuàng)建欄目的功能算完成了。
留個作業(yè)噢,在category表中多加幾個字段,并在form表單中多增加幾個元素同時(shí)提交更多的數(shù)據(jù)試試。
PS:自己練習(xí)的時(shí)候建議再建一個獨(dú)立的文件夾作為新站點(diǎn)來聯(lián)系,cainiao文件夾就一直用于學(xué)習(xí)教程用。
后面我們就會陸續(xù)講解如何把添加上去的數(shù)據(jù)查詢并顯示出來,如何修改已添加的數(shù)據(jù),如何刪除數(shù)據(jù)等功能。敬請期待!