就如同我們要搜尋某些資料的時候,會前往 google 網站,或者是其他相關搜尋引擎一樣,我們必須要拿出『關鍵字』, 然後輸入到搜尋引擎網站提供的條列式框框內,按下 [enter] 或搜尋之後,我們所填寫的關鍵字就會被攜帶到搜尋引擎的伺服器, 透過伺服器端自己進行搜尋任務後,將搜尋到的結果以 HTML, CSS 或其他多媒體 (如 youtube) 的方式回傳到瀏覽器上, 這就是一個可以互動的網站流程。
要達到這個流程,有幾個基本步驟得要進行:
你會發現,幾乎都是 Server 要進行的任務,因此,這些動作我們也經常稱為伺服器端的程式語言 (Server Side Language),在台灣最常用的可能就是 PHP 以及 .NET 了。
若你需要透過瀏覽器上傳資料到伺服器上,那麼網頁就得要有名為 form 的表單標籤。另外,上傳的資料主要有兩種方法,分別是:
此外,如同上面的說明,你上傳的資料是要給哪個檔案來處理?所以,一般來說,form 的常見的屬性有這些:
<form name="表單名(可忽略)" action="要將資料上傳到server端的哪個檔案處理" method="get或post"> .... </form>
大部分傳輸的資訊,主要是透過變數格式將資料上傳的。亦即你在網頁上面設計好變數名稱,讓使用者填寫後勾選變數內容,再將資料送上去。 因此,每個設計的按鈕或填寫的資訊中,都需要有個變數名字 (variable name) 來代表用戶所勾選的資訊。
用來提供使用者輸入參數的標籤中,最常用的就是 input 這個標籤。這個標籤可用的類型非常多!在這個小節我們先拿 type="text" 來做說明。 當你使用了上述的類型,還必須要指定這個輸入資料的『變數名稱』才行。一般常見的屬性有:
如果你的 name 設定為 var,而使用者在框框內輸入 abc 時,那麼在 server 上就會有『 $var = "abc" 』的資料可用喔!
但是,資料總是需要送出吧!這時就需要 type="submit" 的使用了!
注意看,檔名會變成unit11-1-1-get.php,而且後面會加上變數的設定在網址列上面,這就是GET的傳輸方式。通常沒有重要資料的畫面才能使用GET方式,否則許多資料會出現在網址列上面,這是不安全的
讓我們開始來處理 unit11-1-1-get.php 的檔案內容吧!
// 一般用來讀取前一個檔案傳來的表單資料,大多使用底下的方式來擷取的喔! $var = $_GET['var'];
你可以從網址列將變數資料抓下來,不過,事實上還是不要將資料貼到網址列應該是比較好的。那如何處理? 事實上,直接將 form 的 method 改成 post 即可喔!相當簡單!
同樣的,我們使用例題 11.1-1 的方案來處理,直接設計一下題目即可:
POST 表單資料的取得就不是 $_GET 來處理,而是 $_POST 來處理。如果不想要知道是哪一種表單資料,直接以 $_REQUEST 來處理也行!
如果你需要使用者輸入密碼欄位,倘若還使用 type="text" 時,密碼會被看光光。那怎辦?很簡單! 我們就將密碼變成特殊符號,如小數點或者是星號之類的,那就搞定了!這就得要用到 type="password" 的功能囉!
做完後會發現密碼是出現明碼,這樣是不太好的,通常密碼不應該讓自己以外的人知道,就算是網頁管理員也是。所以我們應該要將密碼加密後再上傳到資料庫會比較好。
那麼如何針對密碼明文加密呢?透過 PHP 的運算函式庫即可。基本上建議直接使用 sha256 這個密碼加密機制,然後透過 hash() 函式即可。 更多加密的演算法不在本文的介紹範圍內,而且,除非是惡意網站,否則,使用 sha256 應該稍微可以滿足大家對於密碼紀錄的需求了!
$pw1 = hash('sha256', "$_POST['pw1']");
這樣就可以推算出你的密碼,此時這串加密過的資料就可以放在資料庫,或者是暫時記憶到程式碼當中。由於資料庫要後續才會提到, 因此,在底下的練習當中,我們將密碼藏在程式碼當中,當然,這個密碼是加密過的!然後,透過讓使用者輸入帳號與密碼, 來判斷使用者輸入的資訊是否為正確。
如果你要讓人家寫一些文件類型的資料,那就不能單純使用 input 標記的 text 類型啊~因為只能一行,太少了! 那怎辦?這時就得要使用 textarea 的類型才行!一般來說, textarea 標記的資料,大致上是這樣的:
<textarea name="mytxt" style="width: 95%; height: 10em "> 寫些資料 <textarea>我們來試試一下這個用法:
有的時候,我們會需要使用者填寫單選項的資料,例如性別的選擇等等。但是因為就只有幾個選項而已,因此不太想讓使用者輸入, 而是希望類似選擇題,讓使用者直接點選即可。這時就用到單選功能的項目了:
<label><input type="radio" name="gender" value="male" /> 男生</label> <label><input type="radio" name="gender" value="female" /> 女生</label> <label><input type="radio" name="gender" value="unknown" /> 不便告知</label>
有個問題,這個選擇一定要勾選到小圓圈才會有效果!能不能點選到『男生』的文字上面就可以了?使用 <label> </label> 將需要處理的項目整個圈選起來,就可以組合成為一個集合的效果!
完成的結果跟之前一樣,只是點選時可以點選文字即可單選
有時候,我們需要的資料會是『複選』的模樣!就是多選題啦!不是單選而已。這時候就需要 checkbox 來處理了。那麼 checkbox 的語法如何呢? 也不難,這樣做看看:
<input type='checkbox' name='myfood[]' value='麥當當' />麥當當
一般來說,複選會使用到『陣列』的機制,陣列在 HTML 裡面必需要加上中括號[]才行!不過 PHP 裡面倒是不需要加上中括號。 現在,讓我們來選擇一下,你可能會有興趣的餐點項目:
複選的 HTML 原始碼如上,還算簡單啊!但是怎麼抓出來資料呢?這就是個大問題!基本上,抓取下來的變數資料, 其實是『陣列』。 因為我們需要用迴圈列出我們所選的東西,假設說我們選擇3樣東西,那就讓迴圈跑3次列出內容。 那要怎麼知道我們總共有選幾樣東西呢? 就必須要用到 count() 這個函數。
count($arrayname);
那就直接來測試一下,將資料抓下來吧!
有時候,某些『單選』的資料量太龐大,如果將所有的單選資料全部列出在同一個畫面上,似乎很混亂!而且,版面的排版也容易跑掉,醜醜的。 這個時候,使用下拉式選單來替換單選的項目,應該是還不錯的選擇。我們可以透過 select 搭配 option 來處理這樣的事情即可! 他的基本語法是這樣的:
<select name="myselect"> <option value="value1">value1</option> <option value="value2">value2</option> <option value="value3">value3</option> </select>
將資料抓下來