整合营销服务商

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

免费咨询热线:

web防止表单多次提交的方法

web防止表单多次提交的方法

单提交, 应该是每个网页都会存在的一个内容。比如填写用户信息,填写个人资料。

向后台传送数据。那么可能就会有一些捣乱的用户,或者恶意工具服务器的

他可能多次点击提交按钮。导致服务器需要解析多次请求

那么就会出现问题。增加服务器压力。

解决方案1:

通过js ,定义一个全局变量。默认是false,当用户点击提交按钮。把全局变量该为true.

当用户点击第二次提交,会如果是true就不再执行提交。

代码如下

<script type="text/javascript">

var isCommitted=false;//表单是否已经提交标识,默认为false

function dosubmit(){

if(isCommitted==false){

isCommitted=true;//提交表单后,将表单是否已经提交标识设置为true

return true;//返回true让表单正常提交

} else {

layer.msg("您已经提交过了,信息正在查询请您耐心等待..")

return false;//返回false那么表单将不提交

}

}

</script>

其次需要在表单onsubmit="return dosubmit()"

用户点击提交之后默认转到该方法下执行代码

以上一种解决方案,只能解决不懂技术的,小白用户 但是不能从根本上解决问题

还有一种方式 就是 在服务器做验证。这也是最佳的解决方案 (推荐使用这种方式)

这种解决方案简单概括就是:

用户点击跳珠表单页面,会默认生成一个token值。token值可以是uuid+算法生成的唯一值。方式多种多样都可以

然后把这个token值放入session中,后台可以通过el表达式把通过key拿出token值,存入form表单中的hidden隐藏表单中

用户每次提交,连同表单数据和这个token值发送到服务器。服务器去校验这个token值。

首先校验这个token值你要知道有几种情况

第一种:

表单中没有token,代表他重复叫

第二种

当前session中没有token,则用户代表重复提交

第三种

存储在session中的token令牌与表单Token不同,则代表用户重复提交

每种情况都要考虑进去,

直接干代码!!不说废话了

上面几种情况 我会单独 写出一个工具类

/**

* 判断客户端提交上来的令牌和服务器端生成的令牌是否一致

* @param args

* true:表示重复提交

* false:表示没有重复提交

*/

public static boolean isRepeatSubmit(HttpServletRequest request) {

String client_token=request.getParameter("token");

//第一种情况,如果提交表单没有token则该用户是重复提交表单

if (client_token==null){

return true;

}

//取出来存储在session中的令牌

String server_token=(String) request.getSession().getAttribute("token");

//2、如果当前用户的Session中不存在Token(令牌),则用户是重复提交了表单

if (server_token==null){

return true;

}

//3、存储在Session中的Token(令牌)与表单提交的Token(令牌)不同,则用户是重复提交了表单

if (!client_token.equals(server_token)){

return true;

}

return false;

}

2 跳转页面生产token值

//该方法主要用于跳转JSP页面,并且防止多次提交创建token

@RequestMapping(value="findLogisticsPrice")

public String findLogistics(HttpServletRequest request, HttpServletResponse response){

String token=TokenUtils.getAccessToken(UUID.randomUUID().toString());

request.getSession().setAttribute("token", token);

return "modules/logisticsproviders/freightEstimateIndex";

}

生成token值的代码为:

/**

* 描述:生成Token方法

* @return

*/

public static String getAccessToken(String uuid){

String key="UZ";

String timestamp=String.valueOf(System.currentTimeMillis());

return HMACSHA256((uuid+timestamp).getBytes(),key.getBytes());

}

3 在业务层直接处理逻辑

//判断用户是否是重复提交

boolean b=TokenUtils.isRepeatSubmit(request);

if (b==true){

String ze="请不要重复提交!!!";

return ze;

}

当业务层逻辑快执行完时候

//移除session中的token

request.getSession().removeAttribute("token");

现代web开发中,表单是用户与网站互动的重要方式之一。HTML5为表单提交提供了强大的功能和丰富的输入类型,让收集和验证用户输入数据变得更加容易和安全。本文将详细介绍HTML5表单的各个方面,包括基本结构、输入类型、验证方法和提交过程。

基本结构

HTML表单由<form>标签定义,它可以包含输入字段、标签、按钮等元素。一个基本的表单结构如下所示:

<form action="/submit_form" method="post">
  <label for="name">姓名:</label>
  <input type="text" id="name" name="name" required>
  
  <label for="email">电子邮箱:</label>
  <input type="email" id="email" name="email" required>
  
  <input type="submit" value="提交">
