멤버십 회원 등급 변경 오류 문의,

멤버십 회원 등급 변경 오류 문의,

QA

멤버십 회원 등급 변경 오류 문의,

본문

그누, 영카드로 회원 멤버십으로 운영할 수 있게 개발한 부분이 있습니다.

 

개발 부분 : 상품마다 멤버십이 있음. 회원은 레벨5, 만료회원은 레벨2로 변경. 다른 상품에 멤버십이 아직 유효하면 변경 X

 

이번에 서버 이전을 하면서(가상서버 호스팅 > 웹호스팅) 변경된 부분이 있는데요.
이후부터 멤버십 만료 회원이 레벨5 > 레벨2로 변경이 안 되는데.

 

서버 이전 해주신 개발자님이 크론탭을 사용해야 한다고 해서 코드를 이렇게 변경하셨는데, 문제점을 알 수 있을까요??

 

코드 변경전 

 

<?php
$conn = mysql_connect("localhost", "id", "password");
mysql_select_db("id", $conn);
 
$now = time();
 
$todate = date("Y-m-d", $now);
 
// 서비스 만료일 판단
$msQuery = "SELECT * FROM member_service WHERE stats NOT IN ('cancel', 'pause') AND sp_date < '".$todate."' AND ms_no IN (SELECT MAX(ms_no) FROM member_service GROUP BY od_id) ";
$msResult = mysql_query($msQuery, $conn);
while($msRow = mysql_fetch_array($msResult)) {
 
    // 이용중인 다른 서비스가 있는지 확인
    $otQuery = "SELECT
                    COUNT(ms_no) AS cnt
                FROM
                    member_service
                WHERE
                    mb_id = '".$msRow['mb_id']."'
                    AND stats NOT IN ('cancel', 'pause')
                    AND st_date <= '".$todate."'
                    AND sp_date >= '".$todate."'
                    AND ms_no != '".$msRow['ms_no']."'
                    AND ms_no IN (SELECT MAX(ms_no) FROM member_service GROUP BY od_id)";
    $otResult = mysql_query($otQuery, $conn);
    $otRow = mysql_fetch_array($otResult);
 
    if($otRow['cnt'] > 0) { // 이용중인 다른 서비스가 있으므로
 
        // pass
 
    } else {
 
        // 회원레벨이 4, 5에 해당되는지
        $mbQuery = "SELECT mb_level FROM g5_member WHERE mb_id = '".$msRow['mb_id']."' LIMIT 1";
        $mbResult = mysql_query($mbQuery, $conn);
        $mbRow = mysql_fetch_array($mbResult);
 
        if($mbRow['mb_level'] == "4" || $mbRow['mb_level'] == "5") {
 
            $upQuery = "UPDATE g5_member SET mb_level = '2' WHERE mb_id = '".$msRow['mb_id']."' ";
            mysql_query($upQuery, $conn);
 
//          echo $msRow['mb_id']." : UPDATE mb_level = '2'\r";
        }
    }
}
?>

 

 

 

코드 변경후 (회원 등급 변경이 안됨) 

 


<?php
$link = mysqli_connect("localhost", "id", "password");
mysqli_select_db($link, "id");
 
$now = time();
 
//$todate = date("Y-m-d", $now);
$todate = $_GET['todate'];
 
if($todate == "") {
    echo "테스트 일자가 없습니다.";
    exit;
}
 
echo "처리일자 : ".$todate."<br />";
 
