PHP AJAX 동적 웹 DB값 비교

PHP AJAX 동적 웹 DB값 비교

QA

PHP AJAX 동적 웹 DB값 비교

본문

안녕하세요. 제가 현재 AJAX를 이용해서 동적웹으로 회의실을 예약하는 코드를 작성중인데요.

 

메인페이지인 index.php에서

1935365004_1650330252.319.png

1935365004_1650330287.1831.png

 

이런식으로 추가하게끔 했습니다.

DB연결도 잘 됐고 추가도 잘 되는데, 문제는 DB에 이미 존재하는 값과 같은 값이 들어오면 예약을 못하게 하는 코드를 추가중인데 이 부분이 잘 안됩니다.

 

inset.php 의 일부 코드를 보여드리겠습니다. (DB연결은 잘 됐기에 DB 정보들은 가리겠습니다.)


    $DB_IP = "";
    $DB_ID = "";
    $DB_PWD = "";
    $DB_NAME = "";
    $DB_ConnectInfo = array("UID"=>$DB_ID, "PWD"=>$DB_PWD, "Database"=>$DB_NAME, "CharacterSet" => "UTF-8");
    date_default_timezone_set('Asia/Seoul');
    $connect = sqlsrv_connect($DB_IP, $DB_ConnectInfo);
 
    // query문도 이상 없습니다.
    $query_all = "SELECT * FROM tblCalendar WHERE MeetingDate >= CONVERT(date, GETDATE()) ORDER BY MeetingDate, StartTime";
    $result_all = sqlsrv_query($connect, $query_all);
 
    // index.php에서 넘긴 값 가져오기
    $id = $_POST["employee_id"];
    $MeetingDate = $_POST["MeetingDate"];
    $MeetingTitle = $_POST["MeetingTitle"];
    $StartTime = $_POST["StartTime"];
    $EndTime = $_POST["EndTime"];
    $MeetingName = $_POST["MeetingName"];
 
    $re;
    while($row_all = sqlsrv_fetch_array($result_all, SQLSRV_FETCH_ASSOC)) {
        if ($StartTime == $EndTime) {
            echo "<script>alert('예약 불가. \n시작시간과 종료시간이 동일할 수 없습니다.');</script>";
            $re = 0;
            break;
        }
 
       // 시간규칙
        if ($row_all['MeetingDate'] == $MeetingDate) {
            if ($row_all['StartTime'] == $StartTime || $row_all['EndTime'] == $EndTime ||
                    $row_all['StartTime'] < $StartTime && $StartTime < $row_all['EndTime'] ||
                    $row_all['StartTime'] < $EndTime && $EndTime < $row_all['EndTime']) {
                echo "<script>alert('예약 불가. 기존 예약과 겹칩니다.');</script>";
                $re = 0;
                break;
            }
            else {
                echo "<script>alert('날짜 같지만 예약 가능.');</script>";
                $re = 1;
                break;
            }
        }
        else if ($row_all['MeetingDate'] != $MeetingDate) {
            echo "<script>alert('날짜 다름. 예약 가능.');</script>";
            $re = 1;
            break;
        }
    }

 

이런식으로 코드를 작성했고, 밑에 $re가 1일때 INSERT하도록 하는 코드를 작성했습니다.

여기서 문제는 

if ($row_all['MeetingDate'] == $MeetingDate) 이 코드를 넣어주기 전에는, 즉 날짜가 같은지 같지 않은지 신경쓰지 않으면 예약불가로 잘 넘어가는데, 이때 문제는 다른 날짜여도 시간규칙이 같으면 예약불가가 됩니다.

그래서 if ($row_all['MeetingDate'] == $MeetingDate) 이 코드를 통해 날짜가 같을때만 시간규칙을 확인하기로 했는데, 이 코드를 넣어주니 아예 규칙으로 들어가지 않고 모두 예약이 됩니다.

 

 

이 질문에 댓글 쓰기 :

답변 2

저도 초보라 코드를보기엔 너무 길어서 자세히는 안봣지만....ㅎㅎ

 

$row_all['MeetingDate'] == $MeetingDate 했을때 안걸러지고 

$row_all['MeetingDate'] != $MeetingDate 로 넘어가버린다면 당연히 

$row_all['MeetingDate'] == $MeetingDate 는 false , 

$row_all['MeetingDate'] != $MeetingDate 는 true 라는 말이 아닐까여..ㅎㅎ

 

제 생각에는 데이트 포멧 형태가 달라서 그런거같은데 post 로 는 그냥 date 로 

쿼리로 가져온 row 에서는 datetime 으로 받아서 그런거같네요 

쿼리에 보면 where 쪽에 date 로 convert 해서 조건을 걸지만

앞에 셀렉트하는부분에는 그냥 *로 가져오기때문에 

날짜값이 따로 포멧팅 되지않고 아마 datetime 형태로 가져와서 그런게 아닌지 

 

substr($row_all['MeetingDate'], 0, 10) == $MeetingDate

 

이런조건으로 줘보면 어떨가 싶네요 


 

감사합니다.. 덕분에 어느부분이 문제인지 확실히 알았습니다.

MeetingDate를 가져오는 부분에서 문제가 있었고, substr 잘라서 넣어주려 했으나 그 방법으로는 잘 해결이 안됐고,
date_format($row_all['MeetingDate'], 'Y-m-d') <-- 이렇게 이용해서 해결했습니다.
감사합니다!

리소스 낭비가 너무 심하네요.

현재 php코드는 전체 예약을 검색해서 루프로 일일이 if문 돌려서 판단하는데

조건을 db에 넣에서 검색결과가 있는지 확인 해보고 있으면 예약 불가 없으면 예약 가능으로 하는게 더 좋을것 같아요

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

회원로그인

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