解决ThinkPHP的Create方法失效而没有提示错误信息的问题

ThinkPHP中的数据创建Create方法是一个非常有用的功能,它自动根据表单数据创建数据对象(在表字段很多的情况下尤其明显)

但有时候该方法可能并未按照你期望的来工作,比如方法不工作而且还没有提示错误信息

这个时候你就要好好仔细下你的代码了,因为很有可能你写的代码不规范或是其他原因

以下是我因为自己的粗心而出现的问题:Create方法失效而没有提示错误信息

 /**
     * 编辑数据
     * @Author   NETFOX-HTL
     * @Email    [email protected]
     * @DateTime 2015-10-30T17:00:29+0800
     */
    function edit_post(){
        if(IS_POST){

            print_r($this->org_model);
            if ($this->org_model->create()) {
                //code
                echo $this->org_model->_sql();//最后一条执行的Sql

                die ("create");
            } else {
                echo $this->org_model->_sql();//最后一条执行的Sql
                die($this->org_model->getError());
            }
        }
    }

浏览器发出的POST请求数据

edit_post打印的信息

  1. Think\Model Object
  2. (
  3. ***
  4. ***
  5. )
  6. SHOW COLUMNS FROM `table1`

好像上面的都没有什么问题,最主要的是得到了数据库信息(在Mysql里可以正常执行)但就是if(create()){}里的代码没有执行

说明create方法并未按照预期执行,该问题我找了半个小时在网络上也看了别人的一些经历都没有解决

然后我就看了下数据库表结构,我似乎明白了什么于是我把表字段的全部更改成小写然后再执行就解决了

问题原因:Html元素的值跟数据库存在大小写差异

参考网络上的经验总结下以下规则可解决以上问题:

  1. HTML中的元素是否指定了name属性且name的值跟数据库中的值完全一致(区分大小写)
  2. 确认HTML表单中的数据正确发送了出去
  3. Model 命名是否错误能否找到对应的表(能否打印了Model对象)
  4. Model类及其成员方法是否是私用或受保护
  5. Model的getError()方法是否有错误
  6. 方法能否接收到POST的值,POST接收到的值跟请求的值是否一致(注意大小写)
  7. 确认遵守了ThinkPHP的开发规范

如果以上还没有解决你的问题,那要考虑下你的人品了

参考:

ThinkPHP3.2完全开发手册数据创建Create

新手create老是失败的原因

create方法失败,返回bool(false)

ThinkPHP3.2完全开发手册 开发规范

ThinkPHP 自动验证与自动填充无效可能的原因

来自为知笔记(Wiz)

时间: 2024-10-13 19:21:20

解决ThinkPHP的Create方法失效而没有提示错误信息的问题的相关文章

ThinkPHP中create()方法自动验证

自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 原理: create()方法收集表单($_POST)信息并返回,同时触发表单自动验证,过滤非法字段, 在控制器中使用create()方法,(返回值为true/false),会自动触发模型类中的$_validate属性(为父类Model中的方法,在子类Model中重写),在$_validate中自定义验证规则(验证规则下面会详细说明),当create()方法没有数据即返回值为fals

ASP.NET MVC AJAX调用JsonResult方法并返回自定义错误信息

一.如何用AJAX调用JsonResult方法 比如FuckController中添加有个返回JsonResult类型的方法FuckJson(): public JsonResult FuckJson() { return new JsonResult() { Data = new List<string>() { "fuck", "shit" }, JsonRequestBehavior = JsonRequestBehavior.AllowGet }

使用jQuery异步传递Model到控制器方法,并异步返回错误信息

需要通过jquery传递到控制器方法的Model为: public class Person { public string Name { get; set; } public int Age { get; set; } } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-

关于ThinkPHP控制器的方法失效的问题

今天发现控制器的方法失效了,用了排除法,找了长时间的原因,都没有找出来,后来干脆把home模块中的控制器和视图文件都复制到bbs模块下,竟然也不行. 这说明了控制器和视图没有问题,一定是模块的配置有问题,后来差一点要删除模块重新建了. 后来在模块的配置文件中,发现了原因,原因就是: <?php return array( //'配置项'=>'配置值' 'ACTION_SUFFIX' => 'Action', // 操作方法后缀 ); 这个妖精造成的,看来我还是不熟悉ACTION_SUFF

ThinkPHP的create方法的一系列操作

1.数据操作状态 create方法的第二个参数可以指定数据的操作状态,默认是自动判断的(写入[Model:MODEL_INSERT或者1].更新[Model:MODEL_UPDATE或者2].也可以自定义状态) 可以自己定义: $Member = M("User"); // 指定更新数据操作状态 $Member->create($_POST,3); 2.字段合法性过滤 如果在create方法之前调用field方法,则表示只允许创建指定的字段数据,其他非法字段将会被过滤,例如: $

MySQL ERROR 1005: Can&#39;t create table (errno: 150)的错误解决办法

在mysql 中建立引用约束的时候会出现MySQL ERROR 1005: Can't create table (errno: 150)的错误信息结果是不能建立 引用约束. 出现问题的大致情况 1.外键的引用类型不一样,主键是int外键是char 2.找不到主表中 引用的列 3.主键和外键的字符编码不一致 4.还有要建立外键的话,要先建立索引.没有建立索引也会出错. MySQL ERROR 1005: Can't create table (errno: 150)的错误解决办法

IE8下String的Trim()方法失效的解决方法

String的Trim()方法失效,在ie8下是有这样的情况的,解决方法也很简单使用$.trim(str)即可,需要的朋友可以了解下 用jquery的trim()方法,$.trim(str)就可以了.

ThinkPHP:create()方法有什么用呢?

1.create方法可以对POST提交的数据进行处理(通过表中的字段名称与表单提交的名称对应关系自动封装数据实例),例如user表中有一个字段名叫"username",如果表单中有一个<input name="username" value="小明">,那么$User = M('User'); $data = $User->create(); echo $data['username'];就会输出"小明",不

ThinkPHP的field方法的用法总结

ThinkPHP的连贯操作方法中field方法有很多的使用技巧,field方法主要目的是标识要返回或者操作的字段,下面详细道来. 1.用于查询 在查询操作中field方法是使用最频繁的. $Model->field('id,title,content')->select(); 这里使用field方法指定了查询的结果集中包含id,title,content三个字段的值.执行的SQL相当于: SELECT id,title,content FROM table 当然,除了select方法之外,所有