(소스첨부)랭킹게임인데요. 자신의 랭킹을 표시하려 합니다. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

(소스첨부)랭킹게임인데요. 자신의 랭킹을 표시하려 합니다. 정보

(소스첨부)랭킹게임인데요. 자신의 랭킹을 표시하려 합니다.

첨부파일

copter.zip (70.4K) 8회 다운로드 2013-09-30 09:16:44

본문

랭킹게임을 적용하고 있습니다.
여기 sir 에서 받은 '추락하는 헬리콥터'입니다.
http://sir.co.kr/bbs/board.php?bo_table=g4_skin&wr_id=106649

근데 이 게임은 top 몇명까지의 등수는 나오는데 본인의 등수는 확인 못하게 되어있습니다.
물론 top 안에 들면 가능하겠지만 대다수는 아마 본인이 몇등인지 모를겁니다.

자신의 등수를 표시하게 하고 싶은데요.
이전에 질문을 드렸고 답변도 얻었으나, 제 실력이 워낙에 초보라서 그런지 해결이 안됩니다.
답변을 그대로 적용하면 그냥 백지가 됩니다..ㅜㅠ
http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=275105
나름대로 이렇게 저렇게 시도해봤지만..;;역시 실패.

그래서 죄송하지만 소스를 직접 수정해 주실 분을 찾고있습니다.
방법은 위 답변링크를 참조하시면 수월하시지 않을까 생각합니다.

수정해 주신다면 그걸로 분석/공부해 보겠습니다.

*기본적으로 생각하는 자신의 등수를 표시할 부분은 게임제목 옆으로 생각하고 있는데..뭐 적당한 곳에 넣어주시면 될것 같습니다.

첨부1. 게임원본

댓글 전체

// =========== 추가할 코드 (반복문이 아닌곳에~~) ==============
$query_rank = mysql_query("select count(*) from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')"); // 자신의 점수보다 높은 사람들을 카운트
$result_rank =  mysql_fetch_row(mysql_result($query_rank,0,0));

$cur_rank = $result_rank[0] + 1; // 자신의 점수보다 높은 사람들의 바로 밑 순위 이므로 +1을 함
// ==============================================================
필요한 곳에 $cur_rank를 출력하시면 될 것 같습니다.

테스트는 안해봤습니다.^^;;;;

혹시 안되는 경우는 $member[mb_id] 값이 없을 경우나 게임을 한적이 없거나 할 경우정도 일 것 같네요..
테이블 안에 출력하려면
<?php echo $cur_rank; ?>
이렇게 출력하면 되나요??

적용해봤는데 모두 1등으로 나오는데..ㅜㅠ
뭐가 잘못된 것일까요???
출력은 <?php echo $cur_rank; ?> 나 <?= $cur_rank; ?> 이렇게 둘중 하나로 출력하시면 됩니다.

테스트 해보니 제대로 동작 안해서 다시 수정했습니다.

// ============================================================

//echo "select count(*) from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')";
$query_rank = "select count(*) as cnt from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')"; // 자신의 점수보다 높은 사람들을 카운트

$result_rank =  sql_fetch($query_rank);

$cur_rank = $result_rank[cnt] + 1; // 자신의 점수보다 높은 사람들의 바로 밑 순위 이므로 +1을 함
echo $cur_rank;  // 필요한 곳에 출력

// ============================================================

이건 직접 해본 코드라 잘 됩니다..
아래의 댓글달고보니 품격님께서 댓글에 소스를 수정해 주셨네요!!
내용반영하여 수정했더니..오류가 뜹니다..

select count(*) as cnt from game_copter where score > (SELECT score FROM game_copter where id = 'heonybaby')

1064 : You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT score FROM game_copter where id = 'heonybaby')' at line

error file : /copter2.php

 ---------------------------------------소스----------------------------
