insert update 순차 적용 방법이 궁금합니다.

insert update 순차 적용 방법이 궁금합니다.

QA

insert update 순차 적용 방법이 궁금합니다.

본문

미나님이 도움 주셔서

insert, update 두개의 파일을 하나로 합칠수 있게 되었습니다.

현재는   

5555.php?cccc=63B17372&action=in      전송시 in

5555.php?cccc=63B17372&action=out    전송시 out

정상적으로 DB에 저장이 됩니다.

 

 

변경하고자 하는 부분은요

5555.php?cccc=63B17370     전송시 in

5555.php?cccc=63B17376     전송시 in

5555.php?cccc=63B17377     전송시 in

5555.php?cccc=63B17378     전송시 in

5555.php?cccc=63B17379     전송시 in

5555.php?cccc=63B17372     전송시 in

5555.php?cccc=63B17372     전송시 out

5555.php?cccc=63A17373     전송시 in

5555.php?cccc=63B17372     전송시 in

5555.php?cccc=63B17374     전송시 in

5555.php?cccc=63A17373     전송시 out

5555.php?cccc=63A17373     전송시 in

5555.php?cccc=63B17374     전송시 out

5555.php?cccc=63B17372     전송시 out

 

위와 같이 순차적으로 전송될때  동일한 값이 전송이 될경우

in, out이 번갈아 가면서 작동되게 하고 싶습니다.

 

어떻게 해야 하나요?

 

 


 
<?php
$conn = mysqli_connect("localhost", "sun76841", "ZXASqw121!", "sun76841");
 
$zzzz = $_GET['cccc'];
$action = isset($_GET['action']) ? $_GET['action'] : 'in';
$time = date("Y-m-d H:i:s"); // 현재시간 저장
$today = date("Y-m-d");
 
if ($action !== 'in' && $action !== 'out') {
    echo "잘못된 action 값입니다.";
    exit;
}
 
if ($action === 'in') {
    // 출근 처리 (중복 체크 후 insert)
    $check_sql = "SELECT COUNT(*) FROM very_work_time WHERE work_total = '$zzzz' AND DATE(work_datetime) = '$today'";
    $check_result = mysqli_query($conn, $check_sql);
    $check_row = mysqli_fetch_row($check_result);
    if ($check_row[0] == 0) {
        $sql = "INSERT INTO very_work_time (work_id, work_name, work_group, work_intime, work_outtime, work_datetime, work_ip, work_total)
                SELECT id, work_name, work_group, '$time', '', '$time', '{$_SERVER['REMOTE_ADDR']}', '$zzzz'
                FROM very_work_list
                WHERE work_hp = '$zzzz'";
       
        if (!mysqli_query($conn, $sql)) {
            echo "에러: " . $sql . "<br>" . mysqli_error($conn);
            exit;
        }
    }
} else {
    // 퇴근 처리 (update)
    $sql  = "UPDATE very_work_time
             SET work_outtime = '$time'
             WHERE id IN (
                 SELECT a.id FROM (
                     SELECT id FROM very_work_time WHERE work_total = '$zzzz' ORDER BY work_datetime DESC LIMIT 1
                 ) a
             )";
    if (!mysqli_query($conn, $sql)) {
        echo "에러: " . $sql . "<br>" . mysqli_error($conn);
        exit;
    }
}
 
    if($action === 'in'){
        echo '<img src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" alt="Google Logo">';
    }else{
        echo '<img src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" alt="Google Logo">';
    }
 
?>
 

이 질문에 댓글 쓰기 :

답변 2

안녕하세요...

 님

 

본문에 아이디/비밀번호 노출되어있으니, 꼭 변경하시길 바라며,

아래 코드 참조 하시길 바랍니다.

 

출근 이력이 있다면 퇴근 / 퇴근 이후 다시 찍었다면 출근 형태입니다.

코드가 바뀌었으며 액션이 삭제 되었습니다.

 

덧. 미나 아니고 미니 입니다 하하^^;

 


<?php
$conn = mysqli_connect("localhost", "sun76841", "ZXASqw121!", "sun76841");
 
function executeQuery($conn, $sql) {
    if (!mysqli_query($conn, $sql)) {
        echo "에러: " . $sql . "<br>" . mysqli_error($conn);
        exit;
    }
}
 
function insertWorkTime($conn, $zzzz, $time, $ip) {
    $insert_sql = "INSERT INTO very_work_time (work_id, work_name, work_group, work_intime, work_outtime, work_datetime, work_ip, work_total)
                   SELECT id, work_name, work_group, '$time', '', '$time', '$ip', '$zzzz'
                   FROM very_work_list
                   WHERE work_hp = '$zzzz'";
    executeQuery($conn, $insert_sql);
}
 
function updateWorkOutTime($conn, $id, $time) {
    $update_sql = "UPDATE very_work_time SET work_outtime = '$time' WHERE id = '$id'";
    executeQuery($conn, $update_sql);
}
 
$zzzz = $_GET['cccc'];
$time = date("Y-m-d H:i:s");
$today = date("Y-m-d");
$ip = $_SERVER['REMOTE_ADDR'];
 
$check_sql = "SELECT id, work_intime, work_outtime FROM very_work_time WHERE work_total = '$zzzz' AND DATE(work_datetime) = '$today' ORDER BY work_datetime DESC LIMIT 1";
$check_result = mysqli_query($conn, $check_sql);
 
if ($check_result && mysqli_num_rows($check_result) > 0) {
    $row = mysqli_fetch_assoc($check_result);
    if (empty($row['work_outtime'])) {
        updateWorkOutTime($conn, $row['id'], $time);
        echo '<img src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" alt="퇴근 처리 완료">';
    } else {
        insertWorkTime($conn, $zzzz, $time, $ip);
        echo '<img src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" alt="재출근 처리 완료">';
    }
} else {
    insertWorkTime($conn, $zzzz, $time, $ip);
    echo '<img src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" alt="출근 처리 완료">';
}
?>

in/out 인자를 받지 않으니 위에서 DB상에 해당하는 데이터가 있는지 확인하고 직접 in / out 값을 만들어야겠죠?

select count(*) as cnt FROM very_worktime WHERE work_total='$zzzz' AND work_outtime='';

쿼리를 수행하시고 cnt 값이 1 이상이면 $action = 'out', 0이면 in 처리하시면 되겠네요

 

답변을 작성하시기 전에 로그인 해주세요.
전체 46
QA 내용 검색

회원로그인

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