iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
0

上次我成功給他踹出一個自動載入靜態頁面,這次我們要改造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傳入的資料是否正確?


上一篇
[Day10] 預設載入靜態頁面
下一篇
[Day12] GET/POST傳入的資料是否正確?
系列文
你說Codeigniter還能怎麼做?30

尚未有邦友留言

立即登入留言