고수님들 ㅠㅠ 포인트선물하기 기능인데 아이디가 아닌 휴대폰으로 하고싶습니다 채택완료
그누보드 기반인데 반는 아이디로 되어있는 상태야 내가 원하는건 그게 아니라 받는 아이디 대체 회원의 휴대폰번호 입력해서 회원조회후 포인트 선물되게 해줘 아래 는 현재 적용된 소스야
point_gift.skin.php
check_user.php
point_gift_update.php
common.js
// 전역 변수
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개
. . . 회원의 휴대폰 번호로 조회 후
포인트를 선물하는 로직에 대해 보안 및 안정성을 강화하고,
코드 중복 및 가독성을 개선하여, 코드를 최적화해 가세요.
- AI를 이용하시는 중이라면, 단번에 해결하기 어렵다는 점을 염두에 두시고
계획적이고 세부적인 프롬프트를 점진적으로 작성/검증/실행하시면 해결되실 것입니다.
1. "point_gift.skin.php"
- 사용자 입력값에 대한 입력 유효성 검사 추가.
- isset()과 empty()혼용 사용 제거.
- 리다이렉트 시 header() 사용을 더 안전한 방식으로 개선.
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 상태 코드 설정.
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 응답을 반환하도록 개선.
// 로그 테이블 업데이트 예제
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 요청 에러 처리 개선.
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 타겟으로 바꿔보세요.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인