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

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

QA

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

답변 2

본문

안녕하세요.

 

몇일동안 해결을 못하고 씨름하고 있지만...

해결이 안되네요.

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

 

pused_history.html 파일에

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

 

다음 확인 페이지인 pused_result.php 에서

'사용 시작 시각 :   시  분'

'사용 끝낸 시각:  시   분'

'사용한 시간: " 00시간 00분"  분형식 " 분" '

이렇게 출력되게 하고 완료 버는을 누르면

 

다음 페이지인 pused_update.php 에서

mysql '00분' 형식으로 입력되게 할려고 합니다.

 

그런데 pused_result.php 에서는 보여지는 '사용한 시간: " 00시간 00분"  분형식 " 분" ' 의 값이

mysql db에 저장이 안되네요.

 

그래서 중간에 pused_result1.php 페이지를 만들어서

'사용한 시간: " 00시간 00분"  분형식 " 분" ' 의 값 을 가져오나 테스트 해봤는데 못가져오더라구요.

 

다 똑같이 했는데 왜 안되는 걸까요.

감사한 조언 부탁드립니다.

 

 

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_result01.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']; ?>">
중간생략
 <tr>
    <td class="hdrf-a02">• 사용 시작 시각</td>
    <td class="hdrf-a02"><?php if (isset($_POST['product_start'])) {
                                    $inputValue = $_POST['product_start'];
                                    echo htmlspecialchars($inputValue) . "";
                                    }
                                 ?>
    </td>
</tr>
<tr>
    <td class="hdrf-a02">• '사용 끝낸 시각</td>
    <td class="hdrf-a02"><?php if (isset($_POST['product_end'])) {
                                    $inputValue = $_POST['product_end'];
                                    echo htmlspecialchars($inputValue) . "";
                                    }
                                 ?>
    </td>
</tr>
<tr>
    <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>
</tr>
중간생략

 

그래서 pused_result01.php 파일을 만들어

"total_used_minutes" 값을 가져오나 확인해 봤더니 못가져 오더라구요. ㅠㅠ


<tr>
    <td class="hdrf-a02">• 사용 시간</td>
    <td class="hdrf-a02"><?php if (isset($_POST['total_used_minutes'])) {
                                    $inputValue = $_POST['total_used_minutes'];
                                    echo htmlspecialchars($inputValue) . " 분";
                                    }
                                 ?>
    </td>
</tr>
</tbody>
</table>

<?php
 echo "'사용 시간: " . $total_used_minutes . "분";
?>

 

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

 

이렇게 만들어 product_start, product_end 값은 정상적으로 입력이 됩니다.

 

무엇이 잘못되었을까요?

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

 

 

이 질문에 댓글 쓰기 :

답변 2

<input type="hidden" name="total_used_minutes" 
value="<?php echo $_POST['total_used_minutes']; ?>">
여기를

계산식 밑으로 옮기세요

<form action="pused_result01.php" method="post">
<input type="hidden" name="total_used_minutes" value="<?php echo $_POST['total_used_minutes']; ?>">

 밑에서 계산하고 넘기는 input은 위에 있는데 이게 문제인지까지는 잘 모르겠네요.

      $used_hours_minutes = $interval->format('%h시 %i분');
      $total_used_minutes = $interval->days * 24 * 60 + $interval->h * 60 + $interval->i;
      ?>
    </td>

소스보다는 먼저 데이타베이스 스키마형식 값을 저장하는 컬럼의 데이터 형식이 MySQL에서 지원하는 시간 관련 데이터 형식과 정확히 일치하는지 확인해 주셔야합니다.

이것때문에 필요없는 코딩수정에 시간낭비가 많습니다.

스트레스도 이만저만 이아닙니다.

그래서 꼭 확인 또확인이 필요합니다.


보통 시간 관련 데이터를 저장할 때는 TIME, DATETIME, TIMESTAMP 등의 데이터 형식을 사용합니다. 
데이터 형식이 일치하지 않으면 저장에 문제가 발생할 수 있습니다.

사용한 시간 값을 어떤 형태로 MySQL에 저장하려고 하는지 확인하시고, 또한 시간 값을 정상적인 형식에 맞춰서 저장 해야합니다.
예를 들어, '00시간 00분' 형태의 문자열로 저장하려면 필요한 변환이나 포맷팅 작업을 해야 한다는 거죠.

소스는별문제 없어보이니 먼저 이부분을 확인해보시고 다음소스부분에 접근하시면될것 같습니다.

답변 감사드립니다.

데이터베이스는 이렇게 되어 있구요.
product_start 와 product_end 는 정상적으로 입력이 되거든요.
그런데...
total_used_minutes 가 입력이 안네요.
"분" 형식으로 출력되는 거기 때문에 숫자만 입력되는 거라서 INT 형식으로도 해 봤는데 안되구요.

말씀하신 부분은 어떻게 해야 하는 걸까요?
추가 조언 부탁드려도 될까요?
감사합니다.


CREATE TABLE `g5_member_prodcut` (
    `mb_no` INT(11) NOT NULL AUTO_INCREMENT,
    `mb_id` VARCHAR(20) NULL DEFAULT '' COLLATE 'utf8_general_ci',
    `mb_datetime` TIMESTAMP NOT NULL DEFAULT current_timestamp(),
    `mb_date` DATE NOT NULL,
    `product_start` VARCHAR(10) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci'
    `product_end` VARCHAR(10) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
    `total_used_minutes` VARCHAR(10) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
    PRIMARY KEY (`mb_no`) USING BTREE,
    INDEX `mb_datetime` (`mb_datetime`) USING BTREE,
    INDEX `mb_id` (`mb_id`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=28
;

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