사용 시간 계산하여 출력하고 입력

사용 시간 계산하여 출력하고 입력

QA

사용 시간 계산하여 출력하고 입력

본문

안녕하세요.

 

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

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

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

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

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

 

어떻게 하면 될까요?

 

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

 

pused_history.html 파일


<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>
        <br>
        <label for="product_end">사용 끝낸 시각:</label>
        <input type="time" id="product_end" name="product_end" required>
        <br>
        <input type="submit" value="입력">
    </form>
</body>

 

pused_result.php 파일은


<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 $_POST['total_used_minutes']; ?>">
 
중간생략
 
    <td class="hdrf-a02">• 사용 시간</td>
    <td class="hdrf-a02"><?php
                  $start_time = $_POST['product_start'];
                  $end_time = $_POST['product_end'];

                $start_datetime = new DateTime($product_start);
                $end_datetime = new DateTime($product_end);

                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;
                echo "사용 시간 : " . $used_hours_minutes . "<br>";
                echo "또는 " . $total_used_minutes . "분";
            ?>
    </td>
중간생략

 

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

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

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

 

pused_update.php 파일은


<?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'
        )";
생략

 

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

 

 

이 질문에 댓글 쓰기 :

답변 4

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

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

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

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

답변 정말 감사드립니다.

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

테이블은 이렇게 되어 있습니다.


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
;


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

정말 감사합니다.

다음 수정코드가 도움이 될지 모르겠습니다.

+ pused_result.php
- 중간부에 있던 코드 대부분을 라인 위쪽으로 이동
- $total_used_minutes 는 POST 값이 아니므로 그에 맞게 표현


<?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>


+ pused_update.php
- 마지막 라인에 sql_query($sql); 추가

<?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);
?>                                                                       

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

답변 너무나 감사드립니다.

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

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

감사합니다.

    $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);

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

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 
이건 그냥그대로

답변을 작성하시기 전에 로그인 해주세요.
전체 15,331
QA 내용 검색
filter #php ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT