上一節(jié)我們學(xué)習(xí)了如何通過(guò)指令插入數(shù)據(jù)。我們?cè)囅胍幌乱话阋粋€(gè)創(chuàng)建欄目這樣的功能操作流程是如何的。
那插入數(shù)據(jù)這段指令應(yīng)該是在什么時(shí)候執(zhí)行呢?相信大家也想到了,應(yīng)該是在④后⑤前執(zhí)行。
根據(jù)這個(gè)我們可以聯(lián)想出如下一句話。如果點(diǎn)擊了提交按鈕,那就執(zhí)行插入數(shù)據(jù)的指令,其他情況下不執(zhí)行插入數(shù)據(jù)的指令。
上面這句話就是程序中的條件語(yǔ)句的基本形式了。
用php的格式表現(xiàn)出來(lái)的話如下:
if(點(diǎn)了提交按鈕) {插入數(shù)據(jù)} else {啥也不干}
if代表如果,else代表其他,小括號(hào)里是需要滿足的條件,大括號(hào)里需要執(zhí)行的事情。很簡(jiǎn)單吧?
控制器頁(yè)面
ok回到上面的六個(gè)步驟,可以看得出來(lái)有某個(gè)頁(yè)面和創(chuàng)建欄目的頁(yè)面。但是一般程序中還會(huì)有一個(gè)為了優(yōu)化結(jié)構(gòu)而存在的控制器頁(yè)面。ok那一共就是三個(gè)頁(yè)面了。
在dw中按鍵盤ctrl n鍵創(chuàng)建php頁(yè)面。如下圖所示:
在<body>和</body>之間寫上創(chuàng)建欄目,charset改成utf-8,保存為category_add.php到我們的站點(diǎn)目錄htdocscainiao下,如下圖:
再創(chuàng)建一個(gè)php頁(yè)面,代碼改成如下圖,保存為category_list.php
其中<br />代表著換行,跟word中的shift enter鍵的操作是一樣的。<a>標(biāo)簽代表的是鏈接,href中定義需要鏈接到的頁(yè)面地址。
因?yàn)槭莗hp教程,html的部分就不會(huì)講的太細(xì)了。我們學(xué)習(xí)這個(gè)教程的主要目的是通過(guò)學(xué)習(xí)程序來(lái)培養(yǎng)邏輯思維能力。html和css的技術(shù)是用于頁(yè)面的展現(xiàn)效果,跟邏輯思維的部分關(guān)系不是很大,所以會(huì)一帶而過(guò)。
現(xiàn)在我們的站點(diǎn)目錄下應(yīng)該有3個(gè)文件了。
打開index.php文件,刪掉插入數(shù)據(jù)的那行代碼,也就是insert into category部分,然后把代碼改成如下圖。
可以看得出來(lái)有兩部分代碼是這次新增的,一個(gè)是 error_reporting(e_all ^ e_notice); 另外一個(gè)是 if 條件語(yǔ)句部分。
error_reporting(e_all ^ e_notice); 是用來(lái)屏蔽php的一般提示,錯(cuò)誤提示是會(huì)顯示出來(lái)的。大家可以自己試試刪除這行。
保存好代碼訪問(wèn) http://127.0.0.1/cainiao/index.php 可以看到我們進(jìn)入了欄目列表頁(yè)面如下圖:
點(diǎn)擊下方的創(chuàng)建欄目按鈕進(jìn)入到創(chuàng)建欄目頁(yè)。如下圖:
細(xì)心的同學(xué)可能已經(jīng)發(fā)現(xiàn)了,通過(guò)瀏覽器地址可以看出,一直也沒(méi)有離開index.php頁(yè)面,但是顯示的內(nèi)容卻是category_list.php和category_add.php兩個(gè)頁(yè)面的內(nèi)容。
這就是include(‘category_add.php’);和include(‘category_list.php’);的功勞了。include是包含,列入的意思。通過(guò)include命令把頁(yè)面category_add.php和category_list.php頁(yè)面包含到了index.php頁(yè)面內(nèi)。
但是為什么這兩個(gè)頁(yè)面沒(méi)有同時(shí)被包含進(jìn)來(lái)了呢?我想大家應(yīng)該已經(jīng)猜到了,就是if條件語(yǔ)句的作用。當(dāng)條件為 $_get[‘act’]==add 的時(shí)候我們包含了category_add.php頁(yè)面,其他時(shí)候包含了category_list.php頁(yè)面。
那 $_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í)候。 備注:在程序中兩個(gè)等號(hào)才是等于的意思。
關(guān)于變量、url地址、等號(hào)等概念在下一節(jié)會(huì)重點(diǎn)講,在這里就先略過(guò)了。
整個(gè)條件語(yǔ)句總結(jié)出來(lái)就如下圖所示了。
php中可以通過(guò)雙斜杠 // 添加備注信息,備注不會(huì)影響程序運(yùn)行,php程序會(huì)當(dāng)他不存在。
現(xiàn)在打開category_add.php增加如下代碼:
保存好之后從瀏覽器打開 http://127.0.0.1/cainiao/index.php ,點(diǎn)擊創(chuàng)建欄目進(jìn)入創(chuàng)建欄目頁(yè)面,可以看到如下結(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中的地址格式是問(wèn)號(hào)開始的時(shí)候,將會(huì)把問(wèn)號(hào)開始及后面的部分全部加到當(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將會(huì)把參數(shù)值傳遞到地址欄中并顯示出來(lái),post會(huì)把參數(shù)值隱藏起來(lái),相對(duì)來(lái)說(shuō)post方法更為安全一些。
input標(biāo)簽中name是參數(shù)名,value是參數(shù)值,因?yàn)樵谔峤豁?yè)面不需要默認(rèn)值所以value=””部分是空的。
我們點(diǎn)擊提交按鈕可以看到如下變化
可以看出地址欄的url地址變成了form action中的地址?act=insert,之前有說(shuō)過(guò)當(dāng)點(diǎn)擊了提交按鈕之后執(zhí)行插入數(shù)據(jù)的指令。那如何去判斷有沒(méi)有點(diǎn)擊提交按鈕呢?就是通過(guò)地址欄的這個(gè)地址來(lái)判斷了。當(dāng)act的值從add變成insert的時(shí)候執(zhí)行插入數(shù)據(jù)的命令。
打開index.php頁(yè)面增加如下代碼
紅框部分就是本次新增的代碼,在if和else中間這次多了個(gè)elseif,當(dāng)我們所需要判斷的條件有多個(gè)的時(shí)候我們就會(huì)用elseif來(lái)判斷第一個(gè)條件以外的條件。elseif可以出現(xiàn)n次,如 if(條件一){指令一} elseif(條件二) {指令二} elseif(條件三) {指令三} elseif(條件四) {指令四} else {指令五} 以此類推。
第12行通過(guò)echo命令輸出了一段javascript代碼用于提示欄目添加成功,并返回到index.php頁(yè)面。
insert into 部分我們上一節(jié)中已經(jīng)講過(guò)了,不知道有沒(méi)有同學(xué)發(fā)現(xiàn)上一節(jié)我用的是value這一節(jié)我用的是values,其實(shí)在高版本的mysql里這兩種寫法都是可以支持的,不過(guò)在一些低版本里只能支持values,所以建議還是都寫values吧。
$_post[cat_name]和$_get方法的道理是一樣的,同樣用于獲取參數(shù)值,只不過(guò)一個(gè)是在地址欄中看不到的,一個(gè)是能看到的而已。通過(guò)$_post[cat_name]獲取了,在上一頁(yè)通過(guò)表單提交上來(lái)的參數(shù)值。不過(guò)在這里$_post[cat_name]不能寫成$_post[‘cat_name’],因?yàn)橥饷嬉呀?jīng)用了一個(gè)單引號(hào)括起來(lái)了,不可在里面再寫一次。
保存好之后從http://127.0.0.1/cainiao/index.php開始一步一步添加欄目試試吧。添加成功之后到phpmyadmin里查看數(shù)據(jù)是否有了沒(méi)。 我想大家都應(yīng)該成功了吧?嗯,現(xiàn)在就差一個(gè)時(shí)間的添加了。當(dāng)前操作時(shí)間總不能像欄目名稱一樣我們打字進(jìn)去吧。下面來(lái)講一下關(guān)于時(shí)間。
時(shí)間的獲取以及格式化
在dw中新建一個(gè)php頁(yè)面,把原有的代碼都刪掉之后輸入如下代碼,保存為time.php
time();是php中自動(dòng)獲取當(dāng)前時(shí)間的代碼,我們通過(guò)echo輸出了獲取到的當(dāng)前時(shí)間。
打開http://127.0.0.1/cainiao/time.php 可以看到頁(yè)面中有一串不明覺厲的數(shù)字。不過(guò),沒(méi)錯(cuò),這就是時(shí)間。在系統(tǒng)中時(shí)間是以這種形式保存著的,這個(gè)叫unix時(shí)間戳。
我們需要把這串?dāng)?shù)字格式化成我們能看得懂的樣子。代碼如下
再次運(yùn)行可以看到時(shí)間格式變正常了。但是大部分同學(xué)會(huì)發(fā)現(xiàn)這個(gè)時(shí)間和當(dāng)前時(shí)間不一樣,差好多小時(shí)呢。沒(méi)辦法,誰(shuí)讓程序是老外發(fā)明的呢,顯示的自然也是老外的時(shí)間了。我們需要增加一段代碼把時(shí)間定位成中國(guó)時(shí)間。代碼如下。
ps:y-m-d h:i:s大小寫要注意,都可以改成大寫或者小寫,但是所代表的結(jié)果都是不一樣的。如果有興趣可以查看php手冊(cè)種的date();方法。
好了,現(xiàn)在輪到把時(shí)間跟欄目名稱一起提交上去了。index.php頁(yè)面代碼改成如下
在這里我們定義了一個(gè)叫nowtime的變量,并把獲取到的時(shí)間保存到變量nowtime里。
之前也說(shuō)到過(guò)在程序中兩個(gè)等