我正在做一个学校项目,我遇到了一个小问题。
我正在尝试点击我的表格中的一个按钮,它会将一些数据发布到我的控制器功能但是变量似乎没有通过(我的代码在下面)并且我得到一个不匹配的令牌错误,如果我在“post”上添加了CSRF安全功能。
这是我的函数/表中代码的一部分:
$lecid = $lab->lecture_id;
$tutid = $lab->tutorial_id;
$labbid = $lab->lab_id;
$courseid = $lab->course_id;
echo
"<tr class='danger'><td>".
'<form name="f1" action="/member/student/functionregistercourses" method="post" >'.
'<input id="add" value="ADD" type="submit" lab_id=$labbid tutorial_id=$tutid "course_id"=$courseid lecture_id=$lecid term=$term year=$year >'.
'</form>'.
"---------- LAB ".$lab_id
."</td>"."<td>".
$day
给我下面的表格,这是我想要的,但是当我点击它时,它无法正常工作。
form http://4.ii.gl/yhUK2F.png
我遇到的问题:
当我单击表单上方的按钮时,它会给我一个令牌不匹配错误。当我从控制器中删除此行时,它可以工作:
$this->beforeFilter('csrf', array('on'=>'post'));
这是一项安全功能。有没有办法在保留CSRF代码的同时修复它?
我的表单通常采用以下格式:
{{ Form::open(array('url'=>'member/student/regcourses', 'class'=>'comform')) }}
这是我在控制器中获取变量的方法:
$regcourse->course_id = strtolower(Input::get('course_id'));
$regcourse->lecture_id = strtolower(Input::get('lecture_id'));
$regcourse->tutorial_id = strtolower(Input::get('tutorial_id'));
答案 0 :(得分:0)
您必须将令牌包含在隐藏的输入中:
<input type="hidden" name="_token" value="{{ csrf_token() }}">
或者有一个更短的方式。
{{ Form::token() }}
这样,令牌将被添加到POST中,您可以在过滤器中进行检查:
Route::post('register', array('before' => 'csrf', function()
{
return 'You gave a valid CSRF token!';
}));
你的提交按钮很乱。您必须将变量放入隐藏的输入字段中。提交POST后,这种方式将包含它们,因为表单数据将在其中发送。
<input name="course_id" type="hidden" value="{{ $courseid }}">
还可以使用.blade.php
结尾命名您的视图来使用Blade模板引擎。这样,您可以使用echo
语法{{ $echoed_variable }}
来{{1}}。