[재질문].. 포인트순위 .. '페이징'과 관련.... > 그누4 질문답변

그누4 질문답변

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

[재질문].. 포인트순위 .. '페이징'과 관련.... 정보

[재질문].. 포인트순위 .. '페이징'과 관련....

본문

비슷한 글을 다시 올려 죄송합니다..근데..아무리해도 막히고 이해가 안되는 부분이 있어서
다시 글을 올립니다. (리플도움주신 'sjsjin'님께 감사드립니다.)

도움을 받아서 이래저래 하다가....일단 아래처럼 코드를 새로 수정했습니다.
- 수정이라기 보다 있는것을 이리저리 그냥 맞춰봤습니다 -_- ;;


[회원 포인트 순위 확인 : point_rank.php]


<?
// 상대 경로
$g4_path = "../gnuboard";; // 그누보드 경로지정
include_once("$g4_path/common.php");
include_once("$g4[path]/lib/latest.lib.php");

define("_CO_POINT_RANK_", TRUE);

$g4[title] = "";
$html_title ="포인트순위"; // 문서타이틀
include_once("head.php");
echo "<script language=\"javascript\" src=\"$g4[path]/js/sideview.js\"></script>\n";
?>

<? // 회원만 페이지를 볼수있도록 함
if (!$member[mb_id]) {
    echo "
    <script language='javascript'>
        alert('회원만 이용가능합니다.');
        history.go(-1);
    </script>";
    exit;
}
?>


<table align=center width=100% cellpadding=0 cellspacing=5 border=0 style='border=1px solid #cccccc'>
<tr><td valign=top colspan=2 class=lh>

<?
if ($member[mb_id]) // 최고관리자는 안보이게 처러 "$config[cf_admin]" <-- 관리자 아이디를 뜻함.
{
    $sql = " select count(mb_id) as cnt from $g4[member_table]
              where mb_id <> '$config[cf_admin]' and mb_point >= '$member[mb_point]' order by mb_point desc ";
    $row = sql_fetch($sql);
    echo "&middot; 현재 회원님의 포인트 순위는 대략(?) <B>".number_format($row[cnt])."등</B> 입니다.";
}

$sql = " select sum(mb_point) as sum_point from $g4[member_table]";
$row = sql_fetch($sql);

$sum_point = $row[sum_point];
echo "<br>&middot; 전체 포인트 : <B>".number_format($sum_point) . "점</b><br>";

?>
</td></tr>
</table>
<br>


<table align=center width=100% cellpadding=0 cellspacing=0 border=0>
<tr><td valign=top style='line-height:150%;'>

<? // 회원별 순위및 포인트내역

$sql = " select count(*) from $g4[member_table] ";
$row = sql_fetch($sql);
$total_count = $row[0];


