2017-08-06 31 views
0

我想更新註冊表單數據。所以,起初我爲表演數據創建了一個表格。在這張表中,我包含了一個ViewForUpdate按鈕,並且已經通過了Id。當我單擊該ViewForUpdate按鈕時,它會在另一個頁面中正確顯示唯一的數據。當我輸入的新數據,當我點擊更新按鈕,它顯示了這個錯誤 -如何解決Laravel中的數據更新錯誤

MethodNotAllowedHttpException 

那麼,如何解決這個問題?

這裏是RegViewUpdate.blade.php文件

<html> 
<head> 

<body> 

<form action="edit{{$users[0]->id}}" method="post" enctype="multipart/form-data"> 

{{ method_field('PUT') }} 
{{ csrf_field() }} 

<div class="form-group"> 
    <label>Name : *</label> 
    <input type="text" class="form-control" name="name" value="{{$users[0]->name}}" required> 
    </div> 

    <div class="form-group"> 
    <label>Username : *</label> 
    <input type="text" class="form-control" name="username" value="{{$users[0]->username}}" required> 
    </div> 

    <div class="form-group"> 
    <label>Password : *</label> 
    <input type="password" class="form-control" name="password" value="{{$users[0]->pw}}" required> 
    </div> 

    <div class="form-group"> 
    <label>Upload Profile Picture :</label> 
    <input type="file" class="form-control-file" name="file_img" aria-describedby="fileHelp"> 
    <small id="fileHelp" class="form-text text-muted">If U Want , U Can Skip Upload A Profile Picture</small> 
    </div> 

    <input type="submit" class="btn btn-primary" name="submit" value="Update"> 

</form> 

</body> 
</html> 

這裏是RegViewController.php文件

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use DB; 

class RegViewController extends Controller 
{ 

    public function index() 
    { 
     return view('RegView'); 
    } 

    public function show($id) { 
     $users = DB::select('select * from academic where id = ?',[$id]); 
     return view('RegViewUpdate',['users'=>$users]); 
    } 

    public function edit(Request $request, $id) 
    { 
     $name = $request->input('name'); 

     DB::update('update academic set name = ? where id = ?',[$name,$id]); 
     echo "Record updated successfully.<br/>"; 

    } 

} 

這裏是我所創建的路線。

Route::get('edit/{id}','[email protected]'); 
Route::post('edit{id}','[email protected]'); 

academic表結構。

enter image description here

回答

1

試試這個:

RegViewUpdate.blade.php

<html> 
<head> 

<body> 

<form action="edit/{{$users[0]->id}}" method="post" enctype="multipart/form-data"> 

{{ method_field('PUT') }} 
{{ csrf_field() }} 

<div class="form-group"> 
    <label>Name : *</label> 
    <input type="text" class="form-control" name="name" value="{{$users[0]->name}}" required> 
    </div> 

    <div class="form-group"> 
    <label>Username : *</label> 
    <input type="text" class="form-control" name="username" value="{{$users[0]->username}}" required> 
    </div> 

    <div class="form-group"> 
    <label>Password : *</label> 
    <input type="password" class="form-control" name="password" value="{{$users[0]->pw}}" required> 
    </div> 

    <div class="form-group"> 
    <label>Upload Profile Picture :</label> 
    <input type="file" class="form-control-file" name="file_img" aria-describedby="fileHelp"> 
    <small id="fileHelp" class="form-text text-muted">If U Want , U Can Skip Upload A Profile Picture</small> 
    </div> 

    <input type="submit" class="btn btn-primary" name="submit" value="Update"> 

</form> 

</body> 
</html> 

RegViewController.php

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use DB; 

class RegViewController extends Controller 
{ 

    public function index() 
    { 
     return view('RegView'); 
    } 

    public function show($id) { 
     $users = DB::select('select * from academic where id = ?',[$id]); 
     return view('RegViewUpdate',['users'=>$users]); 
    } 

    public function edit(Request $request, $id) 
    { 
     $name = $request->input('name'); 
     try { 
      DB::table('academic') 
        ->where('id', $id) 
        ->update(['name' => $name]); 
      echo "Record updated successfully.<br/>"; 
     } catch (\Exception $ex) { 
      dd($ex); 
     } 
    } 

} 

路線:

Route::get('edit/{id}','[email protected]'); 
Route::put('edit/{id}','[email protected]'); 
+0

它不適用於action =「edit/{{$ users [0] - > id}}」我刪除了斜槓。現在它正在工作。告訴我一個成功的消息。但是,當我檢查數據庫時,它會顯示更新前的舊數據。這意味着仍然不會更新我的數據。如何解決這個問題? –

+1

它只更新由於原始代碼的名稱字段,是否確定名稱字段是相同的? –

+0

是的,即使它顯示成功的消息後,名稱字段也是相同的。 –

1

我相信你會想刪除以下行:

{{ method_field('PUT') }} 

的原因是,你的路線被設置爲使用POST方法,所以PUT路線不定義。或者,您可以將其更改爲指定PUT方法(這是多餘的,因爲您已經指定了該方法),或者使用具有相應Route的{{Form :: open()}}標記。

+0

儘管如此,沒有工作.. –

1

它應該在的途徑PUT方法

表動作要 -

/編輯/ {{$用戶[0] - > ID}}

和路徑應該是 -

Route :: put('/ edit/{id}','RegViewController @ edit');

因爲您使用PUT方法發送ID。

+0

現在它讓我thie錯誤 - 沒有找到/ 所請求的網址/編輯/ 38在這個服務器上沒找到。但是,數據仍然在數據庫中。 –

+0

也許它的斜槓....更新行動=「編輯/ {{$用戶[0] - >編號}}」 – Farsay

+0

它不適用於一個斜線,我刪除斜線。現在它正在工作。告訴我一個成功的消息。但是,當我檢查數據庫時,它會顯示更新前的舊數據。這意味着仍然不會更新我的數據。如何解決這個問題? –

1

我對你的視圖文件

  • 在你的路線發現了兩個問題與您的代碼

    1)更換您的表單標籤在您的視圖文件,如下

    {!! 
    Form::open(
           ['method' => 'PUT', 
           'route' => ['update','id of data to update'] 
          ]) 
    !!} 
    
    // place your form content here 
    
    {!! Form::close() !!} 
    

    2)改變你的路線如下

    Route :: PUT('update/{id}','controller_name @ update_method_name');

    • 更換CONTROLLER_NAME =您的控制器名稱
    • 更換update_method_name =您的方法名稱更新
  • +0

    這是什麼$任務和更新?我應該換一些東西嗎? –

    +0

    從{!!中刪除$任務! Form :: open()!!}並且update是路由的名稱,所以不需要改變它。 –

    +0

    我無法理解你的方法Bro .. –

    相關問題