牛骨文教育服务平台(让学习变的简单)
博文笔记

thinkphp表单处理

创建时间:2015-05-09 投稿人: 浏览次数:257

使用create时,需要对是否创建数据对象进行判断。否则插入数据时会出错。判断如下:

if($User->create()){
            $result = $User->where($where)->save($data);  //写入到数据库 
             if ($result === FALSE) {
            echo "<script>alert("保存失败");location.href="../../index.php/Personal/coachupdate"</script>";
        } else {
            echo "<script>alert("保存成功");location.href="../../index.php/Personal/coachinfo"</script>";
        }


创建数据对象 create()

除了手动构造入库的数据集之外,ThinkPHP 还提供了自动创建数据对象的 create() 方法。create() 方法将自动收集提交的表单数据并创建数据对象而无需人工干预,这在表单数据字段非常多的情况下更具优势。

将前文写入表单数据的例子用 create() 来实现:

public function insert2(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = M("User");

    if($Dao->create()){
        $Dao->password = md5($_POST["password"]);
        $Dao->regdate = time();
        if($lastInsId = $Dao->add()){
            echo "插入数据 id 为:$lastInsId";
        } else {
            echo "数据写入错误!";
        }
    }else{
        exit($Dao->getError()." [ <a href="javascript:history.back()">返 回</a> ]");
    }
}

create() 创建数据对象后,将自动收集提交过来的表单数据。而表单数据可能需要经过一定加工(例如将密码加密)才能写入数据表,所以可以对数据对象的成员属性值根据进行修改或添加去除等。

提示:create() 创建的数据对象存放于内存,在执行入库动作(add() 或 save())之前,都可以进行修改。

在上面的例子里,create()方法 的行为和 date()方法 是一致。但 date() 方法只是简单的创建数据对象,但 create() 方法还具备:

  • 令牌验证
  • 数据自动验证
  • 字段映射支持
  • 字段类型检查
  • 数据自动完成

等各种高级的数据功能,要完成这些高级数据模型功能,需要使用 D方法 实例化数据模型。ThinkPHP 提供了各种验证与填充规则供调用,具体可参见《ThinkPHP 自动验证》与《ThinkPHP 自动填充》。

自动验证与自动填充

在将表单写入数据表之前,常常会有一些对数据的检测(提交的用户名是否符合要求)与处理(如例子中的密码加密以及取得当前时间戳)。create() 方法就支持数据的自动验证与自动完成。

在 LibModel 目录下创建 UserModel.class.php 文件(User 为创建的模型对象,也对应 前缀_user 表),加入自动验证和自动填充规则:

class UserModel extends Model{
    // 自动验证设置
    protected $_validate = array(
        array("username","require","用户名必须填写!",1),
        array("email","email","邮箱格式错误!",2),
        array("username","","用户名已经存在!",0,"unique",1),
    );
    //自动填充设置
    protected $_auto = array(
        array("regdate","time",self::MODEL_INSERT,"function"),
        array("password","md5",self::MODEL_INSERT,"function"),
    );
}

将 insert2 操作更改为:

public function insert2(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = D("User");

    if($Dao->create()){
        if($lastInsId = $Dao->add()){
            echo "插入数据 id 为:$lastInsId";
        } else {
            echo "数据写入错误!";
        }
    }else{
        exit($Dao->getError()." [ <a href="javascript:history.back()">返 回</a> ]");
    }
}
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。