2026, 새로운 도약을 시작합니다.

list.php 조건문 문의드립니다. 채택완료

8개월 전 조회 3,087

안녕하세요.

board.php?bo_table=board1&filter=lv4 를 클릭하면 레벨4 회원이 작성한 게시물만 랜덤으로나오게

board.php?bo_table=board1&filter=lv3_4 를 클릭하면 레벨3,4 회원이 작성한 게시물만 랜덤으로나오게

board.php?bo_table=board1&filter=my 를 클릭하면 레벨상관없이 로그인한 회원이 작성한 게시물이 나오게
최고관리자는 위 어떤 링크를 눌러도 모든 게시물이 나오게 하려 하고 싶습니다.
board1 게시판 한정이구요..

아래는 bbs/list.php 소스입니다.

Copy




if ($bo_table === 'board1') {

    // 필터링 로직

    $filter = isset($_GET['filter']) ? $_GET['filter'] : '';

    // 비회원이 'my' 버튼을 클릭했을 때 처리 (비회원은 게시물 출력 안 됨)

    if (!$is_member && $filter === 'my') {

        $sql_search .= " AND 1=0 "; // 비회원은 게시물을 출력하지 않음

    }

    // 로그인한 사용자의 게시물만 출력 (my 필터)

    if ($filter === 'my' && $is_member) {

        $sql_search .= " AND mb_id = '{$member['mb_id']}' "; // 로그인한 사용자만 필터링

    } 

    // 레벨 4 사용자만 작성한 게시물 (lv4 필터)

    elseif ($filter === 'lv4') {

        // g5_member 테이블에서 레벨 4인 사용자들의 mb_id만 가져옴

        $sql_search .= " AND mb_id IN (SELECT mb_id FROM g5_member WHERE mb_level = 4) ";

        $sql_order = " RAND() "; // 랜덤 정렬

    } 

    // 레벨 3과 4 사용자만 작성한 게시물 (lv3_4 필터)

    elseif ($filter === 'lv3_4') {

        // g5_member 테이블에서 레벨 3 또는 4인 사용자들의 mb_id만 가져옴

        $sql_search .= " AND mb_id IN (SELECT mb_id FROM g5_member WHERE mb_level IN (3, 4)) ";

        $sql_order = " RAND() "; // 랜덤 정렬

    }

    // 최고 관리자는 모든 게시물 출력 (super admin)

    if ($is_admin == 'super') {

        $sql_search = ""; // 필터링을 제거

    }

}



if ($is_search_bbs) {

    $sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";

} else {

    $sql = " select * from {$write_table} where wr_is_comment = 0 ";

    if(!empty($notice_array))

        $sql .= " and wr_id not in (".implode(', ', $notice_array).") ";

    $sql .= " {$sql_order} limit {$from_record}, $page_rows ";

}

현재 lv4,lv3_4 를 클릭하면 아무게시물도 안나오고요..ㅠ

my를 클릭하면 누구나 다 전체 게시물이 나옵니다..ㅠ

더 중요한건

board1&filter=adsf

이렇게 필터명을 아무거나 치면 전체 게시물이 나옵니다.

어느부분이 잘못됐는지 고수님들의 고견 부탁드리옵니다...

답변 2개

채택된 답변
+20 포인트

저렇게만 해서는 안되고

1. if ($sca || $stx || $stx === '0' || $filrer) {     //검색이면 <===이 조건안에 넣어서 페이지 계산이 되도록 해야 합니다

2. if( !isset($filter) ) $filter=''; 1번 위쪽에 추가

3. 기존  $sql_search 다음에 위 코드를 넣으세요

4.  $qstr .= '&amp;filter=' . $filter; 구문을 filter값이 있을 때 적용 되도록 추가하세요

======================================

 my를 클릭하면 누구나 다 전체 게시물 / 

더 중요한건 board1&filter=adsf 이렇게 필터명을 아무거나 치면 전체 게시물

<==이유는 이런 조건이 전혀 적용되지않기 때문입니다

if($is_search_bbs) <==이 조건이 true가 되어야 적용될텐데 이 값이 설정되는 곳

즉 위 1번 조건문 내에 있지않으니 $is_search_bbs 값이 false이기 때문

==================

filter조건이 쿼리에 적용 되는지 확인은 스킨상단에서 echo $sql;을 넣어서 확인

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

각 상황별로 $sql_search 에 값이 어떻게 들어가나요?

그것을 우선 확인해보셔야할듯하네요.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고