멤버십 회원 등급 변경 오류 문의, 채택완료
그누, 영카드로 회원 멤버십으로 운영할 수 있게 개발한 부분이 있습니다.
개발 부분 : 상품마다 멤버십이 있음. 회원은 레벨5, 만료회원은 레벨2로 변경. 다른 상품에 멤버십이 아직 유효하면 변경 X
이번에 서버 이전을 하면서(가상서버 호스팅 > 웹호스팅) 변경된 부분이 있는데요.
이후부터 멤버십 만료 회원이 레벨5 > 레벨2로 변경이 안 되는데.
서버 이전 해주신 개발자님이 크론탭을 사용해야 한다고 해서 코드를 이렇게 변경하셨는데, 문제점을 알 수 있을까요??
코드 변경전
</strong></p>
<p><?php</p>
<p>$conn = mysql_connect("localhost", "id", "password");</p>
<p>mysql_select_db("id", $conn);</p>
<p> </p>
<p>$now = time();</p>
<p> </p>
<p>$todate = date("Y-m-d", $now);</p>
<p> </p>
<p>// 서비스 만료일 판단</p>
<p>$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) ";</p>
<p>$msResult = mysql_query($msQuery, $conn);</p>
<p>while($msRow = mysql_fetch_array($msResult)) {</p>
<p> </p>
<p> // 이용중인 다른 서비스가 있는지 확인</p>
<p> $otQuery = "SELECT</p>
<p> COUNT(ms_no) AS cnt</p>
<p> FROM</p>
<p> member_service</p>
<p> WHERE</p>
<p> mb_id = '".$msRow['mb_id']."'</p>
<p> AND stats NOT IN ('cancel', 'pause')</p>
<p> AND st_date <= '".$todate."'</p>
<p> AND sp_date >= '".$todate."'</p>
<p> AND ms_no != '".$msRow['ms_no']."'</p>
<p> AND ms_no IN (SELECT MAX(ms_no) FROM member_service GROUP BY od_id)";</p>
<p> $otResult = mysql_query($otQuery, $conn);</p>
<p> $otRow = mysql_fetch_array($otResult);</p>
<p> </p>
<p> if($otRow['cnt'] > 0) { // 이용중인 다른 서비스가 있으므로</p>
<p> </p>
<p> // pass</p>
<p> </p>
<p> } else {</p>
<p> </p>
<p> // 회원레벨이 4, 5에 해당되는지</p>
<p> $mbQuery = "SELECT mb_level FROM g5_member WHERE mb_id = '".$msRow['mb_id']."' LIMIT 1";</p>
<p> $mbResult = mysql_query($mbQuery, $conn);</p>
<p> $mbRow = mysql_fetch_array($mbResult);</p>
<p> </p>
<p> if($mbRow['mb_level'] == "4" || $mbRow['mb_level'] == "5") {</p>
<p> </p>
<p> $upQuery = "UPDATE g5_member SET mb_level = '2' WHERE mb_id = '".$msRow['mb_id']."' ";</p>
<p> mysql_query($upQuery, $conn);</p>
<p> </p>
<p>// echo $msRow['mb_id']." : UPDATE mb_level = '2'\r";</p>
<p> }</p>
<p> }</p>
<p>}</p>
<p>?></p>
<p><strong>
코드 변경후 (회원 등급 변경이 안됨)
</strong></p>
<p><?php</p>
<p>$link = mysqli_connect("localhost", "id", "password");</p>
<p>mysqli_select_db($link, "id");</p>
<p> </p>
<p>$now = time();</p>
<p> </p>
<p>//$todate = date("Y-m-d", $now);</p>
<p>$todate = $_GET['todate'];</p>
<p> </p>
<p>if($todate == "") {</p>
<p> echo "테스트 일자가 없습니다.";</p>
<p> exit;</p>
<p>}</p>
<p> </p>
<p>echo "처리일자 : ".$todate."
";</p>
<p> </p>
<p>// 서비스 만료일 판단</p>
<p>$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) ";</p>
<p>$msResult = mysqli_query($link,$msQuery);</p>
<p>while($msRow = mysqli_fetch_array($msResult)) {</p>
<p> </p>
<p> // 이용중인 다른 서비스가 있는지 확인</p>
<p> $otQuery = "SELECT</p>
<p> COUNT(ms_no) AS cnt</p>
<p> FROM</p>
<p> member_service</p>
<p> WHERE</p>
<p> mb_id = '".$msRow['mb_id']."'</p>
<p> AND stats NOT IN ('cancel', 'pause')</p>
<p> AND st_date <= '".$todate."'</p>
<p> AND sp_date >= '".$todate."'</p>
<p> AND ms_no != '".$msRow['ms_no']."'</p>
<p> AND ms_no IN (SELECT MAX(ms_no) FROM member_service GROUP BY od_id)";</p>
<p> $otResult = mysqli_query($link,$otQuery);</p>
<p> $otRow = mysqli_fetch_array($otResult);</p>
<p> </p>
<p> if($otRow['cnt'] > 0) { // 이용중인 다른 서비스가 있으므로</p>
<p> </p>
<p> // pass</p>
<p>// echo $msRow['mb_id']." : 다른서비스 있음 - ".$msRow['od_id']."
";</p>
<p> </p>
<p> } else {</p>
<p> </p>
<p> // 회원레벨이 4, 5에 해당되는지</p>
<p> $mbQuery = "SELECT mb_level FROM g5_member WHERE mb_id = '".$msRow['mb_id']."' LIMIT 1";</p>
<p> $mbResult = mysqli_query($link, $mbQuery);</p>
<p> $mbRow = mysqli_fetch_array($mbResult);</p>
<p> </p>
<p> if($mbRow['mb_level'] == "4" || $mbRow['mb_level'] == "5") {</p>
<p> </p>
<p> $upQuery = "UPDATE g5_member SET mb_level = '2' WHERE mb_id = '".$msRow['mb_id']."' ";</p>
<p> mysqli_query($link, $upQuery);</p>
<p> </p>
<p> echo $msRow['mb_id']." : UPDATE mb_level = '2'
";</p>
<p> </p>
<p> }</p>
<p> }</p>
<p>}</p>
<p>?></p>
<p><strong>
답변 2개
답변에 대한 댓글 2개
https://www.php.net/manual/en/function.mysql-error.php
이 함수를 통해서 확인할 수 있습니다.
댓글을 작성하려면 로그인이 필요합니다.
$conn = mysql_connect("localhost", "id", "password");
$link = mysqli_connect("localhost", "id", "password");
변경된 부분은 이부분인거같은데 디비 연결 재확인 바랍니다
답변에 대한 댓글 4개
[code]
//$todate = date("Y-m-d", $now);
$todate = $_GET['todate'];
if($todate == "") {
echo "테스트 일자가 없습니다.";
exit;
}
echo "처리일자 : ".$todate."<br />";
[/code]
이부분 변경 이유를 잘 모르겠네요 ㅠ
$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등급으로 자동 변경이 안되네요 ㅎ
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인