ThinkPHP数据自动验证中unique的缺陷

2010-6-23 评论(8) 分类:技术文章 Tags:

ThinkPHP可以为Model添加$_validate属性,使得在使用create方法创建数据对象时能自动对数据进行验证,详细看这里

这其中有个unique的方法,即是验证指定栏的数据在表中是否唯一。向数据表里插入“唯一”字段时可以自动判断并且提示错误,但ThinkPHP这个功能有个缺陷,导致这个unique验证基本上只能在添加数据的时候使用,不能在编辑数据的时候用。

unique验证的源码在ThinkPHP/Lib/Think/Core/model.class.php第944行,对unique验证时就是查找整个数据表这一栏这个值是否存在,这样做在添加数据时没问题,但如果在编辑状态下就有问题了。例如编辑一个用户名和密码,现在不修改用户名只修改密码,因为用户名要进行唯一验证,此时这个用户名没有修改,数据表上是有这个用户名的(就是在编辑的这行数据),于是就提示已存在此数据,无法保存。

我想解决的办法可以是:在验证的时候判断是否传进了此表主键的值,例如判断是否传进了$_POST[“admin_id”],如果传进了,对搜索到的数据提取admin_id判断是否相等,相等则不存在unique错误,不相等才出现错误。在这么核心的地方调用$_POST似乎破坏结构,那可以改改$_validate传递的参数。还不熟悉ThinkPHP,就不动手改了。

目前在我的应用中是只在新增数据时检测unique,编辑时不检测,如果编辑时unique的栏有重复了,再在save()时判断是否插入成功和提示,暂时是这样。

开源 php版twitese

2009-10-28 评论(141) 分类:作品 Tags:

推特中文圈

暑假完成了推特中文圈,放在GAE上,大家的反响挺好,呼吁开源的人也很多,但我一直没开源,这里写了我开源的顾虑。

好像是10月14日那天,众多twitter第三方web客户端都被封了,itweet dabr twitzap 等,还有推特中文圈。被封的时候其实我挺平静的,因为如果要禁twitter,不封推特中文圈实在没道理,早有心理准备。

其实我还没完全了解他们封的是什么,我本来以为封了IP,没戏了,有一天一推友告诉我说用一个新域名绑定到twitese,就能继续免翻墙打开了。试过后,果真如此:http://t.webbang.net,到写这篇博客为止,这个地址还能访问。看来他们封的只是twitese.appspot.com这个网址?不过ghs.google.com的很多IP都被封了,仅剩下几个残种,不知道ghs.google.com有多少个IP,要是少的话,还是不要用twitter应用摧残GAE了~

开源GAE版的twitese无济于事,再怎样都是放在GAE上,只会更加摧残GAE,于是10月23日我开始动手写php版的twitese,希望开源后网友们能把twitese架设在多个不同的php主机上,躲避功夫网的封锁。

用另一种语言重写一个网站比想象中要容易,至少前端几乎不用改。php版的twitese与GAE版的几乎完全一样,随便看看与排行榜是通过GAE版的twitese开放出API进行调用,由于怕原版的twitese流量不足,所以另开了一个GAE重新抓取数据,所以开放出来的用户数据量没有原版的twitese那么多,随便看看里的更新也没原版那么频繁,但应该已经足够了。

开源

对开源协议没有了解多少,简单的说大家修改twitese是没有限制的,也不要求修改过后的twitese同样要开源。这次发布得有点仓促,小错误应该挺多,大家碰到的话可以在这里提一下~希望有热心的人能一起改进twitese~

开源项目主页:http://code.google.com/p/twitese/(因被墙,改为http://tuite.googlecode.com)

预览:http://twitese.webbang.net/

特点

1.相对于dabr,twitese对php空间要求低

dabr对php空间要求如下:

* PHP 5.2+
* curl PHP module
* mcrypt PHP module
* mod_rewrite apache module

而twitese只需要curl PHP module,另外我在本地测试的php版本是5.2.6,没有在其他版本的php上测试过,应该问题不大。

2.twitese主要是作为web客户端,但完整支持手机ucweb浏览,网页上JavaScript的各种操作都留有后路,即使浏览器禁用JavaScript也能正常使用,所以对不太支持JavaScript的手机浏览器也是友好的。

3.twitese可以架设在国外空间,也可以架设在国内空间,只需修改twitter api为未被封的api proxy即可。

待增加的功能

1.OAuth认证:本来是想一开始就做的,由于有其他事情要做,精力有限,就暂时没有这个功能了。不过对于中国用户来说,这个功能可有可无,因为需要翻墙。

2.短网址:目前还没有提供短网址功能,待增加~

安装教程

下载源文件:
方法一:通过SVN工具下载:http://twitese.googlecode.com/svn/trunk/ 此下载方法可以保证下载的是最新的程序。
方法二:进入项目主页 点击右边的Featured downloads下载压缩后的源程序。此方法不保证下载到最新的程序。
(目前程序不稳定,随时会更新错误,请使用SVN工具下载确保得到最新程序)

下载后,打开lib/config.php,按上面的说明修改一些参数,修改完后,传到php空间,就能使用了。

(更多…)

[开源]饭否应用-秘饭

2009-9-18 评论(2) 分类:作品 Tags:

mifan2

年初寒假做饭否应用-秘饭的时候,没有发上这里,现在补上,顺便把它开源了。

应用介绍

秘饭是一个可以让你匿名发送饭否信息的网站。不需要饭否帐号,只需要输入你想说的话,点击发送即可。这有什么用呢?一些不太适合在你饭否帐户说的话,但又很想说的,就可以在这里发,也可以说出心中的秘密。有三种方式可以发送你的秘密:

1.在秘饭主页上发送,是完全匿名的,IP地址也不会被记录,发送后需要通过验证才能发布在秘饭上。

2.通过饭否给秘饭发私信,同样需要经过验证,发信人只有管理员看得到,发布在秘饭后是匿名,并且保证不会透露发信人姓名。

3.通过饭否 @秘饭 发布消息,这些消息不需要通过验证,会直接显示在 公开的秘密 页面上,需要先 加秘饭为好友

开发说明

语言使用php,使用smarty模板引擎,三层结构,主要功能为:

后台可以读取两种数据,1.在首页直接发送的信息 2.饭否上给秘饭账户发送的私信 分别对其进行验证,验证通过的消息则标志为已通过,显示在首页,并通过秘饭的账号发送这条消息。验证不通过的消息则删除,验证过程使用ajax,提高效率。

秘饭上每条消息都可以设置标签,效果与博客标签类似。每条消息都可以有评论,评论使用纯AJAX进行,这个功能花的功夫比较多。

大概功能就这些,我自己挺喜欢这个应用,这好像是我写过的结构最清晰的一个应用了,界面自我感觉不错,花多了点心思在细节上。

因为秘饭里使用到curl,本空间似乎不支持,所以无法放上,一直放在一个免费空间里,饭否挂了后,那个免费空间跟着也挂了,等饭否恢复了,再看看要不要重新找个地方放上秘饭~

源程序下载:mifan.zip(329K)