这样会造成一个问题 就是 字段名和表单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'];
}
}
?>