1. 生成的html自动被去掉换行和空格,压缩挤到一起了。

解决: 开启debug即可,在入口文件增加

 define("APP_DEBUG",true);

2. 添加mysql的 datetime类型数据,以当前时间为例

class IndexAction extends Action{
public function insert(){
$data = D('Operate');
if($data->create()) {
$data->optime = date("Y-m-d H:i:s" ,time()); //注意必须先create再add,否则无效
$result = $data->add();
if($result) {
$this->success('操作成功!');
}else{
$this->error('写入错误!');
}
}else{
$this->error($data->getError());
}
}
}

3. thinkphp中进行字段加减操作更新的方法

M('User')->where('id=5')->setInc('score+2'); //字段加操作
M('User')->where('id=5')->setInc('score',5); //字段减操作

若同时更新两个或以上的字段,需要这样写,用think的表达式写法

$Role = M('Role');
$Role ->heartvalue = array('exp',"heartvalue - $opvalue"); //注意,这里exp后面的表达式必须为双引号,否则变量不起作用,而且变量必须为数字类型才有效
$Role ->secretto = array('exp',"secretto+1");
$Role->where('uid='.$opfrom) ->save();

4. thinkphp中查询语句书写时,字段若为字符串,必须加引号,若为数字可加可不加,不确定的时候一定记得加。

错误写法:

//pass为字符串,这样对比返回结果是false
$list = $Proxy->where('imid='.$user.' AND pass='.md5($pass.'mixedhash'))->find(); //错误写法二,变量为字符串还不行,必须是与字段对比的变量的运算结果为字符串
$list = $Proxy->where('imid='.$user.' AND pass='.md5("$pass".'mixedhash'))->find();

正确写法:

$list = $Proxy->where('imid='.$user.' AND pass="'.md5($pass.'mixedhash').'"')->find();

//正确写法二,比较保险也比较清晰的写法,这样可以避免忘记加引号
$condition['imid'] = $user;
$condition['pass'] = md5($pass.'qd');
$list = $Proxy->where($condition)->find();

5. thinkphp中create()自动填充返回false的一些原因分析

一般出现这种情况是由于传过来的字段为空值导致,首先检查一下提交的表单method是否与获取方式对应,例如form中忘记加method或者form中的method为POST而获取的时候用的是$this->$_get("variable"); 这样也会导致获取的变量为空从而create失败。

6. 设置当前菜单的样式,可以使用thinkphp的系统变量 $Think.ACTION_NAME (代表当前动作的名称对应到页面的function 的name),使用的时候注意把变量放在后面。 形如:

<a href="__URL__/ccenter" <if condition="'ccenter' eq $Think.ACTION_NAME">class=current</if>>控制中心</a>

下面的写法不被支持,将报错

<a href="__URL__/ccenter" <if condition="$Think.ACTION_NAME eq 'ccenter'">class=current</if>>控制中心</a>

(猜测可能是类型转换导致的,比较运算一般都是先转换类型后比较)

7. thinkphp save()失败的一些原因分析

首先根据5但中描述的逐一排除:

① 检查 form中是否忘记加method以及 获取变量的时候是否与method对应(method为post,但是获取的时候使用 I("get.xxx")就会导致获取失败为空);

② 检查form表单中的input等输入字段的name值是否对应,或者是否漏写、错写name的值;

③ 如果是使用create()获取表单数据,然后无限制条件进行的save(),形如

$Station = D("Station");
$Station->create();
$result = $Station->save();

这样的代码,那就需要检查数据库中是否设置了主键,如果没设置主键的话 是不会生效的哦。

④ 今天(2016.4.5)又犯了一个错误,反复save就是不对,最后发现表名写错了。。。尼玛!!!

8. addAll() 失败的部分原因分析。

通常使用

if($lastId = $Table->addAll($data)){
//something to do
}

的形式来判断是否插入成功。 那有时候会插入失败,这个时候就要仔细分析数据结构了。 其中一种情况比较特殊的,就是插入的时候偶尔会出现问题(也就是说问题并非总是出现),提示错误如下:

Column count doesn't match value count at row x

这个错误的出现很明显是参数个数与值的个数不一致导致的,但是通常我们都是使用 $data['key'] = $value; 的方式来给data赋值的,又怎么会出现键值对不匹配呢。 经过逐项排查发现,其实是因为 赋值过程中,出现了一个空值,也就是 $data['keyx'] = $value; 这个$value的值为不可识别的值的时候,那值会被自动舍弃,而键却还在,这样就导致了上面的mysql错误。

解决方法就是对于不能100%确定$value是否为空的情况下,对$value做一个判断,若为空,给与赋值

