thinkPHP自动验证无效,没有报错
来源:互联网 发布:淘宝五金冠店铺多少钱 编辑:程序博客网 时间:2024/06/18 07:04
thinkPHP自动验证无效,或者验证的时候没有提示。出现这样的问题就让我们来看看model类里的自动验证函数。
先来看看自动验证的使用问题。模型
控制器
定义好了,提交自动验证就OK了。
但是有的时候却会出现一些问题导致验证不成功或者失效。如果出现这类问题,我们需要先保证你的验证规则必须正确。
没有问题这里我们就需要去到核心类库里的model类看看。
#824的create方法里
public function create($data='',$type='') { // 如果没有传值默认取POST数据 if(empty($data)) { $data = I('post.'); }elseif(is_object($data)){ $data = get_object_vars($data); } // 验证数据 if(empty($data) || !is_array($data)) { $this->error = L('_DATA_TYPE_INVALID_'); return false; } // 状态 $type = $type?$type:(!empty($data[$this->getPk()])?self::MODEL_UPDATE:self::MODEL_INSERT); // 检查字段映射 if(!empty($this->_map)) { foreach ($this->_map as $key=>$val){ if(isset($data[$key])) { $data[$val] = $data[$key]; unset($data[$key]); } } } // 检测提交字段的合法性 if(isset($this->options['field'])) { // $this->field('field1,field2...')->create() $fields = $this->options['field']; unset($this->options['field']); }elseif($type == self::MODEL_INSERT && isset($this->insertFields)) { $fields = $this->insertFields; }elseif($type == self::MODEL_UPDATE && isset($this->updateFields)) { $fields = $this->updateFields; } if(isset($fields)) { if(is_string($fields)) { $fields = explode(',',$fields); } // 判断令牌验证字段 if(C('TOKEN_ON')) $fields[] = C('TOKEN_NAME'); foreach ($data as $key=>$val){ if(!in_array($key,$fields)) { unset($data[$key]); } } } // 数据自动验证 if(!$this->autoValidation($data,$type)) return false; // 表单令牌验证 if(!$this->autoCheckToken($data)) { $this->error = L('_TOKEN_ERROR_'); return false; } // 验证完成生成数据对象 if($this->autoCheckFields) { // 开启字段检测 则过滤非法字段数据 $fields = $this->getDbFields(); foreach ($data as $key=>$val){ if(!in_array($key,$fields)) { unset($data[$key]); }elseif(MAGIC_QUOTES_GPC && is_string($val)){ $data[$key] = stripslashes($val); } } } // 创建完成对数据进行自动处理 $this->autoOperation($data,$type); // 赋值当前数据对象 $this->data = $data; // 返回创建的数据以供其他调用 return $data; }
这里查看一下返回false的各个地方
这里有个字段映射问题,如果你的提交表单数据和数据表的字段完全不一样,且你又没有设置字段映射,那么经过下面这段代码
if($this->autoCheckFields) { // 开启字段检测 则过滤非法字段数据 $fields = $this->getDbFields(); foreach ($data as $key=>$val){ if(!in_array($key,$fields)) { unset($data[$key]); }elseif(MAGIC_QUOTES_GPC && is_string($val)){ $data[$key] = stripslashes($val); } } }
过滤后,你的create方法最终还是返回false,所以明明格式都是对的,提交却还是不能通过的原因。
开启表单令牌后,会验证表单令牌,不通过会有提示令牌错误。
0 0
- thinkPHP自动验证无效,没有报错
- ThinkPHP 自动验证与自动填充无效可能的原因
- ThinkPHP 自动验证与自动填充无效可能的原因
- ThinkPHP 自动验证与自动填充无效可能的原因
- thinkphp 自动验证
- thinkphp 验证 自动填充
- ThinkPHP 自动验证
- Thinkphp 自动验证
- thinkphp自动验证相关
- Thinkphp自动验证
- thinkphp自动验证
- ThinkPHP 自动验证
- ThinkPHP 自动验证
- thinkphp中的自动验证
- ThinkPHP中自动验证
- thinkPHP 自动验证
- thinkphp自动验证---$_validate
- Thinkphp 模型->自动验证
- 获取硬盘序列号,computerID,硬盘名称等 win7
- JavaMail邮件发送-发送一个文本邮件和一些问题说明
- NSDate
- C#访问数据库2
- JavaMail邮件发送-发送非纯文本邮件
- thinkPHP自动验证无效,没有报错
- JavaMail邮件发送-为你的邮件增加背景音乐和背景图片
- JavaMail邮件发送-发送带附件的邮件
- JavaMail邮件发送-将邮件保存到本地和发送一封本地邮件
- 代码如水
- elasticsearch之gateway模块
- 使用 JdbcTemplate 动态创建表并添加数据
- 计算机视觉(目标检测)的一些相关代码和数据库
- 使用 JdbcTemplate 动态创建表并添加数据 动态连表查询