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