当表单按钮在表格内时,如何将数据发布到控制器

时间:2014-03-30 17:36:54

标签: php forms button laravel csrf

我正在做一个学校项目,我遇到了一个小问题。

我正在尝试点击我的表格中的一个按钮,它会将一些数据发布到我的控制器功能但是变量似乎没有通过(我的代码在下面)并且我得到一个不匹配的令牌错误,如果我在“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'));

1 个答案:

答案 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}}。