맴버 여분 필드에 db 저장 질문

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
맴버 여분 필드에 db 저장 질문

QA

맴버 여분 필드에 db 저장 질문

답변 2

본문

chatgpt랑 그누보드 질문 게시판 참조해서 이모티콘샵 기능을 만들고 있습니다.

 

 

g5_member 테이블에 emoticon1부터 emoticon20까지의 여분 필드를 생성했습니다.
예를 들어, 사용자가 emoticon1을 구매하면 해당 이모티콘의 가격만큼 포인트가 차감되고,

emoticon1 필드에 숫자 1을 넣어서 구매한 이모티콘과 구매하지 않은 이모티콘을 구별하려고 합니다.

포인트 차감 부분은 문제없이 동작하지만 여분 필드에 숫자가 들어가지 않습니다.
무엇이 문제일까요?

 

 

 


            <?php
            $emojis = [
                ["id" => "emoticon1", "image" => "emoji1.png", "price" => 50],
                ["id" => "emoticon2", "image" => "emoji2.png", "price" => 100],
                ["id" => "emoticon3", "image" => "emoji3.png", "price" => 150],
                ["id" => "emoticon4", "image" => "emoji4.png", "price" => 75],
                ["id" => "emoticon5", "image" => "emoji5.png", "price" => 125],
                ["id" => "emoticon6", "image" => "emoji6.png", "price" => 60],
                ["id" => "emoticon7", "image" => "emoji7.png", "price" => 90],
                ["id" => "emoticon8", "image" => "emoji8.png", "price" => 110],
                ["id" => "emoticon9", "image" => "emoji9.png", "price" => 85],
                ["id" => "emoticon10", "image" => "emoji10.png", "price" => 95],
                ["id" => "emoticon11", "image" => "emoji11.png", "price" => 70],
                ["id" => "emoticon12", "image" => "emoji12.png", "price" => 105],
                ["id" => "emoticon13", "image" => "emoji13.png", "price" => 130],
                ["id" => "emoticon14", "image" => "emoji14.png", "price" => 150],
                ["id" => "emoticon15", "image" => "emoji15.png", "price" => 50],
                ["id" => "emoticon16", "image" => "emoji16.png", "price" => 120],
                ["id" => "emoticon17", "image" => "emoji17.png", "price" => 140],
                ["id" => "emoticon18", "image" => "emoji18.png", "price" => 160],
                ["id" => "emoticon19", "image" => "emoji19.png", "price" => 100],
                ["id" => "emoticon20", "image" => "emoji20.png", "price" => 170]
            ];
            $mb = get_member($member['mb_id']); 
            if ($_SERVER['REQUEST_METHOD'] === 'POST') {
                $emojiId = $_POST['emoji_id'];
                $emojiPrice = intval($_POST['emoji_price']);
                if ($mb['mb_point'] >= $emojiPrice) {
                    // Update points
                    $point = -$emojiPrice; // 포인트 설정
                    $content = '이모티콘 구매 차감';
                    // insert_point 함수 호출로 포인트 차감
                    insert_point($member['mb_id'], $point, $content, '@passive', 'emotion' . uniqid(), 'emoticon_buy');
                    // Update user's emoticon column
                    $mb[$emojiId] = 1;  
                    sql_query("UPDATE $g5_member SET $emojiId = 1 WHERE mb_id = '{$member['mb_id']}'");
                    echo "<script>alert('Purchase successful!');</script>";
                } else {
                    echo "<script>alert('Not enough coins!');</script>";
                }
            }
            foreach ($emojis as $emoji) {
                echo "<div class='emoji-item'>";
                echo "<img class='emoji' src='images/{$emoji['image']}' alt='Emoji'>";
                echo "<p>Price: {$emoji['price']} coins</p>";
                if (isset($mb[$emoji['id']]) && $mb[$emoji['id']] == 1) {
                    echo "<button class='bought-btn'>Already Purchased</button>";
                } else {
                    echo "<form method='POST'>";
                    echo "<input type='hidden' name='emoji_id' value='{$emoji['id']}'>";
                    echo "<input type='hidden' name='emoji_price' value='{$emoji['price']}'>";
                    echo "<button type='submit' class='buy-btn'>Buy</button>";
                    echo "</form>";
                }
                echo "</div>";
            }
            ?>

이 질문에 댓글 쓰기 :

답변 2

※ 확인 사항:

1. $g5_member 변수:

  - $g5_member는 실제 테이블 이름이어야 합니다.

  - $g5_member = 'g5_member';와 같이 정의했는지 확인하세요.

2. $emojiId 변수:

  - $emojiId는 emoticon1, emoticon2 등으로 설정되며,

  이는 데이터베이스 컬럼 이름과 일치해야 합니다.

  - 컬럼 이름이 잘못되었거나 필드가 존재하지 않으면 쿼리가 실패합니다.

  - $emojiId를 출력하여 확인하세요:

echo "Emoji ID: $emojiId";

3. sql_query 함수 결과:

- sql_query가 성공적으로 실행되었는지 확인하려면 결과를 점검해야 합니다:

$result = sql_query("UPDATE $g5_member SET $emojiId = 1 WHERE mb_id = '{$member['mb_id']}'");

if (!$result) {

echo "SQL Error: " . sql_error();

exit;

}

 

*$g5_member, $emojiId, mb_id 값의 유효성 검증.

// $g5_member 변수 검증
if (empty($g5_member)) {
    echo "Table name not defined: \$g5_member is empty.";
    exit;
}
// $emojiId 변수 검증
if (!preg_match('/^emoticon[0-9]+$/', $emojiId)) {
    echo "Invalid emoji ID: $emojiId";
    exit;
}
// $member['mb_id'] 값 검증
if (empty($member['mb_id'])) {
    echo "Invalid member ID.";
    exit;
}

 

*sql_error()와 MySQL 로그로 쿼리 실패 원인 확인.

$query = "UPDATE $g5_member SET $emojiId = 1 WHERE mb_id = '{$member['mb_id']}'";
$result = sql_query($query);
if (!$result) {
    echo "SQL Error: " . sql_error();
    exit;
}

 

*emoticon1 ~ emoticon20 필드 존재 여부 점검 및 추가.

SHOW COLUMNS FROM g5_member LIKE 'emoticon%';
- 필드가 없으면 아래 명령어로 추가

ALTER TABLE g5_member 
ADD COLUMN emoticon1 TINYINT(1) DEFAULT 0,
ADD COLUMN emoticon2 TINYINT(1) DEFAULT 0,
...
ADD COLUMN emoticon20 TINYINT(1) DEFAULT 0;
답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 0
© SIRSOFT
현재 페이지 제일 처음으로