<?
include_once("./_common.php");
if (!$is_member||($member[mb_level]<2)) { 
alert_close("회원가입 후 이용 해 주세요. ^^");
window.close();
}
include_once("$g4[path]/lib/outlogin.lib.php");
if($member[mb_no]){


// 최초 테러방지부분시작

// 기존에 게임을 했었는지 (아이디가 존재하는지 쿼리로 확인)
$chkid =mysql_query("select id from game_copter where id='$member[mb_id]'");
$oldman = mysql_fetch_row($chkid);
$oldman[0]; // 기존에 했던 기록이 존재하면 이값이 들어옴 (id)

if(!$oldman[0]){ // 기존에 게임했던 기록이 없으면 아래실행
mysql_query("insert game_copter( id,name,score,date)values('$member[mb_id]','$member[mb_nick]','0','$date')");
}
// 최초 테러방지부분시작

// ============================================================

//echo "select count(*) from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')";
$query_rank = "select count(*) as cnt from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')"; // 자신의 점수보다 높은 사람들을 카운트

$result_rank =  sql_fetch($query_rank);

$cur_rank = $result_rank[cnt] + 1; // 자신의 점수보다 높은 사람들의 바로 밑 순위 이므로 +1을 함
echo $cur_rank;  // 필요한 곳에 출력

// ============================================================


?>
<body>


<!-- 랭킹 시작 -->
<table>
<tr><td><?php echo $member[mb_id]; ?>님 등수 : <?php echo $cur_rank; ?></td></tr>
<tr>
<td class="td_main" align="center">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="600" height="500">
<param name="movie" value="copter.swf" />
<param name="quality" value="high" />
<embed src="copter.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="60" height="50"></embed></object></td>
</tr>

</table>
<table width="100%" cellSpacing="0" cellpadding="0" border="0">
<?php


$query_game = mysql_query("SELECT name,score,date FROM game_copter where score > 0 ORDER BY score DESC");


$result = mysql_query("select count(*) from game_copter where score > 0");
$query_sum = mysql_result($result,0,0);

$count=1;
$max = 25;  // 한페이지 최대 출력갯수지정

if($query_sum < $max){ $max = $query_sum; }

while ($count <= $max){ 

$row_game = mysql_fetch_row($query_game);
$name=$row_game[0];
$score=$row_game[1];
$date=$row_game[2];

?>
<tr>
<td class="td_main2" onmouseover="this.style.backgroundColor='#f7f7f7'" onmouseout="this.style.backgroundColor='#fff'"><?php echo $count++; ?>등&nbsp;<?php echo $name; ?> : &nbsp;&nbsp;<?php echo $score; ?>점&nbsp;</td>
</tr>
<? } ?>

</table>
</td>
<!-- 랭킹 끝 -->
</tr>
<tr><td>
aaa
</tr></td>
</table>
</body>
</html>
<? } ?>
mysql 버전 문제인가 보네요..

// =================== 이코드로 수정 =====================

$query_rank = mysql_query("select count(*) as cnt from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')");
$cur_rank = mysql_result($query_rank,0,0);


$cur_rank = $cur_rank[cnt] + 1; // 자신의 점수보다 높은 사람들의 바로 밑 순위 이므로 +1을 함

//=======================================================
답변 감사합니다!!
랭킹페이지를 디자인 빼고 기능만 정리해서 수정중입니다.
(초보자다보니 소스가 복잡해서 헷갈려서요;;)
echo 문을 붙여서 $member[mb_id] 값이 정상적으로 나오는지 보기위해서
<?php echo $member[mb_id]; ?>님 등수 : <?php echo $cur_rank; ?>
와 같이 수정했습니다.
아래 코드 확인해 주실 수 있으신가요??
아래 코드를 적용한 테스트 페이지는 http://www.choogo.net/copter2.php
오리지널 게임 페이지는 http://www.choogo.net/copter.php
이며 테스트 아이디,비번은 test1234(비번동일)입니다.

--------------------------------코드------------------------------------------------
<?
include_once("./_common.php");
if (!$is_member||($member[mb_level]<2)) { 
alert_close("회원가입 후 이용 해 주세요. ^^");
window.close();
}
include_once("$g4[path]/lib/outlogin.lib.php");
if($member[mb_no]){


// 최초 테러방지부분시작

// 기존에 게임을 했었는지 (아이디가 존재하는지 쿼리로 확인)
$chkid =mysql_query("select id from game_copter where id='$member[mb_id]'");
$oldman = mysql_fetch_row($chkid);
$oldman[0]; // 기존에 했던 기록이 존재하면 이값이 들어옴 (id)

if(!$oldman[0]){ // 기존에 게임했던 기록이 없으면 아래실행
mysql_query("insert game_copter( id,name,score,date)values('$member[mb_id]','$member[mb_nick]','0','$date')");
}
// 최초 테러방지부분시작

// =========== 추가할 코드 (반복문이 아닌곳에~~) ==============
$query_rank = mysql_query("select count(*) from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')"); // 자신의 점수보다 높은 사람들을 카운트
$result_rank =  mysql_fetch_row(mysql_result($query_rank,0,0));

$cur_rank = $result_rank[0] + 1; // 자신의 점수보다 높은 사람들의 바로 밑 순위 이므로 +1을 함
// ==============================================================

?>
<body>


<!-- 랭킹 시작 -->
<table>
<tr><td><?php echo $member[mb_id]; ?>님 등수 : <?php echo $cur_rank; ?></td></tr>
<tr>
<td class="td_main" align="center">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="600" height="500">
<param name="movie" value="copter.swf" />
<param name="quality" value="high" />
<embed src="copter.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="60" height="50"></embed></object></td>
</tr>

</table>
<table width="100%" cellSpacing="0" cellpadding="0" border="0">
<?php


$query_game = mysql_query("SELECT name,score,date FROM game_copter where score > 0 ORDER BY score DESC");


$result = mysql_query("select count(*) from game_copter where score > 0");
$query_sum = mysql_result($result,0,0);

$count=1;
$max = 25;  // 한페이지 최대 출력갯수지정

if($query_sum < $max){ $max = $query_sum; }

while ($count <= $max){ 

$row_game = mysql_fetch_row($query_game);
$name=$row_game[0];
$score=$row_game[1];
$date=$row_game[2];

?>
<tr>
<td class="td_main2" onmouseover="this.style.backgroundColor='#f7f7f7'" onmouseout="this.style.backgroundColor='#fff'"><?php echo $count++; ?>등&nbsp;<?php echo $name; ?> : &nbsp;&nbsp;<?php echo $score; ?>점&nbsp;</td>
</tr>
<? } ?>

</table>
</td>
<!-- 랭킹 끝 -->
</tr>
<tr><td>
aaa
</tr></td>
</table>
</body>
</html>
<? } ?>
// =========== 추가할 코드 (반복문이 아닌곳에~~) ==============
$query_rank = mysql_query("select count(*) from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')"); // 자신의 점수보다 높은 사람들을 카운트
$result_rank =  mysql_fetch_row(mysql_result($query_rank,0,0));

