phpmyadim datetime 값과 여분필드 시간 데이터 값 차이.. 채택완료

안녕하세요 출석게시판을 제작하고있는데 해당 시간차이가 나서 혹시 해결방법이 있을지 해서 질문드립니다.

 

변수로 

 

$selday = $year.sprintf("%02d",$month).sprintf("%02d",$day);

 

form 안에

 

<input type="hidden" name="wr_1" value="<?php echo $selday ?>">

하니

 

2112614352_1717135791.4353.png

 

이렇게 몇초 혹은 15초까지도 차이가 나더라구요 그래서 아래에

 

 

Copy
$today = $yesterday['year'].sprintf("%02d",$yesterday['mon']).sprintf("%02d",$yesterday['mday']);

    // 전날 출석체크
    $row = sql_fetch("select wr_id, wr_10 from $write_table where mb_id = '{$member['mb_id']}' and wr_is_comment = '0' and wr_datetime = '{$today}' ");
    if($row['wr_id']) { //출석했을 경우 - 개근
        $wr_10 = (int)$row['wr_10'] + 1; //전날 개근일수에 1일 더함
    } else { //아닐 경우 오늘 출석만 반영
        $wr_10 = 1;
    }

 

update.tail.php 파일에 wr_1 값으로  계산되는 방식이라서 12시 땡하자 마자 출석을 해버리면

wr_datetime 에는 오늘 날짜인데 wr_1데이터는 몇초 늦게 입력되서 어제날자로 잡혀 개근일이 초기화 되버리는 경우가 있네요 ㅠㅠ

 

해결방법이있을까요

 

아니면 12시 1분 ~ 11시 59분 까지만 출석버튼을 누를수있게 설정하는 방법이있거나 예제가 있으면 주소링크 부탁드립니다 혼자해결하려니 한계가 와서 질문드립니다

 

감사합니다.

 

답변 2개

채택된 답변
+20 포인트

아래의 코드를 참고해 보시겠어요..

 

update.tail.php

 

$today = date("Ymd");
$now = date("H:i");
$startTime = "00:01";
$endTime = "23:59";

// 출석 가능한 시간 범위 확인
if ($now >= $startTime && $now <= $endTime) {
    // 전날 출석체크
    $yesterday = date("Ymd", strtotime("-1 day"));
    $row = sql_fetch("SELECT wr_id, wr_10 FROM $write_table WHERE mb_id = '{$member['mb_id']}' AND wr_is_comment = '0' AND wr_1 = '$yesterday'");

    if ($row['wr_id']) { // 출석했을 경우 - 개근
        $wr_10 = (int)$row['wr_10'] + 1; // 전날 개근일수에 1일 더함
    } else { // 아닐 경우 오늘 출석만 반영
        $wr_10 = 1;
    }

    // 출석 데이터 업데이트
    sql_query("UPDATE $write_table SET wr_10 = '$wr_10' WHERE wr_id = '{$row['wr_id']}'");
} else {
    echo '출석 시간은 00:01 ~ 23:59입니다.';
    exit;
}
 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

<?php
$allday = date("Ymd");
$allnow = date("H:i");
$startTime = "00:00";
$endTime = "00:02";
?>
<?php if ($allnow >= $startTime && $allnow <= $endTime) {?>
<button type="button" onclick="swal('출석시간 이후 출석가능','00시 02분 이후','info')" class="check_btn">출석</button>
<?} else {?>
<?php if ($is_member) {?>
<button type="submit" class="check_btn" id="list_write_submit" <?php echo $wr_disabled; ?> accesskey="s">출석</button>
<?} else {?>
<button type="button" onclick="swal('회원만 이용 가능합니다.','로그인하세요','info')" class="check_btn">출석</button>
<?}?>
<?}?>
이렇게 처리하니 간단하네요 ㅎㅎ 덕분에 해결했습니다.

댓글을 작성하려면 로그인이 필요합니다.

출석을 시도할때 어떤 이유에서 서버 딜레이가 생기고

그로 인해 넘긴 값이 바로 등록 되지 못하면서 차이가 발생하는 가능성이 있을것 같습니다.

 

위 상황을 가정하면

12시 1분 ~ 11시 59분 까지만 출석버튼을 누를수있게 설정하는 방법은

해결책이 되지 않을것 같습니다.

 

https://github.com/gnuboard/gnuboard5/blob/master/bbs/write_update.php#L134

사용하는 스킨 경로에 write_update.head.skin.php 파일을 생성하고

다음처럼 적용하는 방법이 도움이 될지 모르겠습니다.

Copy
<?php

$wr_1 = G5_TIME_YMDHIS;

?>
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

서버 딜레이가 생겨서 저렇게 처리되는거 같더라구요

그래서

"위 상황을 가정하면

12시 1분 ~ 11시 59분 까지만 출석버튼을 누를수있게 설정하는 방법은

해결책이 되지 않을것 같습니다. "

이방법으로 일단 처리를 해뒀는데

[code]
$tmp = sql_fetch("select count(wr_id) as cnt from {$write_table} where wr_is_comment = 0 and wr_reply = '' and mb_id = '{$member['mb_id']}' and left(wr_datetime,10) = '".G5_TIME_YMD."'");

if (intval($tmp['cnt']) > 0) {
alert("이미 출석 하였습니다.");
goto_url(short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table));
}
[/code]

헤드 파일은 이미 생성해서 저렇게 짜여저 있는데 헤드파일 에서 w_1 값을 처리 하도록 해봤는데도 시간대가 맞지 않더라구요 ㅠㅠ

그래서 텀을 주고 하려구요 서버 문제생기지 않는이상 2분차이는 안날거같아서 ㅠㅠ

답변 감사드립니다.

채택을 두개할수있으면 좋으련만 ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

이 게시판은 회원만 글쓰기가 가능합니다. 로그인해 주세요.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고