手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

提交表单如何防刷新?

自从有表单提交开始,这就是一直被人关注的话题。
搜索一下google,你可以搜到N条纪录,可是真正对你有用的有几条呢?

你搜索到的大多数都是讲的ASP网站下如何处理,少数讲了.net的,java的都放到框架里了,剩下的PHP的都是说用Session来解决。当然也有人回复直接加header标签,让他永远过期。就不会重复提交了。。

事实有用吗?我们一一看来,ASP的我们直接忽略,当然也可以参考他的一些方法而且PHP实现,但现在不看。一来,类似的方法PHP也有,二来,不喜欢ASP(这可以算个理由吧)

1、用session,表面上很不错,就和验证码似的,提交的时候判断是否与session的赋值相等,如果相等就提交,同时再注销这个session变量。不错,确实可行,但,如果表单的显示、提交、处理都在同一个页面里怎么办?根本无法处理,直接无视

2、JS控制,说是在没有提交的时候,var一个变量为false,onsubmit的时候,将它赋值为true,同时判断,如果是true就不让提交。听听是不错,可惜,实现起来并不是想象的这么容易。一旦提交后在跳转时按F5,这些就是白搭 。

3、disabled提交按钮。有用吗?效果同上

4、用COOKIE,有用吗???真的有用吗???或许吧,但是如果客户端关闭了cookie怎么办?那岂不是永远不会被提交了?

5、header过期。我开始也以为有用,并且在跳转函数前加上了这些。共四行代码哦。具体什么代码,我就不贴了,网上一搜一大堆。但实际中,如果问题和第一条相同,这点根本无法处理。

 

我现在怎么做?我现在是记录提交时间,刷新的时候用当前时间减去这个提交时间,如果在一定时间内就提示不能刷新。然后置时间为0,并强行跳转到列表页。

其实现在的很多框架都已经有处理。TP就是内置的。

很多论坛里面也有类似的处理,象discuz等等,可是,就象我说的,如果提交、显示都在同一个页面,那处理起来就复杂了。

虽然很多人说,这样并不建议,但已经这样了,我也总要找个解决方法的吧??对不?

Tags: 表单, 防刷新

Smarty的一些常用方法

网上流传的大师兄教程确实给了我们很多方便,只是大师兄教程却不是很全面。或许他给很多设计师们带来了福音,但对程序开发人员来说,并没有什么特别的高深之处。

不过,我还是挺佩服他的,毕竟,他将自己的思想和实现方法提供出来,如果每个人都这样,或许,我们能够再进步一些。呵呵

在工作,仍然是在使用着smarty,也在开发中积累了一点点的心得,逐步写出来,与大家共同分享,当然应该会存有错误,与大家一起改进。

smarty在使用时是需要配置的,最简单的配置方法就是将基本的变量写成一个数组,然后new Smarty之后,foreach一下,由$smarty自行加载,如:

---------------------------------------------

辛苦写了半天,结果超时了。下次补上,今天没时间了。

观察者模式(感谢mpeg提供源码)

  代码深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对程序中的接口或抽象类应用有更深的理解.设计模式在大中型系统中应用十分广泛,遵循了一定的编程模式,可以使代码便于理解,易于交流,而Observer(观察者)模式则是比较常用的一个模式,它尤其在界面设计、LOG处理中应用广泛。

代码请看全文

» 阅读全文

Tags: 模式

策略模式(感谢mpeg提供代码)

Strategy策略模式是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类.

Stratrgy应用比较广泛,比如, 公司经营业务变化图, 可能有两种实现方式,一个是线条曲线,一个是框图(bar),这是两种算法,可以使用Strategy实现.

实际整个Strategy的核心部分就是抽象类的使用,使用Strategy模式可以在用户需要变化时,修改量很少,而且快速.

Strategy和Factory有一定的类似,Strategy相对简单容易理解,并且可以在运行时刻自由切换。Factory重点是用来创建对象。

Strategy适合下列场合:

1.以不同的格式保存文件;

2.以不同的算法压缩文件;

3.以不同的算法截获图象;

4.以不同的格式输出同样数据的图形,比如曲线 或框图bar等

代码请看详细内容......

» 阅读全文

Tags: 模式

为windows下面的PHP添加sqlite功能

PHP4现在咱就不提了,毕竟现在是5的时代。

个人而言,不用LINUX,不是说LINUX不好,而是我不太熟悉,如果需要远程的话,对我太痛苦。因此我选择了windows。

在windows下面配置apache和iis都是一样的方便。。。。

添加sqlite功能原来以为很简单,毕竟从PHP5开始,SQLITE就变成内置功能了,然而直接在php.ini里把extension=php_sqlite.dll前的分号去掉时,运行程序的时候提示我php_sqlite.dll没有被加载,确实让我很郁闷。

查阅一下google发现一个很无耻的事情,原来。。。如果直接要使用sqlite功能,必须先加载pdo.dll和pdo_sqlite.dll,只有先加载这两个DLL,才能使php_sqlite.dll被成功加载。

感谢:http://x.discuz.net/405175/viewspace-26726.html,让我找到了这个解决方案。开始我死活运行不了。。。看来我还是接触的少啊。

Tags: sqlite, 安装, 疑问