【问题标题】:How To Solve This Data Update Error In Laravel如何解决 Laravel 中的数据更新错误
【发布时间】:2017-08-06 07:20:51
【问题描述】:

我想更新注册表数据。所以,起初我为显示数据创建了一个表。在这个表中,我包含了一个 ViewForUpdate 按钮,并且我已经传递了 Id。当我单击 ViewForUpdate 按钮时,它会在另一个页面中正确显示唯一数据。在我输入新数据并单击更新按钮后,它会显示此错误 -

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}','RegViewController@show');
Route::post('edit{id}','RegViewController@edit');

academic 表结构。

【问题讨论】:

    标签: php mysql laravel


    【解决方案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}','RegViewController@show');
    Route::put('edit/{id}','RegViewController@edit');
    

    【讨论】:

    • 它不适用于 action="edit/{{ $users[0]->id }}" 我删除了斜线。现在它正在工作。向我显示一条成功的消息。但是,当我检查 Database 时,它​​会显示更新前的旧数据。这意味着仍然没有更新我的数据。如何解决这个问题??
    • 由于原始代码,它只更新名称字段,您确定名称字段相同吗?
    • 是的,name字段即使显示成功消息也是一样的。
    • 现在我可以更新名称字段了。但是,用户名和密码没有更新。我使用了这个查询 - update(['name' => $name],['username' => $username],['pw' => $password]);
    • 只需在 ->update() 方法的数组参数中添加用于更新的附加字段: update(['name' => $name, 'username' => $username, 'pw' => $密码]);
    【解决方案2】:

    应该是路由上的PUT方法

    表单动作应该是 -

    /edit/{{$users[0]->id}}

    并且路线应该是 -

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

    因为你使用的是PUT方法发送id。

    【讨论】:

    • 现在它向我显示了错误 - 未找到/在此服务器上未找到请求的 URL /edit/38。但是,数据仍在数据库中。
    • 它不适用于一个斜线,我删除了斜线。现在它正在工作。向我显示一条成功的消息。但是,当我检查 Database 时,它​​会显示更新前的旧数据。这意味着仍然没有更新我的数据。如何解决这个问题??
    【解决方案3】:

    我相信您会想要删除以下行:

    {{ method_field('PUT') }}
    

    原因是你的 Route 设置为使用 POST 方法,所以没有定义 PUT Route。或者,您可以更改它以指定 PUT 方法(这是多余的,因为您已经指定了该方法),或者将 {{ Form::open() }} 标记与适当的 Route 一起使用。

    【讨论】:

      【解决方案4】:

      我发现你的代码有两个问题

      • 在您的视图文件中
      • 在您的路线中

      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');

      • replace controller_name = 你的控制器名称
      • replace update_method_name = 您的更新方法名称

      【讨论】:

      • 这个 $task 和更新是什么?我应该用什么代替吗??
      • 从 {!! Form::open() !!} 和 update 是路由的名称,所以不需要更改它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 2021-09-15
      • 2018-01-22
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 2023-02-01
      相关资源
      最近更新 更多