월간 년간 출석부에 관한 질문입니다. 정보
월간 년간 출석부에 관한 질문입니다.
본문
출석부 질문입니다.
아래의 소스를 통해서 날마다 로그인 하고 출석한 회원을 알아 보고 있답니다.
그렇지만 이것은 내일이 되면 사라지고 맙니다.
일일뿐만 아니라 회원별로 월간 출석을 통계내는 방법이 없을 까요?
이거에 도움 주실 회원님 없으신가요?
관리자님께서 ...g4_member 의 mb_today_login 필드를 사용하시면 되겠습니다.
라고 하셨지만 도저히 모르겠습니다.
어떻게 해야 하는지 ......
<?
include_once("./_common.php");
include_once("$g4[path]/lib/latest.lib.php");
$g4['title'] = "";
include_once("./_head.php");
?>
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
echo "<script language=\"javascript\" src=\"$g4[path]/js/sideview.js\"></script>\n";
?>
<link rel="stylesheet" href="<?=$g4['path']?>/service/attendance/at_style.css" type="text/css">
<table width="100%" cellspacing="0" cellpadding="0" align="center" valign="top">
<tr>
<td width="100%">
<table width="100%" cellpadding="0" cellspacing="0" border="0" align="center" valign="top">
<tr><td colspan="9" height="3" bgcolor="#F2F2F2"></td></tr>
<tr><td colspan="9" height="1" bgcolor="#D9D9D9"></td></tr>
<tr height="30">
<td width="100" align="center"><span class="at_rk_s">순서</span></td>
<td width="1"><img src="<?=$g4['path']?>/service/attendance/img/line_01.gif" width="1" height="13"></td>
<td width="150" align="center"><span class="at_rk_s">출석시간</span></td>
<td width="1"><img src="<?=$g4['path']?>/service/attendance/img/line_01.gif" width="1" height="13"></td>
<td width="100" align="center"><span class="at_rk_s">접속상태</span></td>
<td width="1"><img src="<?=$g4['path']?>/service/attendance/img/line_01.gif" width="1" height="13"></td>
<td align="center"><span class="at_rk_s">닉네임</span></td>
<td width="1"><img src="<?=$g4['path']?>/service/attendance/img/line_01.gif" width="1" height="13"></td>
<td width="100" align="center" style="padding:0 0 0 5px;"><span class="at_rk_s">포인트</span></td>
</tr>
<tr><td colspan="9" height="1" bgcolor="#D9D9D9"></td></tr>
<tr><td colspan="9" height="3" bgcolor="#F2F2F2"></td></tr>
<?
// 시작시간
$str_today_time = date("Y-m-d 00:00:00");
// 회원테이블 연결
$sql = " select * from $g4[member_table] where mb_today_login >= '$str_today_time' order by mb_today_login asc, mb_point asc ";
$result = sql_query($sql);
for ($i=0; $row = sql_fetch_array($result); $i++) {
// 접속자테이블 연결
$sql2 = " select mb_id from $g4[login_table] where mb_id = '$row[mb_id]' ";
$row2 = sql_fetch($sql2);
// 접속상태
if ($row2['mb_id']) {
$on = "접속중";
} else {
$on = "";
}
// 닉네임
$name = get_sideview($row[mb_id], $row[mb_nick], $row[mb_email], $row[mb_homepage]);
// 랭킹
$rank = $i + 1;
// 색상
if ($member['mb_id'] == $row['mb_id']) {
$list = "2";
} else {
$list = ($i%2);
}
?>
<tr class='list<?=$list?>' height="25" onMouseOver='this.style.backgroundColor="#ffe9e9"' onMouseOut='this.style.backgroundColor=""'>
<td width="100" align="center"><span class="at_rk_n"><?=$rank?></span></td>
<td width="1"></td>
<td width="150" align="center"><span class="at_rk_n"><?=substr($row['mb_today_login'],10,16);?></span></a></td>
<td width="1"></td>
<td width="100" align="center"><span class="at_rk_n"><?=$on?></span></td>
<td width="1"></td>
<td align="center"><span class="at_rk_n"><?=$name?></span></td>
<td width="1"></td>
<td width="100" align="right" style="padding:0 5 0 0px;"><span class="at_rk_n"><?=number_format($row['mb_point']);?> 점</span></td>
</tr>
<tr><td bgcolor="#EEEEEE" colspan="9"></td></tr>
<? } ?>
<tr><td colspan="9" height="3" bgcolor="#FAFAFA"></td></tr>
</table></td>
</tr>
</table>
<?
include_once("./_tail.php");
?>
아래의 소스를 통해서 날마다 로그인 하고 출석한 회원을 알아 보고 있답니다.
그렇지만 이것은 내일이 되면 사라지고 맙니다.
일일뿐만 아니라 회원별로 월간 출석을 통계내는 방법이 없을 까요?
이거에 도움 주실 회원님 없으신가요?
관리자님께서 ...g4_member 의 mb_today_login 필드를 사용하시면 되겠습니다.
라고 하셨지만 도저히 모르겠습니다.
어떻게 해야 하는지 ......
<?
include_once("./_common.php");
include_once("$g4[path]/lib/latest.lib.php");
$g4['title'] = "";
include_once("./_head.php");
?>
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
echo "<script language=\"javascript\" src=\"$g4[path]/js/sideview.js\"></script>\n";
?>
<link rel="stylesheet" href="<?=$g4['path']?>/service/attendance/at_style.css" type="text/css">
<table width="100%" cellspacing="0" cellpadding="0" align="center" valign="top">
<tr>
<td width="100%">
<table width="100%" cellpadding="0" cellspacing="0" border="0" align="center" valign="top">
<tr><td colspan="9" height="3" bgcolor="#F2F2F2"></td></tr>
<tr><td colspan="9" height="1" bgcolor="#D9D9D9"></td></tr>
<tr height="30">
<td width="100" align="center"><span class="at_rk_s">순서</span></td>
<td width="1"><img src="<?=$g4['path']?>/service/attendance/img/line_01.gif" width="1" height="13"></td>
<td width="150" align="center"><span class="at_rk_s">출석시간</span></td>
<td width="1"><img src="<?=$g4['path']?>/service/attendance/img/line_01.gif" width="1" height="13"></td>
<td width="100" align="center"><span class="at_rk_s">접속상태</span></td>
<td width="1"><img src="<?=$g4['path']?>/service/attendance/img/line_01.gif" width="1" height="13"></td>
<td align="center"><span class="at_rk_s">닉네임</span></td>
<td width="1"><img src="<?=$g4['path']?>/service/attendance/img/line_01.gif" width="1" height="13"></td>
<td width="100" align="center" style="padding:0 0 0 5px;"><span class="at_rk_s">포인트</span></td>
</tr>
<tr><td colspan="9" height="1" bgcolor="#D9D9D9"></td></tr>
<tr><td colspan="9" height="3" bgcolor="#F2F2F2"></td></tr>
<?
// 시작시간
$str_today_time = date("Y-m-d 00:00:00");
// 회원테이블 연결
$sql = " select * from $g4[member_table] where mb_today_login >= '$str_today_time' order by mb_today_login asc, mb_point asc ";
$result = sql_query($sql);
for ($i=0; $row = sql_fetch_array($result); $i++) {
// 접속자테이블 연결
$sql2 = " select mb_id from $g4[login_table] where mb_id = '$row[mb_id]' ";
$row2 = sql_fetch($sql2);
// 접속상태
if ($row2['mb_id']) {
$on = "접속중";
} else {
$on = "";
}
// 닉네임
$name = get_sideview($row[mb_id], $row[mb_nick], $row[mb_email], $row[mb_homepage]);
// 랭킹
$rank = $i + 1;
// 색상
if ($member['mb_id'] == $row['mb_id']) {
$list = "2";
} else {
$list = ($i%2);
}
?>
<tr class='list<?=$list?>' height="25" onMouseOver='this.style.backgroundColor="#ffe9e9"' onMouseOut='this.style.backgroundColor=""'>
<td width="100" align="center"><span class="at_rk_n"><?=$rank?></span></td>
<td width="1"></td>
<td width="150" align="center"><span class="at_rk_n"><?=substr($row['mb_today_login'],10,16);?></span></a></td>
<td width="1"></td>
<td width="100" align="center"><span class="at_rk_n"><?=$on?></span></td>
<td width="1"></td>
<td align="center"><span class="at_rk_n"><?=$name?></span></td>
<td width="1"></td>
<td width="100" align="right" style="padding:0 5 0 0px;"><span class="at_rk_n"><?=number_format($row['mb_point']);?> 점</span></td>
</tr>
<tr><td bgcolor="#EEEEEE" colspan="9"></td></tr>
<? } ?>
<tr><td colspan="9" height="3" bgcolor="#FAFAFA"></td></tr>
</table></td>
</tr>
</table>
<?
include_once("./_tail.php");
?>
댓글 전체
회원이 로그인 할때... 테이블 하나 만들어서 저장하면되겠네요.
Table Name : g4_login_member
lo_no(번호), lo_id(로그인아이디), lo_date(로그인한날자/시간) 이렇게 3개 필드만 있으면 되겠네요..
그럼.... 월별/년간 출석률 나오겠네요.
이렇게 하면 되지 않을까요??
뽑아오는건 내 입맛에 맛게~~
Table Name : g4_login_member
lo_no(번호), lo_id(로그인아이디), lo_date(로그인한날자/시간) 이렇게 3개 필드만 있으면 되겠네요..
그럼.... 월별/년간 출석률 나오겠네요.
이렇게 하면 되지 않을까요??
뽑아오는건 내 입맛에 맛게~~
가르쳐 주신대로 테이블을 만들어서 추가는 했는요.
인저 어떻게 뽑아 와야 하는 것인지?
거의 프로그램에 문외한인지라 잘모르겠습니다.
인저 어떻게 뽑아 와야 하는 것인지?
거의 프로그램에 문외한인지라 잘모르겠습니다.
common.php 파일 수정해야될듯 싶네요..
오늘중 첫로그인일때 로그인회원 정보 저장...
수정하지 않은 원본 common.php 파일기준으로 설명할게요..
수정할부분은 298번째줄정도입니다....
===============================================================
// 오늘의 로그인이 될 수도 있으며 마지막 로그인일 수도 있음
// 해당 회원의 접근일시와 IP 를 저장
$sql = " update {$g4['member_table']} set mb_today_login = '{$g4['time_ymdhis']}', mb_login_ip = '{$_SERVER['REMOTE_ADDR']}' where mb_id = '{$member['mb_id']}' ";
sql_query($sql);
//여기서부터 추가....
// 출석부 저장을 위하여 추가
$sql = " insert into g4_login_member set lo_id = '{$member['mb_id']}', lo_date = '{$g4['time_ymdhis']}' ";
sql_query($sql);
/// 요기까지 common.php 파일에 추가하시면되요..
하루에 한번만 저장...
/// 아래 내용은 리스트... 파일 별도로 만들어서 저장하세요..
===============================================================
<?
include_once("./_common.php");
if (!$is_member) { // 회원이 아니라면...
echo "<script>
alert('비회원은 입장 불가합니다.');
location.href='$g4[path]/bbs/login.php?wr_id=&url=../';
</script>";
}
$sql_common = " from g4_login_member ";
$sql_search = " where (1) ";
// 로그인 날자기간별검색
if ($fr_date) { $sql_search .="AND (lo_date between '$fr_date 00:00:00' and '$to_date 23:59:59')"; }
if ($stx) {
$stxx = explode(" ", $stx);
$sql_search .= " and ( ";
switch ($sfl) {
case "lo_id" :
$sql_search .= " ($sfl = '$stx') ";
break;
case "lo_date" :
$sql_search .= " ($sfl like '%$stx%') ";
break;
default :
$sql_search .= " ($sfl like '%$stx%') ";
break;
}
$sql_search .= " ) ";
}
if ($sst)
$sql_order = " order by $sst $sod ";
else
$sql_order = " order by lo_date desc ";
$sql = " select count(*) as cnt
$sql_common
$sql_search
$sql_order ";
$row = sql_fetch($sql);
$total_count = $row[cnt];
$rows = $config[cf_page_rows];
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
if (!$page) $page = 1; // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함
$sql = " select *
$sql_common
$sql_search
$sql_order
limit $from_record, $rows ";
$result = sql_query($sql);
$listall = "<a href='$_SERVER[PHP_SELF]'><img src='./btn_search2.gif' align='absmiddle' border='0'></a>";
////////
$g4['title'] = "출석부";
include_once("./_head.php");
$qstr2 = "fr_date=$fr_date&to_date=$to_date&lo_no=$lo_id&sfl=$sfl&stx=$stx";
$pagelist = get_paging($config['cf_write_pages'], $page, $total_page, "?$qstr2&page=");
?>
<style>
.lo_td1 { width:50px;padding:5px;margin:0px;text-align:center;background:#ededed; }
.lo_td2 { width:150px;padding:5px;margin:0px;text-align:center;background:#ededed; }
.lo_td3 { width:150px;padding:5px;margin:0px;text-align:center;background:#ededed; }
.lo_td4 { width:50px;padding:5px;margin:0px;text-align:center;background:#ffffff; }
.lo_td5 { width:150px;padding:5px;margin:0px;text-align:left;background:#ffffff; }
.lo_td6 { width:150px;padding:5px;margin:0px;text-align:center;background:#ffffff; }
</style>
<!-- ############### 검색 ################# -->
<form name=fsearch method=get style="margin:0px;">
<table width="100%" cellpadding="2" cellspacing="1" bgcolor="#dddddd" align="center">
<tr height="30px" align="center" bgcolor="#ffffff">
<td style="text-align:left;padding:0px 0px 0px 5px;">
<!-- 기간별검색 추가 -->
<input type='text' class="input3" name='fr_date' size=10 readonly maxlength=10 value='<?=$fr_date?>' onclick="new CalendarFrame.Calendar(fr_date)" >
<img src="./calendar.gif" onclick="new CalendarFrame.Calendar(fr_date)" style="vertical-align:top;cursor:pointer;">
-
<input type='text' class=input3 name='to_date' size=10 readonly maxlength=10 value='<?=$to_date?>' onclick="new CalendarFrame.Calendar(to_date)">
<img src="./calendar.gif" onclick="new CalendarFrame.Calendar(to_date)" style="cursor:pointer;vertical-align:top;">
<!-- 기간별검색 끝 -->
<select name="sfl" class="select">
<option value='lo_date'>날자로검색</option>
<option value='lo_id'>회원아이디로검색</option>
</select>
<input type="text" class="input3" name="stx" itemname='검색어' value='<?=$stx?>'>
<input type="image" src='./btn_search.gif' align="absmiddle">
<? if($stx || $fr_date){ echo $listall; } ?>
</td>
</tr>
<? if ($stx) { echo "<script>document.fsearch.sfl.value = '$sfl';</script>"; } ?>
</table>
</form>
<div id="CalendarLayer" style="display:none; width:172px; height:250px">
<iframe name="CalendarFrame" src="./lib.calendar.js.htm" width="172" height="186" border="0" frameborder="0" scrolling="no"></iframe>
</div>
<!-- ######## 검색 끝 ############ -->
총 자료 <font color="red"><b><?=$total_count?></b></font> 개
<table cellpadding="0" cellspacing="1" style="background:#cccccc;">
<tr align="center">
<td class="lo_td1">번호</td>
<td class="lo_td2">회원아이디</td>
<td class="lo_td3">로그인날자</td>
</tr>
<? for ($i=1; $row=sql_fetch_array($result); $i++) { ?>
<tr>
<td class="lo_td4"><?=$row[lo_no]?></td>
<td class="lo_td5"><?=$row[lo_id]?></td>
<td class="lo_td6"><?=$row[lo_date]?></td>
</tr>
<? }
if($total_count == '0'){ ?>
<tr bgcolor="#ffffff">
<td height="100px" colspan="3" align="center">
검색된 자료가 없습니다.
</td>
</tr>
<? } ?>
</table>
================== end ===============================================
로그인 날자는 시간까지 저장되게 했어요... 나중에 시간별로 뽑을경우 대비해서..
기간별 조회 되구요... 언제부터~ 언제까지~~~~
버튼 이미지는 따로 만들어서 사용하심되구요.
달력 소스는 전에 제가 올렸던건데..
아래주소로 가서 받으시구요...
http://sir.co.kr/bbs/board.php?bo_table=pl_dhtml_javascript&wr_id=804
그냥 단순리스트로 뽑는것인데..
원하는 모양으로 응용해서 사용하세요..
시간별/일별/월별/년간.....
오늘중 첫로그인일때 로그인회원 정보 저장...
수정하지 않은 원본 common.php 파일기준으로 설명할게요..
수정할부분은 298번째줄정도입니다....
===============================================================
// 오늘의 로그인이 될 수도 있으며 마지막 로그인일 수도 있음
// 해당 회원의 접근일시와 IP 를 저장
$sql = " update {$g4['member_table']} set mb_today_login = '{$g4['time_ymdhis']}', mb_login_ip = '{$_SERVER['REMOTE_ADDR']}' where mb_id = '{$member['mb_id']}' ";
sql_query($sql);
//여기서부터 추가....
// 출석부 저장을 위하여 추가
$sql = " insert into g4_login_member set lo_id = '{$member['mb_id']}', lo_date = '{$g4['time_ymdhis']}' ";
sql_query($sql);
/// 요기까지 common.php 파일에 추가하시면되요..
하루에 한번만 저장...
/// 아래 내용은 리스트... 파일 별도로 만들어서 저장하세요..
===============================================================
<?
include_once("./_common.php");
if (!$is_member) { // 회원이 아니라면...
echo "<script>
alert('비회원은 입장 불가합니다.');
location.href='$g4[path]/bbs/login.php?wr_id=&url=../';
</script>";
}
$sql_common = " from g4_login_member ";
$sql_search = " where (1) ";
// 로그인 날자기간별검색
if ($fr_date) { $sql_search .="AND (lo_date between '$fr_date 00:00:00' and '$to_date 23:59:59')"; }
if ($stx) {
$stxx = explode(" ", $stx);
$sql_search .= " and ( ";
switch ($sfl) {
case "lo_id" :
$sql_search .= " ($sfl = '$stx') ";
break;
case "lo_date" :
$sql_search .= " ($sfl like '%$stx%') ";
break;
default :
$sql_search .= " ($sfl like '%$stx%') ";
break;
}
$sql_search .= " ) ";
}
if ($sst)
$sql_order = " order by $sst $sod ";
else
$sql_order = " order by lo_date desc ";
$sql = " select count(*) as cnt
$sql_common
$sql_search
$sql_order ";
$row = sql_fetch($sql);
$total_count = $row[cnt];
$rows = $config[cf_page_rows];
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
if (!$page) $page = 1; // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함
$sql = " select *
$sql_common
$sql_search
$sql_order
limit $from_record, $rows ";
$result = sql_query($sql);
$listall = "<a href='$_SERVER[PHP_SELF]'><img src='./btn_search2.gif' align='absmiddle' border='0'></a>";
////////
$g4['title'] = "출석부";
include_once("./_head.php");
$qstr2 = "fr_date=$fr_date&to_date=$to_date&lo_no=$lo_id&sfl=$sfl&stx=$stx";
$pagelist = get_paging($config['cf_write_pages'], $page, $total_page, "?$qstr2&page=");
?>
<style>
.lo_td1 { width:50px;padding:5px;margin:0px;text-align:center;background:#ededed; }
.lo_td2 { width:150px;padding:5px;margin:0px;text-align:center;background:#ededed; }
.lo_td3 { width:150px;padding:5px;margin:0px;text-align:center;background:#ededed; }
.lo_td4 { width:50px;padding:5px;margin:0px;text-align:center;background:#ffffff; }
.lo_td5 { width:150px;padding:5px;margin:0px;text-align:left;background:#ffffff; }
.lo_td6 { width:150px;padding:5px;margin:0px;text-align:center;background:#ffffff; }
</style>
<!-- ############### 검색 ################# -->
<form name=fsearch method=get style="margin:0px;">
<table width="100%" cellpadding="2" cellspacing="1" bgcolor="#dddddd" align="center">
<tr height="30px" align="center" bgcolor="#ffffff">
<td style="text-align:left;padding:0px 0px 0px 5px;">
<!-- 기간별검색 추가 -->
<input type='text' class="input3" name='fr_date' size=10 readonly maxlength=10 value='<?=$fr_date?>' onclick="new CalendarFrame.Calendar(fr_date)" >
<img src="./calendar.gif" onclick="new CalendarFrame.Calendar(fr_date)" style="vertical-align:top;cursor:pointer;">
-
<input type='text' class=input3 name='to_date' size=10 readonly maxlength=10 value='<?=$to_date?>' onclick="new CalendarFrame.Calendar(to_date)">
<img src="./calendar.gif" onclick="new CalendarFrame.Calendar(to_date)" style="cursor:pointer;vertical-align:top;">
<!-- 기간별검색 끝 -->
<select name="sfl" class="select">
<option value='lo_date'>날자로검색</option>
<option value='lo_id'>회원아이디로검색</option>
</select>
<input type="text" class="input3" name="stx" itemname='검색어' value='<?=$stx?>'>
<input type="image" src='./btn_search.gif' align="absmiddle">
<? if($stx || $fr_date){ echo $listall; } ?>
</td>
</tr>
<? if ($stx) { echo "<script>document.fsearch.sfl.value = '$sfl';</script>"; } ?>
</table>
</form>
<div id="CalendarLayer" style="display:none; width:172px; height:250px">
<iframe name="CalendarFrame" src="./lib.calendar.js.htm" width="172" height="186" border="0" frameborder="0" scrolling="no"></iframe>
</div>
<!-- ######## 검색 끝 ############ -->
총 자료 <font color="red"><b><?=$total_count?></b></font> 개
<table cellpadding="0" cellspacing="1" style="background:#cccccc;">
<tr align="center">
<td class="lo_td1">번호</td>
<td class="lo_td2">회원아이디</td>
<td class="lo_td3">로그인날자</td>
</tr>
<? for ($i=1; $row=sql_fetch_array($result); $i++) { ?>
<tr>
<td class="lo_td4"><?=$row[lo_no]?></td>
<td class="lo_td5"><?=$row[lo_id]?></td>
<td class="lo_td6"><?=$row[lo_date]?></td>
</tr>
<? }
if($total_count == '0'){ ?>
<tr bgcolor="#ffffff">
<td height="100px" colspan="3" align="center">
검색된 자료가 없습니다.
</td>
</tr>
<? } ?>
</table>
================== end ===============================================
로그인 날자는 시간까지 저장되게 했어요... 나중에 시간별로 뽑을경우 대비해서..
기간별 조회 되구요... 언제부터~ 언제까지~~~~
버튼 이미지는 따로 만들어서 사용하심되구요.
달력 소스는 전에 제가 올렸던건데..
아래주소로 가서 받으시구요...
http://sir.co.kr/bbs/board.php?bo_table=pl_dhtml_javascript&wr_id=804
그냥 단순리스트로 뽑는것인데..
원하는 모양으로 응용해서 사용하세요..
시간별/일별/월별/년간.....