테스트 사이트 - 개발 중인 베타 버전입니다

사용 시간 계산하여 출력하고 입력 채택완료

Willfor716 2년 전 조회 2,423

안녕하세요.

 

사용 시작 시각 입력하고 사용 끝나는 시각을 입력하고 확인 버튼을 누르면

다음 확인 페이지에서 사용한 시간이 " 00시간 00분" 형식으로 출력되게 하고 완료 버는을 누르면

mysql '00분' 형식으로 변환되어 하나의 숫자로 입력되게 할려고 합니다.

그런데 확인페이지까지는 잘 나타나는데 계산된 db 값은 mysql db에 저장이 안되네요.

product_start 과 product_end 값은 정상적으로 입력이 되는데 계산된 total_used_minutes 값은 입력이 안되네요.

 

어떻게 하면 될까요?

 

고수님들의 감사한 조언 부탁드립니다.

 

pused_history.html 파일

</strong></p>

<p><head>

    <title>시간 계산</title>

</head>

<body>

    <form action="pused_result.php" method="post">

        <label for="product_start">사용 시작 시각:</label>

        <input type="time" id="product_start" name="product_start" required>

        


        <label for="product_end">사용 끝낸 시각:</label>

        <input type="time" id="product_end" name="product_end" required>

        


        <input type="submit" value="입력">

    </form>

</body></p>

<p><strong>

 

pused_result.php 파일은

</strong></p>

<p><form action="pused_update.php" method="post"></p>

<p><input type="hidden" name="product_start" value="<?php echo $_POST['product_start']; ?>">

<input type="hidden" name="product_end" value="<?php echo $_POST['product_end']; ?>">

<input type="hidden" name="total_used_minutes" value="<?php echo $_POST['total_used_minutes']; ?>"></p>

<p> </p>

<p>중간생략</p>

<p> </p>

<p>    <td class="hdrf-a02">• 사용 시간</td>

    <td class="hdrf-a02"><?php

                  $start_time = $_POST['product_start'];

                  $end_time = $_POST['product_end'];</p>

<p>

                $start_datetime = new DateTime($product_start);

                $end_datetime = new DateTime($product_end);</p>

<p>

                if ($start_datetime > $end_datetime) {

                    $end_datetime->modify('+1 day');

                        }</p>

<p>

                $interval = $start_datetime->diff($end_datetime);</p>

<p>                // 결과를 출력한다.

                $used_hours_minutes = $interval->format('%h시 %i분');

                $total_used_minutes = $interval->days * 24 * 60 + $interval->h * 60 + $interval->i;</p>

<p>                echo "사용 시간 : " . $used_hours_minutes . "
";

                echo "또는 " . $total_used_minutes . "분";

            ?>

    </td></p>

<p>중간생략</p>

<p><strong>

 

그래서 심지어 '분' 형식으로 된것을 표시까지 했는데도 안되네요.

사용시작시각, 사용끝낸시각인 product_start, product_end 의 값은 정상적으로 입력이 되는데

사용한 시간인 total_used_minutes 의 값은 mysql 에 입력이 안되네요.

 

pused_update.php 파일은

</strong></p>

<p><?php

include_once('./_common.php');

include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');

include_once(G5_LIB_PATH.'/register.lib.php');

include_once(G5_LIB_PATH.'/mailer.lib.php');

include_once(G5_LIB_PATH.'/thumbnail.lib.php');</p>

<p> </p>

<p>$product_start = $_POST['product_start'];

$product_end = $_POST['product_end'];

$total_used_minutes = $_POST['total_used_minutes'];</p>

<p> </p>

<p>$sql = "insert into g5_member_prodcut

                (product_start, product_end, total_used_minutes)

                values ('$product_start', '$product_end', '$total_used_minutes'

        )";</p>

<p>생략</p>

<p><strong>

 

고수님들의 감사한 조언 부탁드립니다. 꾸벅

 

 

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

답변 4개

채택된 답변
+20 포인트
2년 전

pused_update.php 에서 $product_start, $product_end 값을 제대로 읽을수 있다면

$total_used_minutes 를 다시 계산해보는것도 방법일것 같고

그와 별개로 g5_member_prodcut 테이블 각 필드 타입 정보가 확인되어야

db 정보 저장 문제 해결에 도움이 될것 같습니다.

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

답변에 대한 댓글 2개

W
Willfor716
2년 전
답변 정말 감사드립니다.

pused_result.php 에서 total_used_minutes 는 '시간 분' 형식이나 '분' 형식 둘다 정확하게 계산되어서 출력이 되거든요.