thinkphp碰到的一些小问题的更多相关文章

  1. 移动端无法复制:使用clipboard.js碰到的一个小问题

    移动端无法复制:使用clipboard.js碰到的一个小问题   直接看下面的代码:在移动端访问,点击,能正常复制. <html> <head> <meta http-e ...

  2. php(ThinkPHP)实现微信小程序的登录过程

    源码也在我的github中给出 https://github.com/wulongtao/think-wxminihelper 下面结合thinkPHP框架来实现以下微信小程序的登录流程,这些流程是结 ...

  3. pandas read excel文件碰到的一个小问题

    今天利用pandas读取excel时,爆出如下错误: 代码为: import pandas as pd db_eua=pd.read_excel('db_eua.xlsx',sheetname='EU ...

  4. IOS block使用中碰到的一个小坑

    1.先上段代码       __block typeof(self) tmpSelf = self; [tableview addLegendHeaderWithRefreshingBlock:^() ...

  5. firefox 中碰到的一个小坑

    情况描述: 在一个处于正常文档流的div中,里面有一部分文字,还有个有浮动的块, 上代码 HTML: <div class="container">   this is ...

  6. 总结配置搭建tomcat时碰到的一些小问题

    1.环境变量的配置 在配置tomcat的环境变量时始终配置不对,于是首先检查之前java的环境变量是否正确,发现java命令可以用但是javac却找不到,自己又瞎搞一通,终于javac可以用了,但ja ...

  7. oracle的分页查询碰到的一个小问题

    订单表.与订单信息表(多个订单信息列有同一个订单id) 查出全部订单以及其信息并依照订单分页 select * from( select a. * , (DENSE_RANK() OVER(ORDER ...

  8. 部署WebService服务碰到的一个小问题

    在部署WebService服务到IIS上之后,发现一直无法在浏览器访问到编写的asmx文件,一直提示404或403错误.提示当前访问的文件时脚本文件. 1.首先检查了在IIS上部署WebService ...

  9. 支付宝小程序获取 user_id(openid) ThinkPHP版

    支付宝小程序获取 user_id(openid) ThinkPHP版 近期支付宝小程序个人公测了,就想着玩一下,没想到就获取用户唯一标识都这么麻烦,微信的openid的话Get请求一下就完事了,支付宝 ...

随机推荐

  1. 浅析前端开发中的 MVC/MVP/MVVM 模式

    MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...

  2. uvalive 3029 City Game

    https://vjudge.net/problem/UVALive-3029 题意: 给出一个只含有F和R字母的矩阵,求出全部为F的面积最大的矩阵并且输出它的面积乘以3. 思路: 求面积最大的子矩阵 ...

  3. spring cloud+dotnet core搭建微服务架构:Api网关(三)

    前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...

  4. PHP程序员40点陋习

    1.不写注释 2.不使用可以提高生产效率的IDE工具 3.不使用版本控制 4.不按照编程规范写代码 5.不使用统一的方法 6.编码前不去思考和计划 7.在执行sql前不执行编码和安全检测 8.不使用测 ...

  5. SQL Server Compact/SQLite Toolbox 使用

    最近一个嵌入式的数据库用的SqlCe 需要导入到Sqlite, 网上查到了这个工具--SQL Server Compact/SQLite Toolbox.但是在使用的时候遇到了一点小曲折,记录下来给需 ...

  6. 在jsp页面的js中使用Cookie的原理介绍以及相应方法的代码

    1. 设置cookie 1.1 每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie: document.cookie="user_Id=828&q ...

  7. Telerik RadGridView动态增删行及行列操作

    最近使用一直使用第三方控件Telerik,版本 2011 Q1,一直使用显示控件RadGridView,使用起来比DataGird好使, 也发现有控件问题. 1.增行 RadGridView中使用Be ...

  8. SpringBoot01 InteliJ IDEA安装、Maven配置、创建SpringBoot项目、属性配置、多环境配置

    1 InteliJ IDEA 安装 下载地址:点击前往 注意:需要下载专业版本的,注册码在网上随便搜一个就行啦 2 MAVEN工具的安装 2.1 获取安装包 下载地址:点击前往 2.2 安装过程 到官 ...

  9. JavaScript函数之作用域 / 作用链域 / 预解析

    关于作用域和作用链域的问题,很多文章讲的都很详细,本文属于摘录自己觉得对自己有价值的部分,留由后用,仅供参考,需要查看详细信息请点击我给出的原文链接查看原文件 做一个有爱的搬运工~~ -------- ...

  10. android 统计启动时长,标准

    一.启动的类型 冷启 动,application没有被创建,需要先创建进程,然后启动MainActivity.由于这个过程需要fork一个新进程,所以耗时. 热启动,同上面对照,已经启动过applic ...