PHP Learn

Thinkphp Left Join/Right Join 实例

第一个表为Comment表,第二个表为Reply表, MYSQL上测试语句为:select a.*,b.* from comment a left join reply b on a.id=b.cid //Left Join $Blog->table('comment a')->join('reply b on a.id=b.cid')->field('a.*,b.*')->order('id desc')->limit('8')->findall(); //Right Join $Blog->table('comment a')->join(array('right','reply b on a.id=b.cid'))->field('a.*,b.*')->order('id desc')->limit('8')->findall();

.htaccess not working on apache web server

Q: I already enabled mod_rewrite in httpd.conf file on apache server, but .htaccess configuration is not working at all. How can i fix this problem? A: Make sure AccessFileName set to .htaccess Search httpd.conf for AccessFileName directive. It defines name of the distributed configuration file: [code] # AccessFileName: The name of the file to look for in each directory # for additional configuration directives. See also the AllowOverride # directive. # AccessFileName .htaccess [/...

discuz7验证码不能显示的解决方法

如果你的utf-8版本discuz 7出现突发性的验证码无法显示,可能是因为在手动修改config.inc.php不注意导致的。 如果你直接用记事本修改,会自动在文件头部加上Unicode Singnature (BOM)。 而只要有BOM,在输出验证码图片的时候 就会出现问题。 解决办法很简单,用EditPlus或者DW修改一下文件的编码,即另存为的时候不要保留BOM就好了。

Thinkphp htaccess rewrite的问题

我的网站Thinkphp配置URL_MODE为2, 传到服务器就出现这样的错误,无论进什么页面都会跳转到首页. htaccess文件的配置如下: [code] <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule> [/code] 后来发现问题出现在Apache的版本上,好像不同版本对rewrite的解析不一样。 修改htaccess如下后,工作正常: [code] <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)...

ThinPHP中Join实用举例

这里使用了两个表,第一个表为Post表,第二个表为Category表。 MYSQL语句为: [code] SELECT count(*) AS total_num, a.cate_id, b.name FROM post a LEFT JOIN category b ON a.cate_id=b.id WHERE a.status='a' GROUP BY a.cate_id ORDER BY b.name [/code] ThinkPHP中Join的写法: [code] $blog = D("Post"); $blog->table('post a')->join("category b ON a.cate_id=b.id")->field('count(*) AS total_num, a.cate_id, t.name')->group("a.cate_id")->order('b.name')->where("a.status='a'&q...

ThinkPHP 2.0 多语言使用Bug

项目中使用到了thinkphp2.0的多语言功能,发现一些bug 语言配置如下: [code] 'LANG_SWITCH_ON' => true, 'DEFAULT_LANG' => 'en-us', 'LANG_AUTO_DETECT' => true, [/code] 在Lang目录下创建en-us,zh-cn,zh-tw目录 ThinkPHP使用$_SERVER['HTTP_ACCEPT_LANGUAGE']来自动检测浏览器支持语言, 然后保存到cookie中,并读取相应的语言包。 这里有两个问题: 1. 浏览器的返回值的大小写不同, 如Firefox:en-us, 谷歌chrome:en-US 返回值是小写的时候没有问题,大写的时候(chrome)就会产生找不到语言包的情况。 2. 浏览器的支持语言不存在的时候,也会产生找不到语言包的情况。 比如说有的浏览器返回值是 en-gb 解决办法如下, 打开/ThinkPHP/Lib/Think/Core...

Thinkphp中表关联HAS_ONE和BELONGS_TO的区别

HAS_ONE(或HAS_MANY):外键在子关联对象中 例子: 父关联对象表: product_id product_name 子关联对象表: image_id image_name product_id 外键是:product_id BELONGS_TO:外键在你父联对象中 父关联对象表: product_id class_id product_name 子关联对象表: class_id class_name 外键是:class_id

ThinkPHP中forward和redirect的区别

ThinkPHP中forward和redirect的区别在那里呢? 首先看代码注释: forward: 执行某个Action操作(隐含跳转) 支持指定模块和延时执行 redirect: Action跳转(URL重定向) 支持指定模块和延时跳转 其次看代码组织,二者的行为是不同的: forward: [code] if(is_array($action)) { //通过类似 array(&$module,$action)的方式调用 call_user_func($action); }else { if(empty($module)) { $module = defined('C_MODULE_NAME')?C_MODULE_NAME:MODULE_NAME; } if( MODULE_NAME!= $module) { ...

ThinkPHP上传类库的Bug修复

最近开发网站用到了ThinkPHP 2.0的上传类库, 用来实现一个图片上传功能。 使用过程中发现,如果开启了子目录创建方式,则会出现一些问题: [code]public $autoSub = true;[/code] 1. 无法生成缩略图, 此问题的修复办法如下, 在 UploadFile.class.php 中找到 line#145 [code] if ($this->thumb) { // 生成图像缩略图 import("@.ORG.Image"); $image = Image::getImageInfo($filename); if(false !== $image) { //是图像文件生成缩略图 $thumbWidth = explode(',',$this->thumbMaxWidth); $thumb...

使用正则表达式进行ThinkPHP的自动验证

ThinkPHP的自动验证机制是为了进行表单数据验证,验证可以支持function、 callback、confirm、equal、unique和regex,这里要讲的是使用正则表达式进行验证。 一般我们见的比较多的是设置规则为require、email之类的,其实这些本身也是属于正则表达式验证方式,只是系统内置定义了一些常用的正则表达式而已。这些内置的正则表达式的定义可以参考model类的regex方法,内置支持的正则定义包括: require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字、zip 邮编、integer 整数、double 浮点数、english 英文字母,但是并不局限于这些正则规则的,我们完全可以直接在验证规则里面使用正则表达式进行定义,这样我们可以凭借强大的正则表达式来进行表单字段验证,例如: array(‘name’,'/^[a-z]\w{3,}$/i’,'名字不符合要求!’); array(‘password’,'/^[a-z]\w{6,30}$/i’,'密码不符合要求!’); array(‘ac...