防止重新提交表单数据Laravel 5.5

时间:2017-12-09 10:41:31

标签: laravel submission

我正在研究Laravel 5.5框架。 我有一个这样的表单主页:

<form action = "/result" method = "post">
<input type = "hidden" name = "_token" value = "<?php echo csrf_token() ?>">
<table>
        <tr>
           <td>Name or Nickname</td>
           <td><input type = "text" name = "name_nickname" autofocus /></td>
        </tr>
<tr>
              <input type = "submit" value = "LuckyNumber" />
           </td>
        </tr>
</table>

控制器如下所示:

class SixGetController extends Controller
{
public function luckyNumber(Request $request){

  $nameNickname = $request->input('name_nickname');
  $luckyNumber = rand (1,10);

DB::table('visitor')->insert(
  ['name_nickname' => $nameNickname, 'luckyNumber' => $luckyNumber]);

return view('result', ['nameNickname' => $nameNickname, 'luckyNumber' => 
$luckyNumber]);
}

结果页面如下所示:

<p><?php echo $nameNickname; ?>  </p>
<p>Your lucky number is <?=$result?> .</p>

如果用户按下重新加载F5按钮,则脚本将重新滚动随机数生成器并使用重新滚动的号码重新提交数据。我已经读过关于PGR模式,我不知道如何使用和操纵历史的东西,我也不明白。有人可以指出我放在什么样的代码,以防止重新注册和重新提交。感谢。

1 个答案:

答案 0 :(得分:0)

对于laravel实现,您可以使用Session Flash Data

  

有时您可能希望仅在下一个会话中存储会话中的项目   请求。您可以使用flash方法执行此操作。数据存储在   使用此方法的会话仅在后续会话期间可用   HTTP请求,然后将被删除。 Flash数据主要是有用的   对于短期状态消息:

在这种情况下,当有人发布帖子请求时,您应该将有用数据存储到会话中,并将其重定向到其他路由。然后,另一条路径可以检索有用的数据以显示到视图,并且用户在刷新页面时不再重新提交表单。

public function luckyNumber(Request $request) {
    ...
    $request->session()->flash('nameNickname', $nameNickname);
    $request->session()->flash('luckyNumber', $luckyNumber);
    return redirect()->action('SixGetController@resultView');
}

public function resultView(Request $request) {
    $nameNickname = $request->session()->get('nameNickname');
    $luckyNumber = $request->session()->get('luckyNumber');
    return view('result', ['nameNickname' => $nameNickname, 'luckyNumber' => $luckyNumber]);
}