接續上一篇:[筆記]laravel 建立第一個頁面 01
我們一般使用PHP來編寫網頁時,一般都會使用post、get http動作來跟PHP網頁進行互動,因此我們只要在php程式碼中打上:
<?php
echo $_POST['username']."<br/>";
echo $_POST['password']."<br/>";
?>
然後我們再設計一張表單:
<form action="test.php" method="post">
使用者:<input type="text" name="username">
密碼:<input type="text" name="password">
<button type="submit">登入</button>
</form>
然後再把使用者名稱及密碼(test,1234)輸入後,再按下登入,想必不陌生,你一定可以看到:
test
1234
或者,你想要設計分頁,從網址得到id再從資料庫中撈取資料!
<?php
$id = $_GET['id'];
$res = mysqli_query($conn,"SELECT * FROM `post` WHERE `id` = '$id';");
$row = mysqli_fetch_array($res);
?>
ID:<?php echo $row['id'];?>
title:<?php echo $row['title'];?>
content:<?php echo $row['content'];?>
Author:<?php echo $row['author'];?>
Created at:<?php echo $row['created_at'];?>
訪問test.php?id=1
ID:1
title:hello world
content:this is a hello world post!
Author:Bang Bang Bang
Created at:2017-12-15 20:40:43
但您是否有想過,這樣寫會不會有安全的疑慮?
我都這樣問了,保證是有的,因為如果有惡意的使用者在我們的表單中使用一些跳脫字符,很可能我們的table會被drop掉。
那laravel要怎麼去接收POST資料呢?其實很簡單,只要使用$request這個實例即可接收到POST資料囉,當然,路由那邊也要設定成:
Route::post("網址", "控制器@方法");
那我們就把之前的那個html登入表單拿來用一下吧XD:
把它存成/resoucre/views/Member/loginForm.blade.php。
其中如果要使用laravel的blade模板系統的話,要把.php改成.blade.php!(小弟個人淚推~好用到爆炸~)
<form action="{{ url("/login") }}" method="post">
{{ csrf_field() }}
使用者:<input type="text" name="username">
密碼:<input type="text" name="password">
<button type="submit">登入</button>
</form>
其中,這個是一定要加上的,因為laravel自動會為除了get動詞的請求要求檢查csrf token,它可以幫助防禦跨站請求偽造。
{{ csrf_field() }}
路由就這樣設計:
<?php
//...前面省略
Route::get("/login", "MemberController@loginForm")->name("member.loginForm");
Route::post("/login", "MemberController@loginProcess")->name("member.loginProcess");
控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;//這行很重要,因為它會載入request類別
class MemberController extends Controller
{
public function loginForm()
{
return view("Member.loginForm");
}
public function loginProcess(Request $request) //這行你會覺得它很奇怪
{
echo $request->input("username")."<br/>";
echo $request->input("password")."<br/>";
}
}
疑?你一定會覺得Request $request這行很怪,那是因為laravel會自動注入Request類別,進而實例Request類別,所以你不會在loginProcess() method中看到$request = new Request();的東西,但我們卻能使用它,所以這叫做什麼依賴注入的,但這並不是我們這個章節該講的東西。
好啦!我主要要講的是$request->input()─這個好用的method,它可以輕輕鬆鬆取得使用者表單輸入的表單資料,而且可以自動過濾危險的字元!比較不容易被SQL注入!讚~
但你也可以使用以下方法取值(叫動態屬性):
$request->欄位名稱;
應該ok了!剩下自己去看laravel的requests的章節!XD~
Reference:
https://laravel.com/docs/5.5/requests
laravel道場(正體中文翻譯):
https://docs.laravel-dojo.com/laravel/5.5/requests
近期留言