기타 달력기능을 추가한 출석부(기존 출석부 버그 수정)
페이지 정보
본문
기존 출석부 버그
1.출석 1등 보너스 지급시 문제점
(예를 들어 1등 출석 보너스 지급점수가 500일 경우
그날 1등 출석자의 포인트가 400점이며
2등 출석자의 포인트가 500점일때
1등에게 500점의 출석 보너스 지급이 되면서
1등 출석자는 900점이 되므로 2등과 순서가 바끼게 됩니다.
그럼 2등과 순서가 바끼는 즉시 2등이었던 출석자에게도 1등 보너스 점수인 500점이 지급되어
결론적으로는
1등 2등 순서는 원래되로 돌아오나 1등 2등 둘다에게 1등 보너스 점수가 지급되는 현상)
2.F5(리플레쉬) 사용시 문제점
(기존 그누보드 특성상 하루가 지나는 시점에서 페이지 이동이나 F5로 페이지 리로딩시 자동으로
회원테이블에 최초로그인 정보를 업데이트 하기 때문에
이를 악용하여 하루가 지나가는 시점 바로 전부터 F5를 연타하여 출석 1등을 하는 문제점)
기능추가
기존 달력은 오늘 출석자만 볼수 있었는데 달력스킨을 접목시켜 해당일에 출석자 순서를
다시 볼수 있습니다.
(새로운 테이블을 만들어서 해당일에 출석정보를 저장하며 최초로그인시 회원의 포인트를 저장하여
기존 출석부 버그 1번을 고쳤습니다.)
<출석부 설치방법>
1. config.php
파일을 여신후
테이블명 상수 선언하는 부분에
$g4['mem_table'] = $g4['table_prefix'] . "memcheck"; // 로그인 정보 테이블
을 추가합니다.
2. common.php
파일을 여신후
// 첫 로그인 포인트 지급
insert_point($member['mb_id'], $config['cf_login_point'], "{$g4['time_ymd']} 첫로그인", "@login", $member['mb_id'], $g4['time_ymd']);
을 찾으신후
// 첫 로그인 포인트 지급
//insert_point($member['mb_id'], $config['cf_login_point'], "{$g4['time_ymd']} 첫로그인", "@login", $member['mb_id'], $g4['time_ymd']);
으로 수정합니다.
(출석 포인트 지급은 login_check.php에서 주기 위함입니다.)
3. bbs/login_check.php
파일을 여신후
// 아이디 자동저장
if($id_save) {
set_cookie('ck_id_save', $mb[mb_id], time()+2592000);
}else{
set_cookie('ck_id_save', '', 0);
}
을 찾으신후
// 오늘 처음 로그인 이라면
$sql0 = " select count(*) as cnt from $g4[mem_table] where mb_id = '$mb_id' and mb_today = '$g4[time_ymd]' ";
$row0 = sql_fetch($sql0);
if ($row0['cnt']) {
// 체크 되었으면 패스.
} else {
// 첫 로그인 포인트 지급
insert_point($mb_id, $config['cf_login_point'], "{$g4['time_ymd']} 첫로그인", "@login", $mb_id, $g4['time_ymd']);
$sql2 = " select * from $g4[member_table] where mb_id = '$mb_id' ";
$row2 = sql_fetch($sql2);
// 해당 회원의 접근일시와 IP 를 저장
$sql4 = " insert into $g4[mem_table]
set mb_id = '$mb_id',
mb_login_ip = '$_SERVER[REMOTE_ADDR]',
mb_today = '$g4[time_ymd]',
mb_today_login = '$g4[time_ymdhis]',
mb_point = '$row2[mb_point]' ";
sql_query($sql4);
}
을 추가합니다.
4. 압축푸신 mydiary.2008 파일을
bbs/calendar 폴더에 복사해줍니다.
5. 압축푸신 upgrade_mem.php 파일을
adm 폴더에 복사해줍니다.
6. 압축푸신 attendance 폴더를
skin/board 폴더에 복사해줍니다.
7. 관리자 아이디로 로그인하신후
http://홈페이지주소/adm/upgrade_mem.php 를 한번 실행시켜
mem_table 을 생성합니다.
<게시판 설정방법>
게시판 설정 보조 필드에
1번 보조 필드에 필히 mydiary.0008 입력해주세요.
(자동으로 토요일,일요일 색깔이 바끼지만 공휴일은 출력이 안되므로 해당파일을 불러와
공휴일을 추가해주기 위함입니다.
해가 바끼면 그해에 맞게 다시 mydiary.0009 이런식으로 만들어 업로드해주어야 합니다.)
2번 보조 필드는 출석자 1~10등까지 보너스 점수를 줄지를 설정하는곳입니다.
(예를 들어 2번 보조 필드에
z6_1/10/9/8/7/6/5/4/3/2/1
입력했을시 z6_1 은 보너스 점수를 기준으로 할 게시판 테이블 명입니다.
10/9/8/7/6/5/4/3/2/1
은 z6_1에서 마지막글의 번호를 뽑아와
1등에게는 뽑아온 번호수 * 10
2등에게는 뽑아온 번호수 * 9
3등에게는 뽑아온 번호수 * 8
4등에게는 뽑아온 번호수 * 7
5등에게는 뽑아온 번호수 * 6
6등에게는 뽑아온 번호수 * 5
7등에게는 뽑아온 번호수 * 4
8등에게는 뽑아온 번호수 * 3
9등에게는 뽑아온 번호수 * 2
10등에게는 뽑아온 번호수 * 1
점수를 보너스로 지급해 줄수 있으며
1등만 주고 싶으시면
z6_1/10
만 써주시면됩니다.
보너스 점수를 주고 싶은 등수만큼 / 를 이용하여 적어주시되 최고 10등까지만 줄수 있습니다.)
3번 보조 필드는 출석자 1~10등까지 보너스 점수를 줄지를 설정하는곳이긴 하나 2번 보조필드와는
조금다릅니다.
(3번 보조 필드를 사용하실려면은 2번 보조 필드는 공백이어야 합니다.
예를 들어 3번 보조 필드에
10000/9000/8000/7000/6000/5000/4000/3000/2000/1000
1등에게는 10000
2등에게는 9000
3등에게는 8000
4등에게는 7000
5등에게는 6000
6등에게는 5000
7등에게는 4000
8등에게는 3000
9등에게는 2000
10등에게는 1000
점수를 보너스로 지급해 줄수 있으며
1등만 주고 싶으시면
10000
만 써주시면됩니다.
보너스 점수를 주고 싶은 등수만큼 / 를 이용하여 적어주시되 최고 10등까지만 줄수 있습니다.)
* 2번 보조 필드 와 3번 보조 필드를 공백으로 놓으시면 출석 보너스 점수는 안줍니다.
4번 보조 필드는 출석자 출력시 운영자를 포함할건지 뺄껀지를 결정짖는겁니다.
(운영자를 출석부에서 제외 시키고 싶으시면
4번 보조 필드에
on
이라고 적으시면 운영자는 리스트에서 제외가 됩니다.)
* 버그가 발생하면 알려주시고요 추천좀 팍팍 해주세요 ^^
첨부파일
-
출석부.zip (101.8K)
17회 다운로드 | DATE : 2008-01-25 23:58:07
댓글목록
알라님의 댓글
알라쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일
자료 : http://sir.co.kr/bbs/board.php?bo_table=g4_skin&wr_id=65937&sca=&sfl=wr_subject&stx=%C3%E2%BC%AE&sop=and
문제가 있는 곳 : http://onuri.nanzoa.com/bbs/board.php?bo_table=10_1
출석부 시작시간과 출석시간 표기문제입니다.
시작시간을 06:00:00 으로 하면 출석시간인데도 불구하고 출석시간이 표기되지 않습니다.
시작시간을 00:00:00 으로 하면 출석시간이 아닌데도 불구하고... 출석시간이 00:38:32 로 표기됩니다.
시간체크는
// 시간 체크
$str_point_time = date("Y-m-d 06:00:00"); // 포인트 시작시간
$end_point_time = date("Y-m-d 24:00:00"); // 포인트 종료시간
$today_time = date("Y-m-d H:i:s"); // 현재시간
으로 되어있습니다.
수정전에는 포인트시작시간이 00:00:00 으로 되어있었습니다.
도움 부탁드립니다....
아래 소스를 참고하시기 바랍니다.
<?
// 시작시간
$str_today_time = date("Y-m-d 00:00:00");
$y_today = substr($today_date,0,4);
$m_today = substr($today_date,4,2);
$d_today = substr($today_date,6,2);
$today = $y_today."-".$m_today."-".$d_today;
if ($today_date) {
if ($board[bo_4] =='on') {
//관리자 제외후 출석부 테이블 연결
$sql = " select * from $g4[mem_table] where mb_id <> '$config[cf_admin]' and mb_today = '$today' order by mb_today asc, mb_point asc ";
$result = sql_query($sql);
} else {
// 출석부 테이블 연결
$sql = " select * from $g4[mem_table] where mb_today = '$today' order by mb_today_login asc, mb_point asc ";
$result = sql_query($sql);
}
} else {
if ($board[bo_4] =='on') {
//관리자 제외후 출석부 테이블 연결
$sql = " select * from $g4[mem_table] where mb_id <> '$config[cf_admin]' and mb_today_login >= '$str_today_time' order by mb_today_login asc, mb_point asc ";
$result = sql_query($sql);
} else {
// 출석부 테이블 연결
$sql = " select * from $g4[mem_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++) {
$sql3 = " select * from $g4[member_table] where mb_id = '$row[mb_id]' ";
$row3 = sql_fetch($sql3);
// 닉네임
$name = get_sideview($row3[mb_id], $row3[mb_nick], $row3[mb_email], $row3[mb_homepage]);
// 접속자테이블 연결
$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 = "";
}
// 랭킹
$rank = $i + 1;
// 색상
if ($member['mb_id'] == $row['mb_id']) {
$list = "2";
} else {
$list = ($i%2);
}
// 시간 체크
$str_point_time = date("Y-m-d 06:00:00"); // 포인트 시작시간
$end_point_time = date("Y-m-d 24:00:00"); // 포인트 종료시간
$today_time = date("Y-m-d H:i:s"); // 현재시간
if ($board[bo_2]) {
// 1등 포인트 주기