$cur_rank = $result_rank[0] + 1; // 자신의 점수보다 높은 사람들의 바로 밑 순위 이므로 +1을 함
// ==============================================================

코드를

// ============================================================

//echo "select count(*) from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')";
$query_rank = "select count(*) as cnt from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')"; // 자신의 점수보다 높은 사람들을 카운트

$result_rank =  sql_fetch($query_rank);

$cur_rank = $result_rank[cnt] + 1; // 자신의 점수보다 높은 사람들의 바로 밑 순위 이므로 +1을 함

// ============================================================

이렇게 바꿔주세요..
죄송합니다..ㅜㅠ 제가 바보같이 이러고 있네요..ㅜㅠ 위 댓글 확인해 주실수 있으신가요??
---------------------------------------------------------------
중간에 달린 댓글이라 헷갈리실것 같아 젤 밑의 댓글에 추가합니다.
------------------------------------------------------------------

수정된 내용반영하여 수정했더니..아래와 같은 오류가 뜹니다..

select count(*) as cnt from game_copter where score > (SELECT score FROM game_copter where id = 'heonybaby')

1064 : You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT score FROM game_copter where id = 'heonybaby')' at line

error file : /copter2.php

 ---------------------------------------소스----------------------------
<?
include_once("./_common.php");
if (!$is_member||($member[mb_level]<2)) { 
alert_close("회원가입 후 이용 해 주세요. ^^");
window.close();
}
include_once("$g4[path]/lib/outlogin.lib.php");
if($member[mb_no]){


// 최초 테러방지부분시작

// 기존에 게임을 했었는지 (아이디가 존재하는지 쿼리로 확인)
$chkid =mysql_query("select id from game_copter where id='$member[mb_id]'");
$oldman = mysql_fetch_row($chkid);
$oldman[0]; // 기존에 했던 기록이 존재하면 이값이 들어옴 (id)

if(!$oldman[0]){ // 기존에 게임했던 기록이 없으면 아래실행
mysql_query("insert game_copter( id,name,score,date)values('$member[mb_id]','$member[mb_nick]','0','$date')");
}
// 최초 테러방지부분시작

// ============================================================

//echo "select count(*) from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')";
$query_rank = "select count(*) as cnt from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')"; // 자신의 점수보다 높은 사람들을 카운트

$result_rank =  sql_fetch($query_rank);

$cur_rank = $result_rank[cnt] + 1; // 자신의 점수보다 높은 사람들의 바로 밑 순위 이므로 +1을 함
echo $cur_rank;  // 필요한 곳에 출력

// ============================================================


?>
<body>


<!-- 랭킹 시작 -->
<table>
<tr><td><?php echo $member[mb_id]; ?>님 등수 : <?php echo $cur_rank; ?></td></tr>
<tr>
<td class="td_main" align="center">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="600" height="500">
<param name="movie" value="copter.swf" />
<param name="quality" value="high" />
<embed src="copter.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="60" height="50"></embed></object></td>
</tr>

</table>
<table width="100%" cellSpacing="0" cellpadding="0" border="0">
<?php


$query_game = mysql_query("SELECT name,score,date FROM game_copter where score > 0 ORDER BY score DESC");


$result = mysql_query("select count(*) from game_copter where score > 0");
$query_sum = mysql_result($result,0,0);

$count=1;
$max = 25;  // 한페이지 최대 출력갯수지정

if($query_sum < $max){ $max = $query_sum; }

while ($count <= $max){ 

$row_game = mysql_fetch_row($query_game);
$name=$row_game[0];
$score=$row_game[1];
$date=$row_game[2];

?>
<tr>
<td class="td_main2" onmouseover="this.style.backgroundColor='#f7f7f7'" onmouseout="this.style.backgroundColor='#fff'"><?php echo $count++; ?>등&nbsp;<?php echo $name; ?> : &nbsp;&nbsp;<?php echo $score; ?>점&nbsp;</td>
</tr>
<? } ?>

</table>
</td>
<!-- 랭킹 끝 -->
</tr>
<tr><td>
aaa
</tr></td>
</table>
</body>
</html>
<? } ?>
ㅠㅠ

