正常的表單提交會把所有的表單數據提交上來
$data = $_POST; print_r($data);exit;
結果
Array ( [status] => 1 [comment] => 啊啊啊 [id] => 16 [submit] => 提交 )
而用create()方法處理,
$data = $userApplicantsModel->create(); // 把無用的都顧慮掉了 print_r($data);exit;
結果
Array ( [status] => 1 [comment] => 啊啊啊 [id] => 16 )
只留下跟數據表相關的字段
這樣就可以處理數據到數據庫了,省心
全部代碼
/**** 商戶申請審核 ****/ public function checkApplicants(){ $id = $this->_request('id','trim',0); $userApplicantsModel = M('User_applicants'); $applicantsData = $userApplicantsModel->where(array('id'=>$id))->find(); if(is_null($applicantsData)){ $this->error('記錄不存在'); } if($this->_post('submit','isset')){ // 判斷表單提交 $data = $userApplicantsModel->create(); // 把無用的都顧慮掉了$res = $userApplicantsModel->save($data); if($res!==false){ // 操作成功 $this->success('修改成功!', U('User/applicants')); } }else{ $this->assign('data', $applicantsData); $this->display(); } }
追蹤到源代碼,如下
/** * 創建數據對象 但不保存到數據庫 * @access public * @param mixed $data 創建數據 * @param string $type 狀態 * @return mixed */ public function create($data='',$type='') { // 如果沒有傳值默認取POST數據 if(empty($data)) { $data = $_POST; }elseif(is_object($data)){ $data = get_object_vars($data); } // 驗證數據 if(empty($data) || !is_array($data)) { $this->error = L('_DATA_TYPE_INVALID_'); return false; } // 檢查字段映射 $data = $this->parseFieldsMap($data,0); // 狀態 $type = $type?$type:(!empty($data[$this->getPk()])?self::MODEL_UPDATE:self::MODEL_INSERT); // 檢測提交字段的合法性 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); } foreach ($data as $key=>$val){ if(!in_array($key,$fields)) { unset($data[$key]); } } } // 數據自動驗證 if(!$this->autoValidation($data,$type)) return false; // 表單令牌驗證 if(C('TOKEN_ON') && !$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; }
這里有個過濾非法字段功能,估計跟它有關系