给你个例子,是用随机数与session来解决的,请根据你的实际情况进行修改
创新互联专业提供绵阳主机托管服务,为用户提供五星数据中心、电信、双线接入解决方案,用户可自行在线购买绵阳主机托管服务,并享受7*24小时金牌售后服务。
?php
session_start();
//判断是否刷新*********************
if(isset($_POST['mark'])) {
if($_POST['mark'] == $_SESSION['code']) {
// 处理该表单的语句。。。
}
else {
// 处理刷新时的语句。。。
}
}
//END******************************
$code = mt_rand(0,1000000);
$_SESSION['code'] = $code;
?
form name=form1 method="post"
input type="text" name="text" /
input type="submit" value="submit" /
input type="hidden" name="mark" value="?php echo $code;?"
/form
这个问题首先是你自己设计导致的,想要避免也得改变你的设计,比如一种方式:可以将“直接在浏览器里输入success.php”设计为不能直接访问,以下是其中的两个实现方式。
1.将success.php放到一个不能直接访问的web路径下,在apache中.htacess可以控制访问。
2.控制可以自己来实现,设定一个参数,如果没有该参数则表示不能访问。
不知道是不是你想要的。
每次进入提交的页面,给一个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]);
// 后续操作
?
$########################
一个页面也是一样的,我给你的只是一个思维,
具体如何实现,你要根据自己的实际情况去处理
很多东西都不是通用的
另外,不管多少个页面,必然包含两个部分,一部分是表单填写,一部分是数据处理,这个跟多少个页面无关~~就看你是否能够理解这段代码的意义,如果不理解的话,嵌套进去也没啥用,能够理解的话,或许你能够找出更适合自己的解决方案
可以采用ajax配合使用php可以防止刷新页面重复提交
也可以使用框架同样可以防止
你直接访问数据处理页面的时候,$_POST['title'],$_POST['num] 应该是空值,所以你增加一个判断,必须有具体的值,再进行sql操作。
你要在 点击提交表单的的文件中 写一段JS 来使得每次点击提交时都能清空之前表单中的记录 这样就不会重复了 还有一种 就是在form action=""/form acrion指向另一个文件 这样提交后就提交到另一个文件中去了 不会保留在原有的表单内 如果你再刷新 也不会有重复的记录
建议使用Jquery的ajax,比较方便!
其实使用js的ajax,你也需要建立例外一个php文件,不同的是,这个文件会在后台运行,你是看不到的,当前页面也无需刷新和提交!
这样就达到了你的要求!