laravel入門 4 (資料修改與刪除)
修改資料庫(edit)
修改資料的時候 , 我們設計跳出一個彈跳視窗進行修改 , 修改完後按下 送出 就完成修改
那我們就開始吧~
views(home.blade.php)設定
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous"> <!-- 引入google字體 --> <link href="https://fonts.googleapis.com/css?family=Lato:300,300i,400,400i,700,700i,900&subset=latin-ext" rel="stylesheet"> <style type="text/css"> body{ font-family: '微軟正黑體', 'Noto Sans TC', Helvetica, Arial, '黑體-繁', 'Heiti TC', '儷黑', 'LiHei', 'Microsoft JhengHei', sans-serif; } </style> <title>Note</title> </head> <body> <div class="container"> <div class="row"> <div class="col-12"> <h1 class="text-center mt-2">Note</h1> <input type="text" class="form-control mt-5" placeholder="標題" id="newTitle"> <textarea class="form-control mt-2" placeholder="內容" rows="3" id="newContent"></textarea> </div> <div class="col-12 text-right mt-2"> <button type="button" class="btn btn-primary" onclick="addItem()">新增</button> </div> <div class="col-12 mt-5"> <table class="table"> <thead class="thead-light"> <tr> <th width="200">標題</th> <th width="600">內容</th> <th>時間</th> <th style="min-width: 150px;">操作</th> </tr> </thead> <tbody> <!-- 把假資料刪除後 , 將後端資料帶入html裡面 --> @foreach ($data as $val) <tr> <td>{{$val->title}}</td> <td>{{$val->content}}</td> <th>{{$val->created_at}}</th> <td> <button type="button" class="btn btn-secondary" data-toggle="modal" data-target="#exampleModal" onclick="getItem({{ $val->id }})">編輯</button> <button type="button" class="btn btn-danger">刪除</button> </td> </tr> @endforeach </tbody> </table> </div> </div> </div> <!-- 編輯視窗 --> <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel"><b>編輯</b></h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <div class="form-group"> <label class="col-form-label">標題:</label> <input type="text" class="form-control" id='editTitle'> </div> <div class="form-group"> <label class="col-form-label">內容:</label> <textarea class="form-control" id='editContent'></textarea> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">關閉</button> <button type="button" class="btn btn-primary" onclick="editItem()">送出</button> </div> </div> </div> </div> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script> <!-- 載入Laravel的內建前端套件 ,現在目的是要載入Axios --> <script src="{{URL::asset('js/app.js')}}"></script> </body> </html> <script type="text/javascript"> function addItem() { //取得資料 var title = $('#newTitle').val(); var content = $('#newContent').val(); //檢查有沒有填寫資料 if (!title) { alert('請填寫標題'); return } if (!content) { alert('請填寫內容'); return } //傳送到後端 axios.post('/addItem', { title:title, content:content }) .then(function (response) { if (response.data.result == 'success') { //後端回傳過來是成功後,重整頁面 location.reload(); } }) .catch(function (error) { console.log(error); }); } function getItem(id) { //傳送到後端,並且取得資料 axios.post('/getItem', { id:id }) .then(function (response) { if (response.data.result == 'success') { $('#editTitle').val(response.data.data.title); $('#editContent').val(response.data.data.content); //使用一個 全域性的變數 ,來儲存要被編輯的ID , 等等真的要修改的時候直接取得 window.editId = response.data.data.id; } }) .catch(function (error) { console.log(error); }); } function editItem() { //傳送到後端,並且修改 axios.post('/editItem', { //取得要修改的資料 title : $('#editTitle').val(), content : $('#editContent').val(), //取得剛剛的ID id:window.editId }) .then(function (response) { if (response.data.result == 'success') { //後端回傳過來是成功後,重整頁面 location.reload(); } }) .catch(function (error) { console.log(error); }); } </script>
重點說明如下 :
將一開始頁面取得的id , 帶入onclick事件
<button type="button" class="btn btn-secondary" data-toggle="modal" data-target="#exampleModal" onclick="getItem({{ $val->id }})">編輯</button>
將彈跳視輸入框新增ID , 才可以用js取得資料
<input type="text" class="form-control" id='editTitle'> <textarea class="form-control" id='editContent'></textarea>
取得資料後 , 再更改彈跳視窗的資料
function getItem(id) { //傳送到後端,並且取得資料 axios.post('/getItem', { id:id }) .then(function (response) { if (response.data.result == 'success') { $('#editTitle').val(response.data.data.title); $('#editContent').val(response.data.data.content); //使用一個 全域性的變數 ,來儲存要被編輯的ID , 等等真的要修改的時候直接取得 window.editId = response.data.data.id; } }) .catch(function (error) { console.log(error); }); }
將彈跳視的輸出按鈕新增onclick事件 , 按下後修改資料
<button type="button" class="btn btn-primary" onclick="editItem()">送出</button>
修改資料
function editItem() { //傳送到後端,並且修改 axios.post('/editItem', { //取得要修改的資料 title : $('#editTitle').val(), content : $('#editContent').val(), //取得剛剛的ID id:window.editId }) .then(function (response) { if (response.data.result == 'success') { //後端回傳過來是成功後,重整頁面 location.reload(); } }) .catch(function (error) { console.log(error); }); }
route(routes/web.php)設定
//取得項目 Route::post('getItem','NoteController@getItem');
//編輯項目 Route::post('editItem','NoteController@editItem');
Controllers(app/Controllers/NoteController.php)設定
//取得項目 public function getItem(Request $request) { //接收前端資料 $id = $request->input('id'); //取得資料庫資料 $data = Item::select('id','title','content') ->where('id',$id) //最後一定要寫get()來結尾 , 不然會出錯 ->first(); //用json格式回傳結果,與資料 return response()->json(['result' => 'success','data' => $data]); }
//更新項目 public function editItem(Request $request) { //接收前端資料 $id = $request->input('id'); $title = $request->input('title'); $content = $request->input('content'); //修改資料庫 Item:: where('id',$id) ->update([ //'資料庫欄位'=>資料 'title'=> $title, 'content'=> $content, 'updated_at'=> NOW() ]); //用json格式回傳結果 return response()->json(['result' => 'success']); }
刪除資料庫(delete)
views(home.blade.php)設定
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous"> <!-- 引入google字體 --> <link href="https://fonts.googleapis.com/css?family=Lato:300,300i,400,400i,700,700i,900&subset=latin-ext" rel="stylesheet"> <style type="text/css"> body{ font-family: '微軟正黑體', 'Noto Sans TC', Helvetica, Arial, '黑體-繁', 'Heiti TC', '儷黑', 'LiHei', 'Microsoft JhengHei', sans-serif; } </style> <title>Note</title> </head> <body> <div class="container"> <div class="row"> <div class="col-12"> <h1 class="text-center mt-2">Note</h1> <input type="text" class="form-control mt-5" placeholder="標題" id="newTitle"> <textarea class="form-control mt-2" placeholder="內容" rows="3" id="newContent"></textarea> </div> <div class="col-12 text-right mt-2"> <button type="button" class="btn btn-primary" onclick="addItem()">新增</button> </div> <div class="col-12 mt-5"> <table class="table"> <thead class="thead-light"> <tr> <th width="200">標題</th> <th width="600">內容</th> <th>時間</th> <th style="min-width: 150px;">操作</th> </tr> </thead> <tbody> <!-- 把假資料刪除後 , 將後端資料帶入html裡面 --> @foreach ($data as $val) <tr> <td>{{$val->title}}</td> <td>{{$val->content}}</td> <th>{{$val->created_at}}</th> <td> <button type="button" class="btn btn-secondary" data-toggle="modal" data-target="#exampleModal" onclick="getItem({{ $val->id }})">編輯</button> <button type="button" class="btn btn-danger" onclick="deleteItem({{ $val->id }})">刪除</button> </td> </tr> @endforeach </tbody> </table> </div> </div> </div> <!-- 編輯視窗 --> <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel"><b>編輯</b></h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <div class="form-group"> <label class="col-form-label">標題:</label> <input type="text" class="form-control" id='editTitle'> </div> <div class="form-group"> <label class="col-form-label">內容:</label> <textarea class="form-control" id='editContent'></textarea> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">關閉</button> <button type="button" class="btn btn-primary" onclick="editItem()">送出</button> </div> </div> </div> </div> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script> <!-- 載入Laravel的內建前端套件 ,現在目的是要載入Axios --> <script src="{{URL::asset('js/app.js')}}"></script> </body> </html> <script type="text/javascript"> function addItem() { //取得資料 var title = $('#newTitle').val(); var content = $('#newContent').val(); //檢查有沒有填寫資料 if (!title) { alert('請填寫標題'); return } if (!content) { alert('請填寫內容'); return } //傳送到後端 axios.post('/addItem', { title:title, content:content }) .then(function (response) { if (response.data.result == 'success') { //後端回傳過來是成功後,重整頁面 location.reload(); } }) .catch(function (error) { console.log(error); }); } function getItem(id) { //傳送到後端,並且取得資料 axios.post('/getItem', { id:id }) .then(function (response) { if (response.data.result == 'success') { $('#editTitle').val(response.data.data.title); $('#editContent').val(response.data.data.content); //使用一個 全域性的變數 ,來儲存要被編輯的ID , 等等真的要修改的時候直接取得 window.editId = response.data.data.id; } }) .catch(function (error) { console.log(error); }); } function editItem() { //傳送到後端,並且修改 axios.post('/editItem', { //取得要修改的資料 title : $('#editTitle').val(), content : $('#editContent').val(), //取得剛剛的ID id:window.editId }) .then(function (response) { if (response.data.result == 'success') { //後端回傳過來是成功後,重整頁面 location.reload(); } }) .catch(function (error) { console.log(error); }); } function deleteItem(id) { //js內建的詢問視窗 , 以免誤觸後刪除 var check = confirm("確定要刪除嗎 ?"); //如果點到確定後才會執行 if (check == true) { axios.post('/deleteItem', { id:id }) .then(function (response) { if (response.data.result == 'success') { //後端回傳過來是成功後,重整頁面 location.reload(); } }) .catch(function (error) { console.log(error); }); } } </script>
重點說明如下 :
將一開始頁面取得的id , 帶入onclick事件
<button type="button" class="btn btn-danger" onclick="deleteItem({{ $val->id }})">刪除</button>
使用confirm() 來防止誤觸刪除按鈕 , 如果確定後直接把id丟到後端刪除
function deleteItem(id) { //js內建的詢問視窗 , 以免誤觸後刪除 var check = confirm("確定要刪除嗎 ?"); //如果點到確定後才會執行 if (check == true) { axios.post('/deleteItem', { id:id }) .then(function (response) { if (response.data.result == 'success') { //後端回傳過來是成功後,重整頁面 location.reload(); } }) .catch(function (error) { console.log(error); }); } }
route(routes/web.php)設定
//刪除項目 Route::post('deleteItem','NoteController@deleteItem');
Controllers(app/Controllers/NoteController.php)設定
public function deleteItem(Request $request) { //接收前端資料 $id = $request->input('id'); //刪除資料庫的資料 Item:: where('id', '=', $id) ->delete(); //用json格式回傳結果 return response()->json(['result' => 'success']); }
終於結束了😂😂😂😂~~~~~~~~~
一開始碰可能會有點複雜 , 但在練習過幾次後是不是就覺得都在做同樣的事情呢
當然這個只是很簡單很簡單的範例 ~
大家一定要再深入地了解更多的細節 , 希望大家都可以學會Laravel ~
在下一章節我會貼上所有的程式碼 方便大家練習~
留言
張貼留言