테이블은 이렇게 되어 있습니다.
[code]
CREATE TABLE `g5_member_prodcut` (
`mb_no` INT(11) NOT NULL AUTO_INCREMENT,
`mb_id` VARCHAR(20) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
`product_start` VARCHAR(20) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
`product_end` VARCHAR(20) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
`total_used_minutes` VARCHAR(20) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
PRIMARY KEY (`mb_no`) USING BTREE,
INDEX `mb_id` (`mb_id`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=9
;
[/code]

추가 적인 조언 부탁 드려도 될까요?

정말 감사합니다.
배르만
2년 전
다음 수정코드가 도움이 될지 모르겠습니다.

+ pused_result.php
- 중간부에 있던 코드 대부분을 라인 위쪽으로 이동
- $total_used_minutes 는 POST 값이 아니므로 그에 맞게 표현
[code]
<?php
$start_time = $_POST['product_start'];
$end_time = $_POST['product_end'];

//$start_datetime = new DateTime($product_start);
//$end_datetime = new DateTime($product_end);
$start_datetime = new DateTime($start_time);
$end_datetime = new DateTime($end_time);

if ($start_datetime > $end_datetime) {
$end_datetime->modify('+1 day');
}

$interval = $start_datetime->diff($end_datetime);
// 결과를 출력한다.
$used_hours_minutes = $interval->format('%h시 %i분');
$total_used_minutes = $interval->days * 24 * 60 + $interval->h * 60 + $interval->i;
?>
<form action="pused_update.php" method="post">
<input type="hidden" name="product_start" value="<?php echo $_POST['product_start']; ?>">
<input type="hidden" name="product_end" value="<?php echo $_POST['product_end']; ?>">
<input type="hidden" name="total_used_minutes" value="<?php echo $total_used_minutes; ?>">

중간생략

<td class="hdrf-a02">• 사용 시간</td>
<td class="hdrf-a02"><?php
echo "사용 시간 : " . $used_hours_minutes . "<br>";
echo "또는 " . $total_used_minutes . "분";
?>
</td>
중간생략

<input type="submit">
</form>
[/code]

+ pused_update.php
- 마지막 라인에 sql_query($sql); 추가
[code]
<?php
include_once('./_common.php');
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
include_once(G5_LIB_PATH.'/register.lib.php');
include_once(G5_LIB_PATH.'/mailer.lib.php');
include_once(G5_LIB_PATH.'/thumbnail.lib.php');

$product_start = $_POST['product_start'];
$product_end = $_POST['product_end'];
$total_used_minutes = $_POST['total_used_minutes'];

$sql = "insert into g5_member_prodcut
(product_start, product_end, total_used_minutes)
values ('$product_start', '$product_end', '$total_used_minutes'
)";

sql_query($sql);
?>
[/code]

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

웅푸
2년 전

아직 해결안되었으면 참조하세요 화이팅!

pused_history.html
<input type="hidden" name="total_used_minutes" value="<?php echo $total_used_minutes; ?>">

 

pused_result.php
$start_datetime = new DateTime($start_time);
$end_datetime = new DateTime($end_time);

 

pused_result 에서는 total_used_minutes 변수를 대신 사용
echo "또는 " . $total_used_minutes . "분";

 

used_update.php 
이건 그냥그대로

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

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

wodud3073
2년 전

    $product_start = strtotime($_POST['product_start']);

 

    // 날짜 시분초

    date('Y-m-d H:i:s',$product_start);

 

    // 날짜

    date('Y-m-d',$product_start);

 

    // +1 day한 다음날짜

    date('Y-m-d',$product_start+86399);

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

답변에 대한 댓글 1개

W
Willfor716
2년 전
답변 정말 감사드립니다.

말씀하신 내용은 어떻게 적용하는 건가요?
넣어 봤는데 안되네요. ㅠㅠ
제가 완전 초보다 보니 좀더 설명 부탁드려도 될까요?

정말 감사드립니다.

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

wodud3073
2년 전

int형식이면 unixtime으로 변환해서 넣어보세요. 

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

답변에 대한 댓글 1개

W
Willfor716
2년 전
답변 너무나 감사드립니다.

total_used_minutes 의 데이터 유형은 VARCHAR 로 되어 있습니다.
말씀하신 UNIXTIME 은 없는데 어떻게 변환하는 건가요?

제가 사용하고 있는 프로그램은 HeidiSQL 입니다.

감사합니다.

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

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

로그인