채택완료

코드 문의 드립니다.

안녕하세요. 고수님들

메인페이지에 qa게시판의 제목과 내용 일부를 출력하려고 하는데 ai가 알려준 아래 코드로 적용하면 무조건 *표시로 됩니다.
혹시 어느 부분에 오류가 있을까요?

Copy
$is_qa_board = false;
            if (strpos($vlt_href, 'bo_table=qa') !== false || (isset($bo_table) && $bo_table == 'qa')) {
                $is_qa_board = true;
            }

            if ($is_qa_board && isset($list[$i]['wr_id'])) {
                // DB에서 원본 글 데이터(작성자, 내용) 직접 조회 (비밀글 원문 확보용)
                $tmp_write = sql_fetch(" select mb_id, wr_content from {$g5['write_prefix']}qa where wr_id = '{$list[$i]['wr_id']}' ");

                $writer_id = isset($tmp_write['mb_id']) ? $tmp_write['mb_id'] : '';
                $db_content = isset($tmp_write['wr_content']) ? cut_str(strip_tags($tmp_write['wr_content']), 80) : $raw_content;

                // 권한 체크 (최고관리자 또는 작성자 본인)
                $is_super_admin = (isset($is_admin) && ($is_admin == 'super' || $is_admin));
                $current_user_id = isset($member['mb_id']) ? $member['mb_id'] : '';
                $is_author = ($current_user_id !== '' && $writer_id !== '' && $current_user_id === $writer_id);

                if ($is_super_admin || $is_author) {
                    // 관리자나 작성자 본인이면 실제 작성 내용 출력
                    $vlt_content = ($db_content !== '') ? $db_content : '내용이 없습니다.';
                } else {
                    // 일반 회원이나 방문자에게는 * 표 출력
                    $vlt_content = '********************';
                }
            } else {
                // 질문답변이 아닌 다른 게시판(공지사항, 자유게시판 등)은 내용 그대로 출력
                $vlt_content = $raw_content;
            }


추워지는 날씨에 건강관리 잘 하시길 바랍니다.

감사합니다.
|

답변 3개 / 댓글 3개

채택된 답변
+20 포인트
스킨 상단(for 문 위)에 전역 선언 한 번 해보심이...

<?php
global $g5, $member, $is_admin;   // 최신글 스킨
?>
 

답변에 대한 댓글 1개

아..초초고수십니다....
덕분에 해결 되었습니다. 정말 고맙습니다.
Copy
$is_qa_board = (
    isset($list[$i]['bo_table']) &&
    $list[$i]['bo_table'] === 'qa'
);

if ($is_qa_board && !empty($list[$i]['wr_id'])) {

    $wr_id = (int) $list[$i]['wr_id'];
    $write_table = $g5['write_prefix'] . 'qa';

    $row = sql_fetch("
        SELECT mb_id, wr_content
        FROM {$write_table}
        WHERE wr_id = {$wr_id}
          AND wr_is_comment = 0
    ");

    $login_id = isset($member['mb_id'])
        ? (string) $member['mb_id'] : '';

    $writer_id = isset($row['mb_id'])
        ? (string) $row['mb_id'] : '';

    $is_super = isset($is_admin) &&
        $is_admin === 'super';

    $is_writer = $login_id !== '' &&
        $writer_id !== '' &&
        $login_id === $writer_id;

    if ($is_super || $is_writer) {
        $content = isset($row['wr_content'])
            ? $row['wr_content'] : '';

        $content = preg_replace(
            '/\s+/u',
            ' ',
            strip_tags($content)
        );

        $vlt_content = $content !== ''
            ? cut_str(trim($content), 80)
            : '내용이 없습니다.';
    } else {
        $vlt_content = '********************';
    }

} else {
    $vlt_content = $raw_content;
}

답변에 대한 댓글 1개

댓글 감사합니다.
복사해서 붙여 넣기 해 보았는데요.. 관리자나 작성자에게도 그대로 *표로만 출력됩니다.
코드에는 이상이 없는 것 같은데요.. 뭐가 문제인지 모르겠어요..
아무튼 고맙습니다.

현재 코드에서는 관리자나 작성자 본인이 아니면 게시글의 공개 여부와 관계없이 무조건 ***로 출력하도록 되어 있습니다.

혹시 원하시는 게 일반 공개글의 내용 중 앞부분만 노출하고 나머지를 *** 처리하는 방식인가요?

앞에 20글자 정도 보여주고 *** 처리하는거면 이런식으로 작성할 수 있을 것 같습니다.

Copy
$is_qa_board = false;

if (strpos($vlt_href, 'bo_table=qa') !== false || (isset($bo_table) && $bo_table == 'qa')) {
    $is_qa_board = true;
}

if ($is_qa_board && isset($list[$i]['wr_id'])) {

    // DB에서 원본 글 내용 조회
    $wr_id = (int) $list[$i]['wr_id'];

    $tmp_write = sql_fetch("
        SELECT wr_content
        FROM {$g5['write_prefix']}qa
        WHERE wr_id = '{$wr_id}'
    ");

    // HTML 태그 제거 및 공백 정리
    $db_content = strip_tags($tmp_write['wr_content'] ?? '');
    $db_content = trim(preg_replace('/\s+/u', ' ', $db_content));

    // 앞 20글자만 노출
    $visible_length = 20;

    $vlt_content = mb_substr($db_content, 0, $visible_length, 'UTF-8');

    // 20글자를 초과하면 뒤에 *** 표시
    if (mb_strlen($db_content, 'UTF-8') > $visible_length) {
        $vlt_content .= '***';
    }

    if ($db_content === '') {
        $vlt_content = '내용이 없습니다.';
    }

} else {

    // 다른 게시판은 기존 내용 그대로 출력
    $vlt_content = $raw_content;

}

답변에 대한 댓글 1개

댓글 감사합니다.
관리자와 작성자에게는 내용이 보여지고 나머지는 *표시로만 출력되게 하려고 합니다. 질문을 잘못 올린 것 같습니다.

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