</form>

在这个例子中,表单有两个输入字段:姓名和电子邮箱。每个输入字段都有一个<label>标签,这不仅有助于用户理解输入的内容,也有助于屏幕阅读器等辅助技术。<form>标签的action属性定义了数据提交到服务器的URL,method属性定义了提交数据的HTTP方法(通常是post或get)。

输入类型

HTML5提供了多种输入类型,以支持不同的数据格式和设备。

文本输入

<!-- 单行文本 -->
<input type="text" name="username" placeholder="请输入用户名" required>

<!-- 密码 -->
<input type="password" name="password" required minlength="8">

<!-- 邮箱 -->
<input type="email" name="email" required placeholder="example@domain.com">

<!-- 搜索框 -->
<input type="search" name="search" placeholder="搜索...">

数值输入

<!-- 数值 -->
<input type="number" name="age" min="18" max="100" step="1" required>

<!-- 滑动条 -->
<input type="range" name="volume" min="0" max="100" step="1">

<!-- 电话号码 -->
<input type="tel" name="phone" pattern="^\+?\d{0,13}" placeholder="+8613800000000">

日期和时间输入

<!-- 日期 -->
<input type="date" name="birthdate" required>

<!-- 时间 -->
<input type="time" name="appointmenttime">

<!-- 日期和时间 -->
<input type="datetime-local" name="appointmentdatetime">

选择输入

<!-- 复选框 -->
<label><input type="checkbox" name="interest" value="coding"> 编程</label>
<label><input type="checkbox" name="interest" value="music"> 音乐</label>

<!-- 单选按钮 -->
<label><input type="radio" name="gender" value="male" required> 男性</label>
<label><input type="radio" name="gender" value="female"> 女性</label>

<!-- 下拉选择 -->
<select name="country" required>
  <option value="china">中国</option>
  <option value="usa">美国</option>
</select>

特殊输入

<!-- 颜色选择器 -->
<input type="color" name="favcolor" value="#ff0000">

<!-- 文件上传 -->
<input type="file" name="resume" accept=".pdf,.docx" multiple>

验证方法

HTML5表单提供了内置的验证功能,可以在数据提交到服务器之前进行检查。

必填字段

<input type="text" name="username" required>

正则表达式

<input type="text" name="zipcode" pattern="\d{5}(-\d{4})?" title="请输入5位数的邮政编码">

数值范围

<input type="number" name="age" min="18" max="99">

长度限制

<input type="text" name="username" minlength="4" maxlength="8">

表单提交

当用户填写完表单并点击提交按钮时,浏览器会自动检查所有输入字段的有效性。如果所有字段都满足要求,表单数据将被发送到服务器。否则,浏览器会显示错误信息,并阻止表单提交。

<input type="submit" value="提交">

可以使用JavaScript来自定义验证或处理提交事件:

document.querySelector('form').addEventListener('submit', function(event) {
  // 检查表单数据
  if (!this.checkValidity()) {
    event.preventDefault(); // 阻止表单提交
    // 自定义错误处理
  }
  // 可以在这里添加额外的逻辑,比如发送数据到服务器的Ajax请求
});

完整例子

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单提交并显示JSON</title>
</head>
<body>

<!-- 表单定义 -->
<form id="myForm">
  <label for="name">姓名:</label>
  <input type="text" id="name" name="name">
  <br>

  <label for="email">电子邮件:</label>
  <input type="email" id="email" name="email">
  <br>

  <input type="button" value="提交" onclick="submitForm()">
</form>

<script>
// JavaScript函数,处理表单提交
function submitForm() {
  // 获取表单元素
  var form=document.getElementById('myForm');
  
  // 创建一个FormData对象
  var formData=new FormData(form);
  
  // 创建一个空对象来存储表单数据
  var formObject={};
  
  // 将FormData转换为普通对象
  formData.forEach(function(value, key){
    formObject[key]=value;
  });
  
  // 将对象转换为JSON字符串
  var jsonString=JSON.stringify(formObject);
  
  // 弹出包含JSON字符串的对话框
  alert(jsonString);
  
  // 阻止表单的默认提交行为
  return false;
}
</script>

</body>
</html>

