form表单提交数据怎么判断表单里的数据没有更改过?

就是说我要做表单编辑功能,里面有很多的数据,有<select> <input> <radio>这些,如果我没有改过里面的数据,然后就提交表单,做一个提示“编辑失败或数据没有更改过”,

在这过过程中怎么判断表单里的数据没有更改过,

阅读 12k
9 个回答

如果只考虑是否操作过,也就是说换过一次,再换回来也算更改过:做onChange绑定,只要有一个onChange被调用,把一个flag设为true就好了。

post之后的数据md5加密就好啦,做一个数据表存储这个加密的编码,如果连续两次一样,那么可以肯定这个表单跟之前的表单提交的数据一样,这个时候就可以判断得到了。但是我不建议你这样做。
如果你只是为了避免表单重复提交,参考这里。
php表单加入Token防止重复提交

这个事是目前我遇到最恶心的需求了。用lodash吧,进入页面先科隆一份数据,然后再用lodash的match方法进行比较。

页面加载后获取这些元素的值,提交的时候比对一下。

保存一份初试的表单数据,放在一个object里面,当提交的时候,再获取一下当前表单的数据,放在另外一个object里,再手动对比一下这两个object

PS: 如果用react, vue, angular处理这类问题就比较简单了,因为他们都是操作的数据,数据的对比很简单。

初始的时候放一个hidden的input,value是原始值,提交后比较下原始值和提交的数据

简单的方法是监听所有表单元素的change事件,但是如果某个值被改了之后又恢复了,就不好说了。
再就是把表单所有值序列化后哈希,然后需要的时候比较哈希值,就知道数据是否发生了变化。这个哈希值可以放在前端,但是这样能不安全,因为任何前端的验证都是不可信的。所以如果要求高的话,可以放在服务器端,待表单提交后在服务器端验证。

如果是PHP 那么你的判断方式有误 因为很多时候更新是用execute 而这个则是返回的是受影响的行数失败则会出错,如果是没有改变数据就去更新,那么得到的会是1个0,所以,你的判断是有问题的. 只需要全等于false即可解决这个错误

首先题主是编辑数据,那么,被编辑的数据应该先发送到页面上,类似TP的$this->assign('name',$value);,建议在做这个操作之前,先对(array)$value进行md5,将md5值存在session里,在用户提交数据的时候,先对提交上来的数据进行md5,然后跟session中的MD5进行对比,相同即用户没有编辑数据

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