整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

laravel简单防止后台表单重复提交的中间件

laravel简单防止后台表单重复提交的中间件
<?php

namespace App\Http\Middleware;

use App\Exceptions\InvalidRequestException;
use Closure;
use Illuminate\Support\Facades\Redis;

class PreventDupSubmit
{
    /**
     * 简单的防止前端重复提交数据 导致的数据异常
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

        $requestParams=$request->all();
        $requestParams["adminId"]=getAdminUserId();
        $requestParams["uri"]=$request->getUri();
        ksort($requestParams);
        $key=md5(serialize($requestParams));
        $result=Redis::Connection("wms")->set('wms_' . $key, 1,"EX",5,"NX");
        if(!$result){
            throw new InvalidRequestException("请勿重复请求,请5秒后再发起请求");
        }
        $response=$next($request);
        Redis::Connection("wms")->del('wms_' . $key);
        return $response;
    }
}

用:



单大师推荐搜索Q&A功能更新微信


Q


如何避免反馈提交数据,防止重复数据?

A


可以通过限制提交次数匿名访问唯一性字段不许重复来实现。


01. 限制提交次数


点击表单设置>>基础设置>>填写控制设置,可以通过微信ID、IP地址和同一设备来控制。



02. 匿名访问唯一


当上诉填写控制设置了每个微信账号只能提交一次,且在微信或者小程序中填写表单,则提交数据后将无法再次进入表单,即尽可访问提交一次。



? 点击体验 ?

https://biaodan100.com/web/formview/5ece02a1fc918f7ce713502e


03. 字段不许重复


单字段不许重复


表单编辑>>选中字段>>字段属性设置,可以通过比如姓名、手机号、证件号等字段的不许重复属性设置来控制。


Tips:单行文本、多行文本、日期、时间、姓名、电话、电子邮箱、证件号/卡号、网址字段均支持设置字段属性为不许重复。


多字段联合不许重复


表单编辑>>选中表单名称>>表单属性设置,设置多字段联合不许重复来控制。只有满足多个字段都唯一,才可提交表单。比如周报、每月收支账单等,需要实现日期+姓名唯一,或者月份+店铺名唯一等场景。


Tips:多字段联合不许重复属于高级功能,需单独开通

左右滑动查看更多


更多问题咨询,直接给公众号发消息,会有在线客服解答哦~~~

不要惊讶,是真人!

VC开发有一个基础原则:*.jsp不可以直接访问*.jsp文件。而所有的jsp必须先经过Servlet之后再跳转到另外一个jsp页面上。

1.运行Token.java,会跳转到input.jsp。此时sesssion增加属性input_token存在

import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class InputServlet
 */
@WebServlet(name="tokenServlet",urlPatterns={"/TokenServlet"})
public class Token extends HttpServlet {
	private static final long serialVersionUID=1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getSession().setAttribute("input_token", new Date());
		request.getRequestDispatcher("/input.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}


2.input.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Input</title>
</head>
<body>
<form action="InputServlet" method="post">
	输入信息:<input type="text" name="msg" id="msg">
	<input type="submit" value="输入">
</form>
</body>
</html>


3.在input.jsp输入***后,提交,会跳转到http://localhost/AWProject/InputServlet,同时控制台显示“表单提交:***”。此时session的input_token属性被删除。