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

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

QA

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

답변 4

본문

안녕하세요.

 

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

다음 확인 페이지에서 사용한 시간이 " 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 
이건 그냥그대로

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #php ×
전체 15,331
© SIRSOFT
현재 페이지 제일 처음으로