Config_model.php > meta_update() 의 empty() 함수의 문제
CIBOARD 처음써보는데 좋네요~!!
한가지 버그를 발견하여 적습니다.
관리자 메뉴에서 설정값들은 cb_config 테이블에 저장되어 지는데요. 0인 값을 제대로 저장하지 못합니다.
원인을 찾아보니 저장될 값들은 Config_model.php 의 meta_update() 함수를 거치는데
$old_value = $this->item($column);
if (empty($value)) {
$value = '';
}
이 부분이 문제가 됩니다.
아마 null 인 값들을 '' 로 치환해주는게 목적인 것 같은데
empty() 함수는 null, 공백문자열 외에도 0 또한 true를 반환합니다. 따라서 $value에 0이 넘어온다면 '' 로 바꿔버립니다.
이로 인해 관리자에서 0으로 설정된 값이 있는 상태에서 [저장하기]를 누르면 '' 로 저장이 되고 다시 불러올 때에는 Non-numeric PHP Warning 문구가 나타납니다.
저는 [회원가입 설정]-[로그인] 탭의 "비밀번호갱신주기"를 0으로 변경하고 저장하였더니 위와 같은 문제가 발생하였고,
다른 값 들도 0으로 변경해보니 전체적으로 동일한 문제가 발생했습니다.
empty 함수는 0을 처리못하니 is_null() 이나 isset() 함수를 이용하여 null, undefined 예외를 처리하는게 좋을 것 같습니다.
테스트환경: Ubuntu 16.04 LTS / Apache 2.4 / PHP 7.2 / MariaDB