在这个例子中:

  1. 我们定义了一个包含姓名和电子邮件输入字段的表单,以及一个按钮,当点击按钮时会调用submitForm函数。
  2. 在submitForm函数中,我们首先获取表单元素并创建一个FormData对象。然后,我们遍历FormData对象,将表单数据复制到一个普通的JavaScript对象formObject中。
  3. 接着,我们使用JSON.stringify方法将formObject转换成JSON字符串。
  4. 最后,我们使用alert函数弹出一个包含JSON字符串的对话框。

注意,这个例子中我们使用了type="button"而不是type="submit",因为我们不希望表单有默认的提交行为。我们的JavaScript函数submitForm会处理所有的逻辑,并且通过返回false来阻止默认的表单提交。如果你想要使用type="submit",你需要在<form>标签上添加一个onsubmit="return submitForm()"属性来代替按钮上的onclick事件。

结论

HTML5的表单功能为开发者提供了强大的工具,以便创建功能丰富、用户友好且安全的网站。通过使用HTML5的输入类型和验证方法,可以确保用户输入的数据是有效的,同时提高用户体验。随着技术的不断进步,HTML5表单和相关API将继续发展,为前端工程师提供更多的可能性。

天小编给大家带来的是html表单提交教程,非常简单!

话不多说直接进入教程

首先要注意的事项:

第一:因为这节课涉及到了php所以本地要安装php

在这里小编用的是phpStudyphpStudy(特点简单很适合本地开发测试)

phpStudy界面

第二:在php编码里一定要注意不要编写错误

<?php //为开头 //为结尾?>

<?php 这里写php代码 ?>

要切记php代码要以分号未结束 “;”

首页我们到我们刚刚安装的软件根目录下,找到www这个文件夹

双击打开建立一个新文件夹(在这我命名为了表单的拼音你们可以自己命名为你们想命名的名字,切记不能用中文)

在打开刚刚建立好的文件夹创建两个文件分别命名为orderform.html和processorder.php(当然你也可以自己取名)

我们用编程软件打开这两个新建文件(这里我用的是Sublime Text 3)

我们首先给orderform.html写下如下代码

然后我们开始写建立表单

我们访问本地连接看一下效果

我们在给php写入代码

以下为注意事项

<!--<?php //为php代码 eoch为输出代码 $_POST为接收html提交过来的数据 $tireqty=$_POST['tireqty']

//$sj=$_POST['sj']

//$dz=$_POST['dz'] 为给建立的变量赋值? echo "$tireqty";为输出这个变量-->

首先我们写入和html一下的html代码

在写入php接收函数

完成效果

以下是html里的代码

<!DOCTYPE html>

<html>

<head>

<!--这里编码为utf-8国际编码-->

<meta charset="utf-8">

<!--这里为网站标题-->

<title>表单</title>

</head>

<body>

<!--action为提交的页面 method为提交类型 分为两种一种为post还一种为get -->

<form action="processorder.php" method="post">

<!--border="0"为边框粗细-->

<table border="0">

<!-- bgcolor="#cccccc"为表格背景颜色这里为灰色 -->

<tr bgcolor="#cccccc">

<td>参数</td>

<!-- aligan="center"为表格居中 -->

<td align="center">数据</td>

</tr>

<tr>

<td>姓名</td>

<!-- <input type="text" name="tireqty" size //这里为type为提交类型

text为文本类型 name为名称和class一样 size为字体大小-->

<td align="center"><input type="text" name="tireqty" size="3"/></td>

</tr>

<tr>

<td>手机</td>

<td align="center"><input type="text" name="sj" size="3"/></td>

</tr>

<tr>

<td>地址</td>

<td align="center"><input type="text" name="dz" size="3"/></td>

</tr>

<tr>

<!-- <input type="text" value="提交" value为input 元素的值 colspan为合并-->

<td colspan="0" align="center"><input type="submit" value="提交"/></td>

</tr>

</table>

</form>

</body>

</html>

以下是php中代码

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>接收</title>

</head>

<body>

<form>

<?php

$tireqty=$_POST['tireqty'];

$sj=$_POST['sj'];

$dz=$_POST['dz'];

?>

<table border="0">

<tr>

<td>参数</td>

<td align="center">数据</td>

</tr>

<tr>

<td>姓名</td>

<td align="center"><?php echo "$tireqty"; ?></td>

</tr>

<tr>

<td>手机</td>

<td align="center"><?php echo "$sj"; ?></td>

</tr>

<tr>

<td>地址</td>

<td align="center"><?php echo "$dz"; ?></td>

</tr>

</table>

</form>

</body>

</html>

谢谢观看,喜欢的就收藏加关注吧!