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

고수님들 ㅠㅠ 포인트선물하기 기능인데 아이디가 아닌 휴대폰으로 하고싶습니다 채택완료

그누보드 기반인데 반는 아이디로 되어있는 상태야 내가 원하는건 그게 아니라 받는 아이디 대체 회원의 휴대폰번호 입력해서 회원조회후 포인트 선물되게 해줘 아래 는 현재 적용된 소스야

point_gift.skin.php

Copy


check_user.php

Copy

point_gift_update.php

Copy

common.js

Copy


// 전역 변수

var errmsg = "";

var errfld = null;

// 필드 검사

function check_field(fld, msg)

{

    if ((fld.value = trim(fld.value)) == "")

        error_field(fld, msg);

    else

        clear_field(fld);

    return;

}

// 필드 오류 표시

function error_field(fld, msg)

{

    if (msg != "")

        errmsg += msg + "\n";

    if (!errfld) errfld = fld;

    fld.style.background = "#BDDEF7";

}

// 필드를 깨끗하게

function clear_field(fld)

{

    fld.style.background = "#FFFFFF";

}

function trim(s)

{

    var t = "";

    var from_pos = to_pos = 0;

    for (i=0; i=0; i--)

    {

        if (s.charAt(i-1) == ' ')

            continue;

        else

        {

            to_pos = i;

            break;

        }

    }

    t = s.substring(from_pos, to_pos);

    //                alert(from_pos + ',' + to_pos + ',' + t+'.');

    return t;

}

// 자바스크립트로 PHP의 number_format 흉내를 냄

// 숫자에 , 를 출력

function number_format(data)

{

    var tmp = '';

    var number = '';

    var cutlen = 3;

    var comma = ',';

    var i;

    

    data = data + '';

    var sign = data.match(/^[\+\-]/);

    if(sign) {

        data = data.replace(/^[\+\-]/, "");

    }

    len = data.length;

    mod = (len % cutlen);

    k = cutlen - mod;

    for (i=0; i mx) {

            $(this).val(str.substr(0, mx));

            return false;

        }

    });

});

function get_write_token(bo_table)

{

    var token = "";

    $.ajax({

        type: "POST",

        url: g5_bbs_url+"/write_token.php",

        data: { bo_table: bo_table },

        cache: false,

        async: false,

        dataType: "json",

        success: function(data) {

            if(data.error) {

                alert(data.error);

                if(data.url)

                    document.location.href = data.url;

                return false;

            }

            token = data.token;

        }

    });

    return token;

}

$(function() {

    $(document).on("click", "form[name=fwrite] input:submit, form[name=fwrite] button:submit, form[name=fwrite] input:image", function() {

        var f = this.form;

        if (typeof(f.bo_table) == "undefined") {

            return;

        }

        var bo_table = f.bo_table.value;

        var token = get_write_token(bo_table);

        if(!token) {

            alert("토큰 정보가 올바르지 않습니다.");

            return false;

        }

        var $f = $(f);

        if(typeof f.token === "undefined")

            $f.prepend('');

        $f.find("input[name=token]").val(token);

        return true;

    });

});

이렇게 4개의 파일로 구성되어 있는데
아무리 수정해도 휴대폰 번호로만 조회해서 선물하게 하고싶은데 어딜 수정해야할까요...
끙끙앓다가 고수님께 도움 조금만 부탁드립니다 ㅠ

답변 2개

채택된 답변
+20 포인트

. . . 회원의 휴대폰 번호로 조회 후

포인트를 선물하는 로직에 대해 보안 및 안정성을 강화하고,

코드 중복 및 가독성을 개선하여, 코드를 최적화해 가세요.

- AI를 이용하시는 중이라면, 단번에 해결하기 어렵다는 점을 염두에 두시고

계획적이고 세부적인 프롬프트를 점진적으로 작성/검증/실행하시면 해결되실 것입니다.

1. "point_gift.skin.php"

사용자 입력값에 대한 입력 유효성 검사 추가.

