그누보드4 아이디 변경 함수 - 모든 테이블의 아이디를 변경

munilive
Written by munilive on (Updated: )

그누보드 사용시 아이디값을 이메일등으로 사용하거나 아이디를 변경하게 하도록 하는 사이트들이 존재 한다.
그누보드에서는 아이디 값이 게시판테이블에서나 포인트등 에서 회원을 구분하는 유일한 키값으로 사용하기에 아이디가 변경되면 관련된 모든 테이블의 아이디를 변경해줘야 아이디를 변경한 회원이 이전에 사용하던 내역을 함께 변경하여 관리 할 수 있다.

아래 함수는 그누보드에서 기본적으로 제공되는 테이블만 모아 아이디(mb_id)를 변경할 경우에 함수 호출 한번으로 모든 DB 테이블의 mb_id 값을 원하는 값으로 변경한다.

//아이디를 변경처리 합니다.
function changeMemberID($mb_id, $new_mb_id) {
    global $g4, $member;

    $mb = get_member($mb_id);

    if(empty($mb['mb_id'])) return false;

    //회원테이블 아이디 변경
    $sql_update = " UPDATE {$g4['member_table']} SET mb_id = '{$new_mb_id}' WHERE mb_id = '{$mb_id}' ";
    sql_query($sql_update);
    //관리권한테이블
    $sql_update = " UPDATE {$g4['auth_table']} SET mb_id = '{$new_mb_id}' WHERE mb_id = '{$mb_id}' ";
    sql_query($sql_update);
    //그룹테이블
    $sql_update = " UPDATE {$g4['group_table']} SET gr_admin = '{$new_mb_id}' WHERE gr_admin = '{$mb_id}' ";
    sql_query($sql_update);
    //그룹멤버테이블
    $sql_update = " UPDATE {$g4['group_member_table']} SET mb_id = '{$new_mb_id}' WHERE mb_id = '{$mb_id}' ";
    sql_query($sql_update);
    //게시판설정테이블
    $sql_update = " UPDATE {$g4['board_table']} SET bo_admin = '{$new_mb_id}' WHERE bo_admin = '{$mb_id}' ";
    sql_query($sql_update);
    //추천/비추천 테이블
    $sql_update = " UPDATE {$g4['board_good_table']} SET mb_id = '{$new_mb_id}' WHERE mb_id = '{$mb_id}' ";
    sql_query($sql_update);
    //새글관리 테이블
    $sql_update = " UPDATE {$g4['board_new_table']} SET mb_id = '{$new_mb_id}' WHERE mb_id = '{$mb_id}' ";
    sql_query($sql_update);
    //로그인테이블
    $sql_update = " UPDATE {$g4['login_table']} SET mb_id = '{$new_mb_id}' WHERE mb_id = '{$mb_id}' ";
    sql_query($sql_update);
    //메모테이블
    $sql_update = " UPDATE {$g4['memo_table']} SET me_recv_mb_id = '{$new_mb_id}' WHERE me_recv_mb_id = '{$mb_id}' ";
    sql_query($sql_update);
    $sql_update = " UPDATE {$g4['memo_table']} SET me_send_mb_id = '{$new_mb_id}' WHERE me_send_mb_id = '{$mb_id}' ";
    sql_query($sql_update);
    //게시판스크랩
    $sql_update = " UPDATE {$g4['scrap_table']} SET mb_id = '{$new_mb_id}' WHERE mb_id = '{$mb_id}' ";
    sql_query($sql_update);

    //투표테이블
    $sql = " SELEcT * FROM {$g4['poll_table']} ";
    $qey_result = sql_query($sql);
    while($row = sql_fetch_array($qey_result)) {
        $po_id = $row['po_id'];
        $poll_mb_ids = preg_replace("/{$mb_id}}/", $new_mb_id, $row['mb_ids']);
        $sql_update = " UPDATE {$g4['poll_table']} SET mb_ids = '{$poll_mb_ids}' WHERE po_id = '{$po_id}' ";
        sql_query($sql_update);
    }

    //투표기타의견 테이블
    $sql_update = " UPDATE {$g4['poll_etc_table']} SET mb_id = '{$new_mb_id}' WHERE mb_id = '{$mb_id}' ";
    sql_query($sql_update);

    //포인트테이블
    $sql_update = " UPDATE {$g4['point_table']} SET mb_id = '{$new_mb_id}' WHERE mb_id = '{$mb_id}' ";
    sql_query($sql_update);
    $sql_update = " UPDATE {$g4['point_table']} SET po_rel_id = '{$new_mb_id}' WHERE po_rel_id = '{$mb_id}' ";
    sql_query($sql_update);

    //등록되어있는 모든 게시판
    $sql = " SELECT * FROM {$g4['board_table']} ";
    $qey_result = sql_query($sql);
    while($row = sql_fetch_array($qey_result)) {
        $table_name = $g4['write_prefix'].$row['bo_table'];

        $sql_update = " UPDATE {$table_name} SET mb_id = '{$new_mb_id}' WHERE mb_id = '{$mb_id}' ";
        sql_query($sql_update);
    }

    return true;
}

그누보드 4.36.27 버전을 기준으로 작성되었다.

Comments

comments powered by Disqus