checkboxradio, select 폼 코딩을 할 때 귀찮고 코드가 길어지는 게 수정할 때다. 현재 DB에 들어있는 값을 선택된 상태로 수정 화면을 출력해 줘야 하기 때문이다.

내가 만든 attr_checked()attr_selected() 함수를 사용하면 상대적으로 편해진다.

사용법

<?php attr_selected($form_value, $db_value); ?>
<?php attr_checked($form_value, $db_value, true); ?>

아래는 사용 예시다.

<select name="회원구분">
    <option value="정회원" <?php attr_selected('정회원', $row[회원구분])?>></option>
    <option value="준회원" <?php attr_selected('준회원', $row[회원구분], true)?>></option>
</select>

attr_selected()attr_checked() 함수 모두 사용법이 같다. 출력해 주는 값이 selectedchecked냐 하는 차이만 있다.

파라미터

  • $form_value
    (string) (required) 현재 option이나 radio, checkbox의 값.
  • $db_value
    (string|array) (required) DB에 들어있는 값. 복수선택된 checkbox인 경우엔 값을 배열로 넘기면 된다.
  • $default (bool) (optional) 이게 true$db_value가 빈 값(empty($db_value))일 때 checked를 출력. 기본값은 false

함수 코드

/**
 * input:checkbox나 input:radio 에서 값을 비교해 checked를 출력.
 * @param  string       $form_value 현재 input의 value
 * @param  string|array $db_value DB에 저장된 값 혹은 값들의 배열
 * @param  boolean      $default 이게 true면, $db_value가 빈 값일 때 checked를 출력
 * @return boolean
 */
function attr_checked($form_value, $db_value, $default = false){
    if($default and empty($db_value)){
        echo 'checked';
    }else if(is_equal_or_in($form_value, $db_value)){
        echo 'checked';
    }
}

/**
 * selectbox 에서 값을 비교해 selected를 출력.
 * @param  string       $form_value 현재 select > option의 value
 * @param  string|array $db_value DB에 저장된 값 혹은 값들의 배열
 * @param  boolean $default 이게 true면, $db_value가 빈 값일 때 selected를 출력
 * @return boolean
 */
function attr_selected($form_value, $db_value, $default = false){
    if($default and empty($db_value)){
        echo 'selected';
    }else if(is_equal_or_in($form_value, $db_value)){
        echo 'selected';
    }
}

/**
 * input:checkbox, input:radio, select 에서, 현재 값을 표시해 줄 때, 현재 값이 저장된 값과 같은지 
 * 혹은 저장된 값들 중에 포함돼 있는지(checkbox의 경우) 확인하는 함수.
 * HTML 길이를 줄이기 위해 만든 거다.
 * @param  string       $form_value 현재 input의 value
 * @param  string|array $db_value DB에 저장된 값 혹은 값들의 배열
 * @return boolean
 */
function is_equal_or_in($form_value, $db_value){
  if(is_array($db_value)){
    return in_array($form_value, $db_value);
  }else{
    return $form_value == $db_value;
  }
}