防止刷新重复提交,用Session+表单隐藏字段的方法
创新互联是一家集网站建设,江汉企业网站建设,江汉品牌网站建设,网站定制,江汉网站建设报价,网络营销,网络优化,江汉网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
设置session值如 forum1=0
正常提交后判断此session值,如果为0,就正常执行,执行完后将其置为1
下次再刷新提交时.此session已经为1了.不执行处理段.直接给跳走或者报错即可
把复选框的值作为参数提交,作为循环的次数
$s1 = $_POST['s1'];//获取样品数量
for($i = 1; $i=$s1; $i++){
$tmp = $_POST['smp'.$i]; //这里是对应循环中的文本框name属性
$sql = "insert into 表名(字段....) values('样品名',数量)";
mysql_query($sql,$conn);
}
这样写,能看明白么?
不可能一个insert语句插于两条重复数据,一般可能是你的语句执行了两次,或者页面被F5重复提交了。
一般你的插入语句要检查一下内容是否重复,重复内容不让提交,比如你到百度贴吧发帖子就会发现,重复的内容是无法发布的。
每次进入提交的页面,给一个session,为了避免重复,session的key可以是随机的。
在表单填写页面
?php
session_start(); // 启用session
$time = time();
$key = 'sess_' . $time; // 根据时间生成一个随机的session key
$_SESSION[$key] = $time; // 设置session的值
?
!--{通过隐藏表单将 session 的 key传递到服务端处理}--
input type="hidden" name="session_key" value="?php echo $time;?" /
处理页面
?php
session_start(); // 启用session
$key = $_POST['session_key'];
if(!$key || $_SESSION[$key] != substr($key, 5)){
// 如果没有传 session_key 参数
// 或者 session_key 参数值截断 sess_后的数字 与 session参数值不匹配
unset($_SESSION[$key]); // 删除 session 值
// 然后考虑是否要提示错误,或者转入另一个页面
exit(); // 终止页面代码执行
}
// 下面进行数据写操作
// 数据操作完成后,删除session
unset($_SESSION[$key]);
// 后续操作
?
$########################
一个页面也是一样的,我给你的只是一个思维,
具体如何实现,你要根据自己的实际情况去处理
很多东西都不是通用的
另外,不管多少个页面,必然包含两个部分,一部分是表单填写,一部分是数据处理,这个跟多少个页面无关~~就看你是否能够理解这段代码的意义,如果不理解的话,嵌套进去也没啥用,能够理解的话,或许你能够找出更适合自己的解决方案
你在插入之前要先对数据进行一次过滤也就是逻辑上得唯一判断后再作入库处理,否则提示已存在不插入即可。
在插入数据之前,可以从数据库查询,
如果没有这条数据我们进行插入操作,存在就跳过。
?php
$sql = "SELECT * FROM table WHERE ctime = '上午' AND week = '周一'";
$result = mysql_query($sql);
if (!$result) {
//没有查询到此记录,进行插入操作
}
?
望采纳 Thx