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