고수님께 질문드립니다.
본문
<SCRIPT language="JavaScript">
start = 0;
function timer(){
if(start>=0){
times.innerHTML=start;
setTimeout('timer()',1000);
}
start++;
}
</script>
<body onload="timer();">
<FORM name="fboardlist" METHOD="POST" action='./update.php'>
<input type='hidden' name='bo_table' value='<?php echo $bo_table?>'>
♤ <span id="times"></span>초 / 60초 이내로 제출하셔야 합니다.
<input TYPE="submit" value="제출" class="myBtn_confirm f_white">
</form>
위 소스데로 하믄 타이머가 0부터 시간이 초단위로 흐르기 시작합니다.
제출 버튼을 눌렀을때의 타이머의 시간을 저장하고 싶습니다. (60초 이내로 제출버튼을 눌러야 하는데 몇초에 버튼을 눌럿는지를 저장하려고요)
어떻게 해야 하나요? 히든값에 담을 수는 없나요?
고수님들 힌트 좀 부탁드립니다.
!-->
답변 2
onsubmit 이벤트를 활용하여
현재 타이머 값을 히든 필드에 설정한 후 폼을 제출하면~,
이를 위해 <input type='hidden' name='elapsed_time' id='elapsed_time'> 필드를 추가,
폼 제출 시 elapsed_time 값에 start 변수를 저장하도록 하고 서버 측에서
$_POST['elapsed_time'] 값을 받아 몇 초에 제출되었는지를 확인하면 되지않을까 싶습니다.
*히든 필드를 추가하고, 폼의 onsubmit 이벤트에서 현재 초 값을 설정하도록 소스 변경.
<SCRIPT language="JavaScript">
start = 0;
function timer(){
if(start >= 0){
document.getElementById("times").innerHTML = start;
setTimeout(timer, 1000);
}
start++;
}
function setElapsedTime(){
document.getElementById("elapsed_time").value = start;
}
</script>
<body onload="timer();">
<FORM name="fboardlist" METHOD="POST" action='./update.php' onsubmit="setElapsedTime();">
<input type='hidden' name='bo_table' value='<?php echo $bo_table?>'>
<input type='hidden' name='elapsed_time' id='elapsed_time' value='0'>
♤ <span id="times"></span>초 / 60초 이내로 제출하셔야 합니다.
<input TYPE="submit" value="제출" class="myBtn_confirm f_white">
</form>
*update.php 파일에서 $_POST['elapsed_time'] 값을 받아
60초 이내에 제출되었는지 확인하고, 초과 시 제출을 막는 서버 측 검증 로직 추가.
<?php
if (!defined('_GNUBOARD_')) exit; // 보안 설정
$bo_table = $_POST['bo_table'];
$elapsed_time = isset($_POST['elapsed_time']) ? intval($_POST['elapsed_time']) : 0;
if ($elapsed_time > 60) {
echo "<script>alert('제출 시간이 초과되었습니다. 다시 시도해주세요.'); history.back();</script>";
exit;
}
// 정상적인 제출 프로세스 진행
?>
<SCRIPT language="JavaScript">
start = 0;
function timer(){
if(start>=0){
times.innerHTML=start;
setTimeout('timer()',1000);
}
$("#time").val(start);
start++;
}
</script>
<body onload="timer();">
<FORM name="fboardlist" METHOD="POST" action='./update.php'>
<input type='hidden' name='bo_table' value='<?php echo $bo_table?>'>
<input type='hidden' name='time' id='time' value=''>
♤ <span id="times"></span>초 / 60초 이내로 제출하셔야 합니다.
<input TYPE="submit" value="제출" class="myBtn_confirm f_white">
</form>
답변을 작성하시기 전에 로그인 해주세요.