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

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

QA

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

답변 2

본문

미나님이 도움 주셔서

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 처리하시면 되겠네요

 

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