2013-07-07 2 views
1

위생 처리에 문제가 있습니다. AppController에서 Sanitization 유틸리티를 사용하고 있지만 작동하지 않습니다. 업데이트를 요청할 때 ' 입력 한 내용이 슬래시로 인해 실패합니다. CakePHP 2.3.6을 사용하고 있습니다.CakePHP : 업데이트 중 데이터 삭제

function beforeFilter(){ 
    if(!empty($this->data)){ 
     App::uses('Sanitize', 'Utility'); 
     $this->request->data = Sanitize::clean($this->data, array('remove_html'=>true,'encode'=>false,'unicode'=>false,'backslash'=>true, 'escape'=>false)); 
    } 
} 

컨트롤러 코드 :

$this->ClientProfile->updateAll(
    array('ClientProfile.location'=>"'".$this->User->data['ClientProfile']['location']."'"), 
    array('ClientProfile.user_id'=>$userdata['id']) 
); 

어떤 아이디어?

+0

코드와 혼동이됩니다. '$ this-> User-> data'를 어디에서 얻을 수 있습니까?'$ this-> request-> data' 배열을 살 때 왜'$ this-> User-> data [etc]'를 사용합니까?)? 2) before 필터 안에'App :: uses'를 넣을 필요가 없습니다. 상단에 선언하면 유틸리티가 lazyloaded됩니다. – Nunser

+0

저장시 위생을하지 않는 것이 좋습니다. 규칙은 다음과 같습니다. "입력을 그대로두고 출력을 이스케이프 처리합니다." 따라서 문서화 된대로'h()'를 사용하여 결과물을 벗어나면됩니다 (새로운 참고 사항 @ http://book.cakephp.org/2.0/ko/core-utility-libraries/sanitize.html#Sanitize::html 참고). 너 괜찮을거야. – mark

+0

제 대답을 확인하십시오. 유용 할 경우 답변을 수락 된 것으로 설정하거나 투표에 답하십시오. 그렇지 않으면 답안에 빠진 내용이나 지금 다루고있는 문제는 무엇인지 작성하십시오. 그러면 도와 드리겠습니다. –

답변

0

Sanitize :: clean() 대신 Sanitize :: escape()를 사용해보십시오. 그것은, the documentation

살균 :: 탈출 쓰여으로()

은 문자열 SQL-안전을 만듭니다.

데이터 살균을 updateAll() 메서드 호출로 직접 이동할 수도 있습니다. 이렇게하면 updateAll() 메서드는 스크립트의 다른 부분에서이 데이터가 어떤 결과를 얻었는지에 관계없이 새 니타 이징 된 데이터를 얻게됩니다.

관련 문제