php 如何避免刷新页面重复插入数据到数据库

用PHP做了一个简单的留言本,但是出现了每次刷新页面,都会重复把数据插入数据库,网上看了很多关于说是用session来设置,但是COPY了很多下来,结果问题还是不能解决,所以希望哪位大虾能写个更加详细的代码出来。最好有注释,因为我初学,session还是不是很懂。感谢万分!!
我的是一个页面。。。。

每次进入提交的页面,给一个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]);

// 后续操作
?>

$########################

一个页面也是一样的,我给你的只是一个思维,
具体如何实现,你要根据自己的实际情况去处理
很多东西都不是通用的

另外,不管多少个页面,必然包含两个部分,一部分是表单填写,一部分是数据处理,这个跟多少个页面无关~~就看你是否能够理解这段代码的意义,如果不理解的话,嵌套进去也没啥用,能够理解的话,或许你能够找出更适合自己的解决方案
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-06-13
在session中保存变量
$_SESSION['submit']=false
提交后 改为true
检测变量 if ($_SESSION['submit']=true)
{
echo "text";
exit();
}本回答被网友采纳
第2个回答  2008-11-25
最简单的办法就是把处理和显示分离开,处理完毕跳转到显示页。
第3个回答  2008-11-25
做一个验证码就可以了。
第4个回答  2008-11-25
进来学习下

php怎样将调用的远程数据入库到本地数据库?
建议是定期同步数据库即可,链接远程数据库,再链接本地数据库,远程查询(条件为本地没有的记录,所以首先需要查询本地记录标记,然后!本地记录标记作为条件查询),得到后,插入本地数据库(注意记录的重复,可以用唯一键来屏蔽此类错误)。

如何避免logout后,后退按钮依旧显示缓存的有关问题
1) 如果用户没有登陆,Web应用将会正确中止受保护页面home.jsp, secure1.jsp, secure2.jsp和logout.jsp的执行,也就是说,假如用户在浏览器地址栏中直接敲入受保护JSP页的地址试图访问,Web应用将自动跳转到登陆页并提示Session has ended.Please log in. 2) 同样的,当一个用户已经退出,Web应用也会正确中止受保护...

php网站计数器程序,显示“您是本站的第XXX位访问者”
1.显示统计数据 sql = "SELECT * FROM table_counter";2.每次刷新页面 执行sql sql = "UPDATE table_counter SET number= number+ 1";如果要做的精确一点 在加一个表 table_visit 字段:ip 1更次刷新取得游客$ip;2.取得$ip后.查询 table_vist .如果存在则不更新table_counter.如果不存在,则...

2022年PHP面试题附答案(实战经验)
9、缓存技术是将动态内容缓存在文件中,在一定时间内访问动态页面时直接调用缓存文件,避免重新访问数据库。10、MVC结构分别指业务模型、视图和控制器,通过控制器调用模型处理数据,并将数据映射到视图层显示,以实现代码重用性和M和V的代码分离。11、AJAX是一种异步传输技术,能够通过JavaScript实现局部刷新...

php多用户同时上传时判断文件名是否相同,如果相同给出提示同名文件已经...
文件上传一般情况下服务器都会生成文件名的,完全可以避免文件名重复 并且能统一文件名,如果你只想用客户端传过来的文件名也可以:filename = $_FILES['file']['name']; \/\/ 获取用户提交的文件名$sql = "SELECT id FROM tablename WHERE logo='$filename'"; \/\/ 当前文件名是否存在$r =...

下载了php整站程序,但不知是否下了php的数据库,说一下想知道数据库存放...
如果还想支持诸如 .php3 ,.phtml 等扩展名的 PHP 文件,可以重复“添加”步骤。 再打开“Web 站点属性”窗口的“文档”标签,找到并点击“添加”按钮,向默认的 Web 站点启动文档列表中添加 index.php 项。您可以将 index.php 升到最高优先级,这样,访问站点时就会首先自动寻找并打开 index.php 文档。 确定Web...

PHP考试系统
1-整体是用jquery+php数据库调用实现的,上一页,下一页就是提交试题的ID进行取题。如图:做个模板页,然后根据试题ID装载试题。limit是限制返回结果的条数,当然你再取题时可以加上limit 1。看你这图并没有用到分页技术。2-试题选项是选录入到数据库中的单选组,多选题是多选组,你可以写一个...

ajax提交表单数据,数据既不能写入到数据库,而且返回的是空字符串,求...
你可以看下administrator表的主键id的数据类型 和 默认值 我估计你的id应该是int型,但是没有设置自增长,所以插入的时候id没有值被默认为0,数据库报了主键不能重复的错误,所以导致插入失败 如果id是自增长的话,第一条数据的id应该是1 =.= 你的代码只有 if(mysql_query($sql)){ } 的逻辑,...

100 个常见的 PHP 面试题和答案分享
这是一个 PHP 语法错误,表示 x 行的错误会停止解析和执行程序。最常见和常用的方法是将数据转换为 Excel 支持的格式。例如,可以编写 .csv 文件,例如选择逗号作为字段之间的分隔符,然后使用 Excel 打开文件。file_get_contents() 可读取文件并将其存储到字符串变量中。为了连接到 MySQL 数据库,必须使用 mysql_...

mysql数据库的优化方法?
查询数据简单暴力的方式是遍历所有记录;如果数据不重复,就可以通过组织成一颗排序二叉树,通过二分查找算法来查询,大大提高查询性能。而BTREE是一种更强大的排序树,支持多个分支,高度更低,数据的插入、删除、更新更快。现代数据库的索引文件和文件系统的文件块都被组织成BTREE。btree的每个节点都包含有...

相似回答