$rows = 100;
$total_page  = ceil($total_count / $rows);  // 전체 페이지 계산
if ($page == "") { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함

$mod = 25;

//-- -----{위 수정} 최고관리자는 안보이게 처러
$sql = " select * from $g4[member_table]
          where mb_id <> '$config[cf_admin]' and mb_level < '5'
          order by mb_point desc, mb_today_login desc
          limit $from_record, $rows ";

$result = sql_query($sql);


for ($i=0; $row=sql_fetch_array($result); $i++){
    if ($i && $i%$mod==0) {
        echo "</td><td valign=top style='line-height:150%;'>";
}

    $rank = (($page - 1) * $rows) + $i + 1;

    $name = get_sideview($row[mb_id], $row[mb_nick], $row[mb_email], $row[mb_homepage]);
    $point = number_format($row[mb_point]);
    echo "<table align=center width=95% class=box cellpadding=4 cellspacing=0 border=0 style='border=1px solid #cccccc'>";
echo "<tr height=30>";
    echo "<td height=20>$rank. $name</td>";
    echo "<td align=right><font color=#FF9900>{$point}점</font></td>";
    echo "</tr></table>";
    echo "<table><tr><td></td></tr></table>";
}


?>

</td></tr>
</table>


<?
$page = get_paging($config[cf_write_pages], $page, $total_page, "?point_rank.php&page=");
echo "<p><table width=100% cellpadding=0 cellspacing=0><tr><td align=center>$page</td></tr></table><br><br>";
?>

<? include_once("tail.php"); ?>

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


위에서.....$total_count = $row[0];  <--- 이부분이 좀 문제가 있는거 같습니다.

$total_count = $row[0]; 을 그냥 적어서 화면을 보면 페이징이 안나타나고
$total_count = 500;  ... 이렇게 임의의 숫자를 넣어주면 페이징이 나타납니다.


위와 관련된 구문은 아래와 같습니다.

$sql = " select count(*) from $g4[member_table] ";
$row = sql_fetch($sql);
$total_count = $row[0];


전체회원수를 제대로 가져오지 못해서 생기는 문제인거 같은데
왜 이런 현상이 생기는지..뭐가 문제인지...좀 알려주세요..부탁드립니다.
  • 복사

댓글 전체

위 코드내용대로라면 정상입니다.

$total_count = $row[0]; 이 부분도 정상이고요.
g4에서는 배열첨자가 아닌 배열 인덱스를 사용하므로 $row[0] 과 같이 사용하는게 맞습니다.

위 내용으로봐서는 $total_count 에 값이 페이징을 넘길만큼 해당되지 않는 걸로 보입니다.

참고로 쿼리 메모리를 좀 줄이는 방법으로
$sql = " select count(*) from $g4[member_table] ";

$sql = " select count(mb_id) from $g4[member_table] ";
로 바꿔주시면 좋을 테구요...

정확히 테스트하시려면 관리자가 임의로 회원을 많이 생성해서 페이징 테스트를 하시면 될 것 같습니다.
혹은 $rows 를 5개나 10개 정도로 줄여서 해보셔도 되겠습니다.
문제가 있는거 같다는 부분...

$sql = " select count(*) from $g4[member_table]
            where where mb_id <> '$config[cf_admin]' and mb_level < '5' ";
$row = sql_fetch($sql);
$total_count = $row[0];
두분의 리플 감사합니다...
아..근데...정말 이상하군요...전 안되네요....참고로 g3의 회원테이블을 g4로 변환해서 가져왔거든요.
현재는 200명정도인데...페이징을 할 정도의 숫자는 됩니다.

회원db를 살펴봐도 그쪽은 별 이상이 없는거같고...정말 미칠거 같네요.. -_- ;;

$total_count = $row[0];  <-- 이부분이 과연 정상인가 싶어 그다음줄에 echo 문으로 찍어보면 'Array'라고
나오는게...숫자가 나와야 할부분에 배열이 표시되는게 좀 이상하기도 하고.. -_-;;
....

위 질문에 사용된 코드가 전부인데...자꾸 질문드리기도 뭣하고...정말 난감하네요.
당체 뭐가 문제인지...
아~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 이렇게 맹할수가............ -_-;;

팁앤테크에 있는 '포인트순위'프로그램을 사용하니 잘되네요.

http://www.sir.co.kr/bbs/board.php?bo_table=self_program&wr_id=1484

아마도 ... 아래구문이 정답인거 같습니다.

$sql = " select count(*) as cnt from $g4[member_table]";
$row = sql_fetch($sql);
$total_count = $row[cnt];


.....이것땜에 이틀을 놀았는데....(스스로에게 짜증만땅)....
위에 제가 올린 '자작프로그램'의 소소로는 되지 않고 팁앤테크의 소스로는 되는데...
원래의 소스와 위 구문을 빼고는 정확히 뭐가 차이인지는 몰겠지만...

어쨋건 리플 주신분들께 정말 고맙게 생각합니다. (리플이라도 없었으면 그냥 포기했을지도 몰랐겠네요 )
© SIRSOFT
현재 페이지 제일 처음으로