// 서비스 만료일 판단
$msQuery = "SELECT * FROM member_service WHERE stats NOT IN ('cancel', 'pause') AND sp_date < '".$todate."' AND ms_no IN (SELECT MAX(ms_no) FROM member_service GROUP BY od_id) ";
$msResult = mysqli_query($link,$msQuery);
while($msRow = mysqli_fetch_array($msResult)) {
 
    // 이용중인 다른 서비스가 있는지 확인
    $otQuery = "SELECT
                    COUNT(ms_no) AS cnt
                FROM
                    member_service
                WHERE
                    mb_id = '".$msRow['mb_id']."'
                    AND stats NOT IN ('cancel', 'pause')
                    AND st_date <= '".$todate."'
                    AND sp_date >= '".$todate."'
                    AND ms_no != '".$msRow['ms_no']."'
                    AND ms_no IN (SELECT MAX(ms_no) FROM member_service GROUP BY od_id)";
    $otResult = mysqli_query($link,$otQuery);
    $otRow = mysqli_fetch_array($otResult);
 
    if($otRow['cnt'] > 0) { // 이용중인 다른 서비스가 있으므로
 
        // pass
//      echo $msRow['mb_id']." : 다른서비스 있음 - ".$msRow['od_id']."<br />";
 
    } else {
 
        // 회원레벨이 4, 5에 해당되는지
        $mbQuery = "SELECT mb_level FROM g5_member WHERE mb_id = '".$msRow['mb_id']."' LIMIT 1";
        $mbResult = mysqli_query($link, $mbQuery);
        $mbRow = mysqli_fetch_array($mbResult);
 
        if($mbRow['mb_level'] == "4" || $mbRow['mb_level'] == "5") {
 
            $upQuery = "UPDATE g5_member SET mb_level = '2' WHERE mb_id = '".$msRow['mb_id']."' ";
            mysqli_query($link, $upQuery);
 
            echo $msRow['mb_id']." : UPDATE mb_level = '2'<br />";
 
        }
    }
}
?>

이 질문에 댓글 쓰기 :

답변 2

해당 파일을

URL 연결이 가능한 폴더로 옮겨서

브라우저에서 오류가 나는지 확인해 보세요.

댓글 감사합니다. 제가 개발쪽은 잘 몰라서요, 이거 말씀하시는 건가요?? 저 코드가 있는 php를 www/ 위치에 넣어서 인터넷으로 페이지 확인하고 f12 개발자 모드로 확인했는데 오류 코드는 없습니다.

$conn = mysql_connect("localhost", "id", "password");

$link = mysqli_connect("localhost", "id", "password");

변경된 부분은 이부분인거같은데 디비 연결 재확인 바랍니다

네, 디비는 연결 잘 되었고, mysql > mysqli 이부분은 php 버전 때문에 변경한거 같은데. 


//$todate = date("Y-m-d", $now);
$todate = $_GET['todate'];
if($todate == "") {
    echo "테스트 일자가 없습니다.";
    exit;
}
echo "처리일자 : ".$todate."<br />";


이부분 변경 이유를 잘 모르겠네요 ㅠ

1.
$link = mysqli_connect("localhost", "id", "password");
부분이 실제 DB연결에 필요한 ID, PASSWORD 인지?

2. URL 에 파라미터로 todate 값을 넘겼는지?
넘기지 않아서 생기는 문제라면

2-1 todate 값을 넘기거나
2-2 넘기는 법을 모르신다면,

----------------변경 전----------------

//$todate = date("Y-m-d", $now);
$todate = $_GET['todate'];
 
if($todate == "") {
    echo "테스트 일자가 없습니다.";
    exit;
}
 
echo "처리일자 : ".$todate."<br />";


----------------------------------------

----------------변경 후----------------
$todate = date("Y-m-d", $now);
----------------------------------------

로 수정해주시면 될 것 같습니다.

채호준님 댓글 감사합니다.

1. 실제 DB 필요한 ID, PASSWORD 맞습니다.
2. 파라미터로 넘어가는지 확인 방법은 모르지만, 기간이 지나면 만료로 표기되니 넘어가는듯 하고요,
2-2. $todate = date("Y-m-d", $now); <<--- 로 변경해서 테스트 했는데 기간이 지나면 만료가 변경 되는데. 등급(레벨)이 5에서2등급으로 자동 변경이 안되네요 ㅎ

답변을 작성하시기 전에 로그인 해주세요.
전체 425
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT