iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 13
0
Modern Web

寫給朋友的 PHP 從 0 到 100 實戰教程系列 第 13

Day 13. PHP教學: 檢查使用者輸入的資料

Why
為什麼我們要檢查使用者輸入的資料呢?

How
讓我們使用 composer 來安裝別人寫好的功能吧
在終端機打上

composer require wixel/gump

或是編輯 composer.json

{
    "require": {
        "wixel/gump": "dev-master"
    }
}

再切到終端機執行

composer install

使用說明書在這裡:

https://github.com/Wixel/GUMP

那我們直接實作到專案上來看看效果:
route.php

<?php
$route = new Router(Request::uri()); //搭配 .htaccess 排除資料夾名稱後解析 URL
$route->getParameter(1); // 從 http://127.0.0.1/game/aaa/bbb 取得 aaa 字串之意

// 用參數決定載入某頁並讀取需要的資料
switch($route->getParameter(1)){
    case "do_create":
      $hero_name = "";
      $hero_description = "";
      
      // 移除跨站攻擊的不安全代碼
      $data = GUMP::xss_clean($_POST);

      // 設定驗證規則
      $is_valid = GUMP::is_valid($data, array( 
        'hero_name' => 'required',
        'hero_description' => 'required|max_len,100|min_len,6'
      ));
      
      if($is_valid === true) { // 如果符合規則的話
          $table = "hero";
          $data_array['hero_name'] = $data['hero_name'];
          $data_array['hero_description'] = $data['hero_name'];
          Database::get()->insert($table, $data_array);
          header("Location: ".WebsiteConfig::BASE_URL."success");
      } else {
        print_r($is_valid);
        die;
      }
      exit;
    break;
    case "create":
      include('view/header/default.php'); // 載入共用的頁首
      include('view/body/create.php');    // 載入新增用的表單
      include('view/footer/default.php'); // 載入共用的頁尾
    break;
    case "success":
      include('view/header/default.php'); // 載入共用的頁首
      include('view/body/success.php');    // 載入新增用的表單
      include('view/footer/default.php'); // 載入共用的頁尾
    break;
    case "list":
      // 讀取全英雄列表資料
      // Database::get()->query( ...略... );

      include('view/header/default.php'); // 載入共用的頁首
      include('view/body/list.php');
      include('view/footer/default.php'); // 載入共用的頁尾
    break;

    case "hero":
      // 讀取單一英雄資料
      // Database::get()->query( ...略... );

      include('view/header/default.php'); // 載入共用的頁首
      include('view/body/hero.php');
      include('view/footer/default.php'); // 載入共用的頁尾
    break;

    default:
      include('view/header/default.php'); // 載入共用的頁首
      include('view/body/default.php');
      include('view/footer/default.php'); // 載入共用的頁尾
    break;
}

建立一個 view/body/success.php

<?php 
echo "success";

在這裡輸入資料

http://127.0.0.1/game/create

如果有欄位是空的就會:

Array ( [0] => The Hero Name field is required )

如果描述欄位少於6個字:

Array ( [0] => The Hero Description field needs to be at least 6 characters )


上一篇
Day 12. PHP教學: 取得使用者輸入的資料存到資料庫
下一篇
Day 14. PHP教學: 學習日期與時間控制
系列文
寫給朋友的 PHP 從 0 到 100 實戰教程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
hsuhungyuan
iT邦新手 5 級 ‧ 2022-11-28 08:34:49

wixel/gump 最新版2.0棄用了GUMP::xss_clean ,安裝 wixel/gump 記得安裝舊版,才能用!

我要留言

立即登入留言