上次我成功給他踹出一個自動載入靜態頁面,這次我們要改造GET/POST功能~
首先我們先在libraries
新建一個Getpost.php
的資料夾,接著新增class
:
<?php defined('BASEPATH') OR exit('No direct script access allowed');
/**
* v1.0 過濾必填與非必填功能
**/
class Getpost {
/**
* 將需要的Get/Post資料轉換成一個陣列並回傳
* data = 列出所有要取得的資料
* required = 必填項目 (預設空白)
* type = 傳輸方式(預設GET) e.g. POST
*/
function getpost_data($data, $required = array(), $type = 'GET') {
$CI =& get_instance(); // 載入CI元件
$CI->load->helper('url'); // 載入URL元件
$res = array(); // 結果都會儲存到內部
foreach ($data as $key => $value) {
$item = '';
if ($type === 'GET') $item = $CI->input->get($value);
if ($type === 'POST') $item = $CI->input->post($value);
// 確認是否有在必填名單
if (in_array($value, $required) && $item == '') {
// 檢查後沒有對應的資料
return false;
}
$res[$value] = $item;
} // --- End ForEach
return $res;
}
}
/* End of file Getpost.php */
/* Location: ./application/libraries/Getpost.php */
此方法主要是針對GET/POST傳進來的資料去做驗證,確認是否有東西在進行接下來的任務,接著我們在config/autoload
新增東西,找到libraries
加入getpost
:
$autoload['libraries'] = array('mongo_db', 'getpost');
如此一來就能把library
正確的載入進來,接著我們進入Unit.php
來去做測試:
/**
* 測試GET/POST
*/
function test_getpost() {
$needsData = array('product_id', 'product_name', 'remark'); // 估計需要的值
$requiredData = array('product_id', 'product_name'); // 必填欄位
$data = $this->getpost->getpost_data($needsData, $requiredData, 'GET'); // 把結果丟到$data
echo json_encode($data); // 把結果印出來測試看看
}
接著我們就透過網址去測試http://ip-address/unit/test_getpost
,如果我們不帶參數會怎麼樣呢?
他會顯示false,也就代表發生錯誤,那如果夾帶一些必要參數呢?http://ip-address/unit/test_getpost?product_id=P1231425621&product_name=灰熊印貓罐頭&remark=很好吃
就會成功顯示,如期把資料丟進$data
裡面,那去掉不必要的參數呢?http://ip-address/unit/test_getpost?product_id=P1231425621&product_name=灰熊印貓罐頭
因為沒有特別限制所以不會報false
,而是蹦出一個null
但還是有塞其他資料進去,如此以來可以透過這個函式去除非必要的參數,甚至去驗證是否有傳入必要的參數。
然而今天課程就到這,
明天我們來寫如何把這些錯誤回報回去。
Next station ... GET/POST傳入的資料是否正確?