为什么我的数据库经常产生一些空白和重复数据?

这是页面提交图:
图片描述
这是我的表单提交代码:

图片描述

图片描述

这是数据库的结构和代码:

图片描述图片描述

//图片里面connect 用的还是本地测试的地址

就搞不懂为啥。。会莫名奇妙的一些 空白数据,和重复的数据出来。。求大神

阅读 4.6k
8 个回答

首先,你获取到输入框中的值,并没有进行首尾的空格过滤操作。所以,即使你验证是否为空,答案也是否。

第二,你使用了encodeURIComponent() 函数对字符串作为 URI 组件进行编码。那么空格也将会被转换为一些字符串,所以,你对比是否为空,更加不可能。

所以,提交用户输入最基本过滤是

JS:

notes = note.value.trim();

这一步会去除首尾空格。

PHP:

$request = trim($_GET['notes']);

这一步在php里面也会去除首尾空格。最基本验证。

您用get提交到后端,后端并没有验证,所以您手一滑就提交好多空白重复的数据

在服务器端生成一个随机字符串,在返回的表单页面的时候把这个字符串放个隐藏的input里,提交的时候把这个一起提交上去,如果两个字符串相等,就提交到数据库,不相等说明表单提交过或非法,就不要插入了

要做好一个防止提交啊,
1、前端可以置灰按钮
2、后台加验证,提交过了就不要重复提交了

加个防抖功能,提交后按钮置灰或者提交后重定向到新的页面。担心重复的话在数据库加个唯一索引。至于为空的就直接后台trim保存之前去掉就行。

重复数据有可能是你未设置重复提交,手滑在鼠标点击的那一刻,瞬间点了N次造成的。
另外,空白数据有可能是这sql语句造成的

$sql = "insert into express values(null,'".$message."',".$ip.",".$time.")";

图片描述

为了迎合需求,我只是将 这里的 message数据设置了一个唯一性,也就是说不会产生重复的数据,但是会有一个空白数据会一直存在那里,显然这不是我最终想要的结果,如果想要更加深入的了解的话,还得再花时间,如果只是一个很小的需求,那样做作也没事了1.

永远不要相信前端传给后端的值 , 前端验证过了 ,后端最好也要验证一遍,很重要

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题