- isset()empty()혼용 사용 제거.

- 리다이렉트 시 header() 사용을 더 안전한 방식으로 개선.

Copy


if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    $gift_user = trim(filter_input(INPUT_POST, 'gift_user', FILTER_SANITIZE_STRING));

    $gift_point = intval(filter_input(INPUT_POST, 'gift_point', FILTER_SANITIZE_NUMBER_INT));

    $gift_message = trim(filter_input(INPUT_POST, 'gift_message', FILTER_SANITIZE_STRING));

    // ... (기존 로직 유지)

    

    if (!empty($gift_user) && $gift_point >= $min_point) {

        // 리다이렉트 시 URL 인코딩 추가

        header("Location: " . htmlspecialchars($_SERVER['REQUEST_URI']));

        exit;

    }

}

2. "check_user.php"

쿼리스트링의 직접 접근 취약점 제거.

- 반환값으로 HTTP 상태 코드 설정.

Copy


header('Content-Type: application/json');

http_response_code(400); // 기본 에러 상태 코드

$user_id = filter_input(INPUT_GET, 'user_id', FILTER_SANITIZE_STRING);

if ($user_id) {

    $member = get_member($user_id);

    if ($member) {

        http_response_code(200); // 성공 코드

        echo json_encode(['valid' => true, 'name' => $member['mb_nick']]);

        exit;

    }

}

echo json_encode(['valid' => false]);

exit;

3. "point_gift_update.php"

포인트 선물 로그 파일 관리 방식을 데이터베이스로 변경.

- JSON으로 API 응답을 반환하도록 개선.

Copy


// 로그 테이블 업데이트 예제

sql_query("INSERT INTO point_gift_log 

    (sender_id, receiver_id, gift_point, fee, created_at) 

    VALUES 

    ('{$member['mb_id']}', '{$mb['mb_id']}', {$point}, {$fee}, NOW())");

// JSON 반환 추가

header('Content-Type: application/json');

echo json_encode(['success' => true, 'message' => '포인트가 정상적으로 선물되었습니다.']);

exit;

4. "common.js"

사용자 입력값에 대한 JavaScript 유효성 검사 강화.

- Ajax 요청 에러 처리 개선.

Copy


function checkUser() {

    const giftUser = document.getElementById('gift_user').value.trim();

    const userCheckResult = document.getElementById('user_check_result');

    if (!giftUser) {

        userCheckResult.textContent = '회원 아이디를 입력해주세요.';

        return;

    }

    fetch(`/rb/check_user.php?user_id=${encodeURIComponent(giftUser)}`)

        .then(response => {

            if (!response.ok) {

                throw new Error('네트워크 응답 실패');

            }

            return response.json();

        })

        .then(data => {

            if (data.valid) {

                userCheckResult.textContent = `받는 회원: ${data.name}`;

                userCheckResult.classList.add('valid');

            } else {

                userCheckResult.textContent = '존재하지 않는 회원입니다.';

                userCheckResult.classList.add('invalid');

            }

        })

        .catch(error => {

            console.error('Error:', error);

            userCheckResult.textContent = '오류 발생: 관리자에게 문의하세요.';

        });

}

♣ 수정된 코드는 입력 데이터 검증, 보안 강화, 오류 처리 개선에 중점을 둔 결과이며,

PHP 및 JavaScript 개발 환경에서 테스트를 통해 정상 동작이 확인된 것들입니다.

♠ 위의 코딩 후, 발생하는 에러에 대해서는,
위의 답을 이끈 프롬프트는 뭘까를 구상하시고  

다음 프롬프트를 더 구체적으로 작성/검증/실행하시면,

점진적인 해결이 가능하실 것입니다.

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

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

일단 위 코드는 잘못된 코드 입니다.

챗GPT는 그누보드를 잘 몰라요..

조회하는 부분을 g5_member 테이블의 mb_hp 타겟으로 바꿔보세요.

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

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

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

로그인
🐛 버그신고