【问题标题】:Column not found: 1054 Unknown column '_token' in 'field list' Laravel未找到列:1054“字段列表”Laravel 中的未知列“_token”
【发布时间】:2017-08-09 18:48:24
【问题描述】:

我尝试更新我的表格类别的记录,但它显示错误

找不到列:1054 未知列“_token”

路线

Route::post('/categorias/edit/{id}', 'CategoryController@update');

控制器

public function update(Request $request, $id)
{
    $data = request()->all();
    Categoria::where('id', '=', $id)->update($data);
    return redirect()->to('categorias');
}

型号

class Categoria extends Model
{
    protected $table = 'categoria';
    protected $fillable = ['id','codigo','nombre','descripcion','estado'];

表格

{{ Form::open(array('url' => url('categorias/add') , 'class'=>'form-horizontal' , 'id'  => 'formulario' , 'method' => 'POST')) }}

{{ csrf_field() }}
<input id="idcate" name="id" type="hidden" placeholder="" class="form-control input-md" required="">
<input id="txtcodigo" name="codigo" type="text" placeholder="" class="form-control input-md" required="">

<input id="txtnombre" name="nombre" type="text" placeholder="" class="form-control input-md" required="">

<textarea class="form-control" id="txtdescripcion" name="descripcion"></textarea >

<select id="cboestado" name="estado" class="form-control">
      <option value="0">NO ACTIVO</option>
      <option value="1">ACTIVO</option>
</select>
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
<button type="submit" class="btn btn-primary">Guardar</button>
{{ Form::close() }}

记录在一个表中,我使用相同的表单来编辑和添加新记录,只是通过单击编辑按钮,我更改了操作

$('#formulario').attr('action', '{{ url("categorias/edit")}}'+ "/"+ $('#idcate').val());

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    你的错误来自于

    $data = request()->all();
    //which includes '_token'
    //coming from csrf_field()
    

    改为

    $data = request()->except(['_token']);
    //same as $request->except('_token');
    

    【讨论】:

    • 做异常,会不会危害表单的安全? , 这样是对的吗?
    • 一点也不。 _token 仍然存在,但不会成为 $data 数组的一部分。仍然存在于请求中。
    • 成功了,感谢您澄清这个安全问题。
    【解决方案2】:

    只需在你的控制器上更改它

    Categoria::find($id)->update($data)
    

    【讨论】:

      【解决方案3】:

      这个问题的答案对于正确的过程是错误的,你应该做的是过滤变量$request接收到的数据,这样做,创建一个数组并捕获感兴趣的字段。

      这是基础,我个人会包括其他几个验证,我预见到在处理安全性时会发生很多事情,但应该足以让您在没有重大问题的情况下进行更新:

      use Illuminate\Support\Facades\Auth; use App\User;         
           /**
           * This is just a demo, modify it according to your needs, include Facades\Auth in the header of the controler to search for the logged in user (Auth::user ())
           *
           * Update the specified resource in storage.
           *
           * @param  \Illuminate\Http\Request  $request
           * @param  int  $id
           * @return \Illuminate\Http\Response
           */
          public function update(Request $request, $id)
          {
               $use = Auth::user()->name;
               $user = User::where([['id', $id], ['name', $use]]);
               $request->validate([
                'name'=>'required',
                'email'=>'required'
               ]);
               $array = array(
                'name' => $request->get('name'),
                'email' => $request->get('email')
               );
               $user->update($array);
               return redirect()->route('home')->with('success','Update successfully');
      
            }
      

      【讨论】:

        【解决方案4】:

        我不同意接受的答案。

        在我看来,最好使用带有数组作为名称属性的表单模型绑定(请参阅How to use Laravel form model binding with array as name attribute?)。

        {{ Form::model(['user' => $user], array('class'=>'form-horizontal')) }}
            {{ Form::label('user[email]', 'Email Address') }}
            {{ Form::text('user[email]') }}
        {{ Form::close() }}
        

        在控制器中,您可以使用以下代码访问用户数据,而无需担心提交时传输的其他数据(例如 _method、_token、提交......):

        $request->input('user');
        

        如果你想使用这种方法,那么你还必须更新验证码。

        Rails(我使用的另一个框架)中的表单模型绑定具有更好的实现,所提供的方法是默认方法。

        【讨论】:

          猜你喜欢
          • 2018-05-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-26
          • 2021-10-24
          • 2021-12-03
          • 2019-01-25
          • 1970-01-01
          相关资源
          最近更新 更多