急求解TP中添加了自动映射时,表单字段无法进行自动验证的原因?
thinkphp吧
全部回复
仅看楼主
level 2
HelloCRSir 楼主
这是我的模板代码:
<form action="__ACTION___post" method="post">
用户名:<input type="text" name="username" /><br />
密码:<Input type="password" name="password" /><br />
密码重复:<input type="password" name="notepassword" /><br />
E-mail:<input type="text" name="email" /><br />
<input type="submit" value="submit" />
</form>
这是我的Action代码
public function index_post() {
$_user = D('User');
if($_user->create()) {
if($_user->add()) {
$this->success('添加成功');
}else{
$this->error('添加失败');
}
}else{
$this->error($_user->getError());
}
}
这是我的model代码:
class UserModel extends Model {
protected $_validate = array(
array('username','require','用户名必须存在!!!'),
array('username','checklen','用户名长度不正确',0,'callback',1),
array('password','require','密码不能为空',1,'regex',1),
array('password','notepassword','密码和密码重复必须一致',1,'confirm',1),
array('email','email','Email格式不正确',2,'regex',1)
);
protected $_map = array(
'username'=>'name',
);
public function checklen($_string) {
if (strlen($_string) < 3 || strlen($_string) > 30) {
return false;
}else {
return true;
}
}
}
这是数据库结构
恳请各位帮帮忙,为什么我写了字段映射了以后,
protected $_map = array(
'username'=>'name',
);
对于
array('username','require','用户名必须存在!!!'),
array('username','checklen','用户名长度不正确',0,'callback',1),
就无效了,
但当把上面的改为
array('name','require','用户名必须存在!!!'),
array('name','checklen','用户名长度不正确',0,'callback',1),
它又有效了,我用的是ThinkPHP3.0,
现在出现这样的结果把我的头都搞大了,真不知道为什么,请大家帮帮忙了,谢谢!!

2012年07月31日 14点07分 1
level 1
字段映射就不说先,在你没有使用字段映射的话,你模板中的用户名为username,但数据库表中的却是name,你是没有办法正常使用create的吧,一般枪口下两者要一致是不??
难道你真的可以插入数据了,那你就教教我怎么办到的!!
2012年08月01日 12点08分 2
level 1
你那样做也不是不可以,使用字段映射,如上所说,因为模板中的名称比如username如果不使用字段映射的话数据库表中与之对应的字段名称也为username,这说明什么?这说明黑客可以通过浏览器查看表单源代码来了解你数据库中的信息,也就是你数据库中的字段有哪些,叫
什么名字等,这样就不安全了,所以使用字段映射,使用字段映射之后,模板中的名称就不会
与数据库中字段的名称一一对应,不良分子就不会猜到数据库信息,已达到提高安全的目的!!
2012年08月01日 12点08分 3
level 5
为什么我的$user->create() 判定的时候 是假的。if($user->create()) 老判定为错。求解
2014年05月19日 15点05分 5
1