ThinkPHP字段映射要說明的問題

在上文中 用create()方法 能夠用name值和表中字段同樣的方式 直接獲得post方式過來的所有數據,

這樣會形成一個問題 就是 字段名和表單name同樣 很不安全啊javascript

所以 須要在model中作個字段映射,(model的命名必須和數據庫中要操做的代表同樣《模型名首字母大寫》)php

protected $_map=array(html

'title1'=>'title', //前面是表單的名字 映射到數據庫中的字段名字java

'neirong1'=>'neirong', //這裏是數值的最後一個值 純php中不要,而在thinkphp中 須要在最後一個也加一個,thinkphp

);數據庫

這樣即可以在action中 用D $news=D("news"); news是模型名字,去掉Model的....安全

要注意的是表單的字段名不能有點ide

要使用模型的自動建立create方法的話,ThinkPHP的表單名稱就是數據表的字段名稱,若是擔憂這樣不夠安全,能夠定義字段映射,來隱藏實際的數據表字段名稱。post

下面的例子就運用了字段映射定義。請注意看表單名稱和字段的對應關係。ui

標題:
郵箱:
內容:
驗證碼: ABCD

示例源碼

控制器IndexAction類


<?php
class IndexAction extends Action{
    // 首頁
    public function index(){
        $Form    = D("Form");
        $list    =    $Form->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().' [ <A HREF="javascript:history.back()">返 回</A> ]');
        }
    }
                          
    // 生成驗證碼
    public function verify() {
        import("ORG.Util.Image");
           Image::buildImageVerify();
    }
}
?>

很明顯,數據表名是form

模型 FormModel 類

<?php
class FormModel extends Model {
    protected $_map    =    array(
            'name'=>'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'];
    }
                       
}
?>
相關文章
相關標籤/搜索