마지막에 달아주신

// =================== 이코드로 수정 =====================

$query_rank = mysql_query("select count(*) as cnt from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')");
$cur_rank = mysql_result($query_rank,0,0);


$cur_rank = $cur_rank[cnt] + 1; // 자신의 점수보다 높은 사람들의 바로 밑 순위 이므로 +1을 함

//=======================================================

이걸 적용했더니 다시 모든사람이 1등으로 표시되고 있습니다.
과정이 너무 길어져서 몸둘바를 모르겠습니다..ㅜㅠ

*mysql 버전은  4.0.27 인것 같습니다.
제가 테스트 하는 환경에선 문제가 없어서 몰랐는데 코드를 잘못 작성한 부분이 있는데 제 환경에선 제대로 나왔네요 ㄷㄷㄷ...

일단 수정코드는

=============================================================================
$query_rank = mysql_query("select count(*) as cnt from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')");
$query_result = mysql_result($query_rank,0,0);


$cur_rank = $query_result[cnt] + 1; // 자신의 점수보다 높은 사람들의 바로 밑 순위 이므로 +1을 함
==============================================================================

이렇게 해야 할 것 같구요..

이렇게 수정해도 계속 모든 사람이 1등으로 나온다면..

$cur_rank = $query_result[cnt] + 1; // 자신의 점수보다 높은 사람들의 바로 밑 순위 이므로 +1을 함의 바로 위의 라인에 var_dump($query_result); 이 문장으로 출력 결과를 봤으면 하네요.
이 수정소스는 빈페이지가 떴습니다.
마지막 출력결과를 봤으면 한다고 하신거는 아래와 같이 하면 되나요??
=============================================================================
$query_rank = mysql_query("select count(*) as cnt from game_copter where score > (SELECT score FROM game_copter where id = '$member[mb_id]')");
$query_result = mysql_result($query_rank,0,0);

var_dump($query_result);
$cur_rank = $query_result[cnt] + 1; // 자신의 점수보다 높은 사람들의 바로 밑 순위 이므로 +1을 함
==============================================================================

이것도 빈페이지상태인데요..ㅜㅠ
죄송합니다. 실수로 ============까지 넣었습니다;;
==========지웠더니 모두 1등으로 뜨고
var_dump 를 넣었더니 NULL 이라고 위에 떠 있습니다.

혹시 서버가 euc-kr 인데 그거랑 상관있나요??
검색해보니 서브쿼리를 사용하기 위해서는 최소한 MYSQL-4.1.xxx 버젼이상을 사용해야 한다고 하는군요.. 버전이 낮아서 서브쿼리가 에러가 됐었네요..

그래서 분리했습니다..

// =============================================================
$mb_score = mysql_fetch_array(mysql_query("SELECT score FROM game_copter where id = '$member[mb_id]'")); // 로그인 한 사람의 점수

$query_result = mysql_fetch_array(mysql_query("select count(*) as cnt from game_copter where score > {$mb_score[score]}"));  // 로그인 한 사람의 점수보다 높은 사람들을 카운트

$cur_rank = $query_result[cnt] + 1; // 자신의 점수보다 높은 사람들의 바로 밑 순위 이므로 +1을 함
// ===============================================================
드디어!!!!
해결 되었습니다.
감사합니다. ㅜㅠ 진짜 너무너무 감사드립니다.
귀찮아하실수도 있는일인데 이렇게 관심갖고 도와주셔서 진짜 몸둘바를 모르겠습니다.
덕분에 정말 큰 숙제를 해결하게 되었습니다.
http://www.choogo.net/copter2.php (기능은 잘 되고 이제 디자인을 다시 적용하여야 겠습니다.)

좋은하루 되시고 항상 건강하세요!
전체 29 |RSS
그누4 질문답변 내용 검색

회원로그인

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