insert, update 쿼리 병합

insert, update 쿼리 병합

QA

insert, update 쿼리 병합

답변 3

본문

아래 점선줄 밑으로 기재한 대로

현재는 insert용 과 updste용 php 파일 2개를 이용하고 있습니다

 

php 파일을 하나로 합쳐서 

똑같이 작동 되게 하고 싶습니다.

어떻게 해야 할까요?

이것저것 해봐도 잘 안되서 고수님들께 문의 드립니다. ㅠㅠ

 

 

---------------------------------------------------------------------------------------------------------------


<?php
$conn = mysqli_connect("localhost", "****", "****", "****");

$zzzz = $_GET['cccc']; 
$time = date("Y-m-d H:i:s"); // 현재시간 저장
$today = date("Y-m-d");
 
// 중복 체크 쿼리 실행
$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) {
    // 중복이 없는 경우 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', '{$_SERVER['REMOTE_ADDR']}', '$zzzz'
                   FROM very_work_list
                   WHERE work_hp = '$zzzz'";
    
    if (mysqli_query($conn, $sql)) {
        echo "";
    } else {
        echo "에러: " . $sql . "<br>" . mysqli_error($conn);
    }
}
$result = mysqli_query($conn,"SELECT work_name FROM very_work_list where work_hp='$zzzz' ");
 
$row = mysqli_fetch_array($result);
$data = $row[0];
 
if($data){
echo $data;
}

?>

 

위 php 파일로 63B17372 변수가 전달이 되면 아래와 같이 저장이 됩니다.

2039449303_1740708664.9045.jpg

 

 

 

 

 


 
<?php
$conn = mysqli_connect("localhost", "****", "****!", "****");

$zzzz = $_GET['cccc']; 
$time = date("Y-m-d H:i:s"); // 현재시간 저장
 
$sql  = "UPDATE very_work_time
SET work_outtime = '$time'
WHERE id IN (
    select a.id 
    from(
  SELECT * FROM very_work_time WHERE  work_total = '$zzzz' ORDER BY work_datetime DESC LIMIT 1 ) a )";

$result = mysqli_query($conn, $sql);
if($result === false){
    echo mysqli_error($conn);
}
$result = mysqli_query($conn,"SELECT work_name FROM very_work_list where work_hp='$zzzz' ");
 
$row = mysqli_fetch_array($result);
$data = $row[0];
 
if($data){
echo $data;
}

위 php 파일로 63B17372 변수가 전달이 되면 아래와 같이 work_outtime  에 시간이 업데이트 되어 집니다.

2039449303_1740711052.0162.jpg

 

 

이 질문에 댓글 쓰기 :

답변 3

아까 b.php 파일이 퇴근이라고 하셨잖아요 ?

 

그럼 b.php 파일을 아래 처럼 수정 하세요

 

퇴근 파일 접근 시 a.php?cccc=원래파라미터&action=out 으로 강제 리다이렉트 됩니다.

 


<?php
if (isset($_GET['cccc'])) {
    $cccc = urlencode($_GET['cccc']);
    header("Location: aaa.php?cccc={$cccc}&action=out");
    exit;
} else {
    exit("cccc 파라미터가 없습니다.");
}
?>

도와드릴게요 혹시파라미터 추가 및 통합을 위해

저걸 호출하는 페이지의 코드를 알려주시겠습니까?

 

혹시 그게아니라면 방식이 

a.php?cccc=test 

이렇게 직접 호출하시나요?

 

하나더 혹시 그누기반인가요?

자체 코드인가요?

기존에는 안드로이드 출근용, 퇴근용 어플을 2개를 사용해서
어플 실행시  a.php?cccc=63B17372,    b.php?cccc=63B17372
이런식으로 전송이 되도록하여 사용하였습니다.

바꾸려고 하는 방식은
안드로이드 폰을 nfc 리더기로 만들었고요
신분증을 폰에 가져다 대면
폰이 nfc 카드 내용을 읽어들인담에  특정된 문자를
a.php?cccc=63B17372    <-- 이런식으로 전송을 하면 
DB 에 저장이 되는 방식입니다

현재 nfc 카드를 핸드폰에 가져다 대면  위 코드가 전송이되어
insert 가 되게 적용은 하였습니다.

지금 필요한 부분은  똑같은 코드가 전송이 될 경우
insert, update, insert, update, insert, update    이런식으로  번갈아가며 저장이 되게
해야합니다.

그누보드 기반입니다

안녕하세요...

 님 

 

아래 코드대로 작성해보시겠습니까?

단. 기존 코드에서 하나의 파라미터가 추가되어야 합니다.

a.php?cccc=63B17372&action=in        /  a.php?cccc=63B17372&action=out

 

in 은 출근 / out 은 퇴근입니다.

또한 하단 코드에 구글 이미지 작성 된 것을 아까전 게시글에 보여준 출근을 캡쳐해 이미지로 올려두시고

그 경로 적어주세요

 

퇴근도 마찬가지이구요

또한 코드 그대로 복붙하면 안됩니다. 디비 커넥트 아이디/비번/디비는 잘 쓰셔야 합니다.

 


<?php
$conn = mysqli_connect("localhost", "****", "****", "****");
 
$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">';
    }
 
?>

답변감사합니다.. 문제는
a.php?cccc=63B17372&action=in        /  a.php?cccc=63B17372&action=out
이런식으로 안드로이드에서 2가지로 보낼수 있을까요?
1가지로 밖에 전송이 안될꺼 같은데요 ㅠㅠ

아까전에 그렇게 말씀하셨잖아요 ?
출근/퇴근 어플이 따로 있어서 a.php / b.php 을 활용하고 있다...라고
그럼 저걸 띄우는(보내는) 실제 파일이 있을껀데
거기에서 위 답변처럼 하나로 합쳐서 액션을 추가 해주면 가능하겠습니다.

위에 올려주신 코드로 2개의 피라미터가 전송될 경우에 db 저장까지 정상작동 되네요..
감사합니다..
문제는 피라미터를 2가지로 보내야 한다는 부분인데...
이걸 어찌 처리 해야 할지... 문제네요 ㅠㅠ


기존에는 폰 2개를 사용해서 피라미터를 2가지로 보낼수 있었는데요

폰이 2개가 아니라
폰을 1개만 사용해서  출근 퇴근을 처리 하고 싶은 겁니다.

아니 그게 아니라 폰으로 읽어서 데이터를 전송한다고 위에 작성해주셨잖아요 ?
NFC 프로젝트는 해본 적이 없지만, 어찌 되었던 무언가를 전송할 때
전송하기 위해서 만들어진 게 있을꺼에요
그게 없다면 전송이 불가능하고 어디로 전송할 수 없으니깐요

a.php?cccc=asdgasdg  로 전송할 수 있게 만들어진 것을 소스 추가를 해야 한다는 뜻입니다.
위 내용 자체가 이해가 조금 어려우시다면

어쩔 수 없이 둘이 분리해서 작업하는 방법 뿐입니다.

만약 액션은 추가할 수 없고 파일은 변경할 수 있다면
a.php 파일 내 에서 데이터가 있을 시 무조건 퇴근 처리 하는 방법을 택해야 겠죠?

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