在上文中 用create()方法 可以用name值和表中字段一样的方式 直接得到post方式过来的全部数据,

这样会造成一个问题 就是 字段名和表单name一样 很不安全啊

因此 需要在model中做个字段映射,(model的命名必须和数据库中要操作的表明一样《模型名首字母大写》)

protected $_map=array(

'title1'=>'title', //前面是表单的名字 映射到数据库中的字段名字

'neirong1'=>'neirong', //这里是数值的最后一个值 纯php中不要,而在thinkphp中 需要在最后一个也加一个,

);

这样便可以在action中 用D $news=D("news"); news是模型名字,去掉Model的....

要注意的是表单的字段名不能有点

要使用模型的自动创建create方法的话,ThinkPHP的表单名称就是数据表的字段名称,如果担心这样不够安全,可以定义字段映射,来隐藏实际的数据表字段名称。

下面的例子就运用了字段映射定义。请注意看表单名称和字段的对应关系。

标题:
邮箱:
内容:
验证码: ABCD

示例源码

控制器IndexAction类


findAll();
        $this->assign('list',$list);
        $this->display();
    }
    // 处理表单数据
    public function insert() {
        $Form    =    D("Form");
        if($Form->create()) {
            $Form->add();
            $this->redirect();
        }else{
            header("Content-Type:text/html; charset=utf-8");
            exit($Form->getError().' [ 返 回 ]');
        }
    }
                          
    // 生成验证码
    public function verify() {
        import("ORG.Util.Image");
           Image::buildImageVerify();
    }
}
?>

很明显,数据表名是form

模型 FormModel 类

'title',//前面是表单里面的后面是数据表里面的
            'mail'=>'email',
            'remark'=>'content',
        );
    // 自动验证设置
    protected $_validate     =     array(
        array('name','require','标题必须!'),
        array('mail','email','邮箱格式错误!',2),
        array('remark','require','内容必须'),
        array('verify','require','验证码必须!'),
        array('verify','CheckVerify','验证码错误',0,'callback'),
        );
                       
    // 自动填充设置
    protected $_auto     =     array(
        array('status','1','ADD'),
        array('create_time','time','ADD','function'),
        );
                       
    public function CheckVerify() {
        return md5($_POST['verify']) == $_SESSION['verify'];
    }
                       
}
?>