Why
很多時候,使用者想要跟貼文互動,例如留言按讚之類的
我們透過什麼方法可以去搜集資料呢?
最簡單的答案是 HTML 的表單: 也就是
<form action="...ENTER_YOUR_URL..." method="post">
<input type="text" name="data"><!--文字欄位-->
<input type="submit"><!--按下這個送出按鈕就可以把文字送到後端-->
</form>
How
那 PHP 的部分要怎麼接收呢?透過 $_POST 就可以囉,這裡的 data 是因為要跟上面文字欄位的 name="data" 對應。
echo $_POST['data'];
What
來看看怎麼實作到我們的專案上吧,先做個簡單版本:先開這個畫面檔案
/Application/XAMPP/htdocs/game/view/body/create.php
內容:
<form action="<?=Config::BASE_URL?>do_create" method="post">
<input type="text" name="hero_name">
<input type="text" name="hero_description">
<input type="submit" value="submit">
</form>
再來到 route.php
改寫成這樣,加上兩個 case
<?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 = "";
if(isset($_POST['hero_name']))$hero_name = $_POST['hero_name'];
if(isset($_POST['hero_description']))$hero_description = $_POST['hero_description'];
if($hero_name != '' and $hero_description != ''){
$table = "hero";
$data_array['hero_name'] = $hero_name;
$data_array['hero_description'] = $hero_description;
Database::get()->insert($table, $data_array);
}
header("Location: ".Config::BASE_URL."create");
exit;
break;
case "create": // 顯示新增表單畫面
include('view/header/default.php'); // 載入共用的頁首
include('view/body/create.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;
}
接下來我們就可以到這個連結來測試輸入,並且到資料庫裡面找到對應的 hero table 來查看是否正確
Config::BASE_URL 這個部分會報錯,砍掉就沒問題了
網路上查找是說要在autoload.php 去加上 $autoload['helper'] = array('url'); 目前加了也沒有作用,還在尋找這問題怎麼解決。
目前感覺是要額外寫一個class名為Config,裡面加上BASE_URL的參數。
另外 從create網頁post出去後卻每次都回到create網站,這是因為 do_create的內容有個header("Location: xxxxxxxxx"),會因為執行到這行就自動跳轉網址,所以不會再do_create網頁上逗留。