PHP AJAX 동적 웹 DB값 비교 채택완료
안녕하세요. 제가 현재 AJAX를 이용해서 동적웹으로 회의실을 예약하는 코드를 작성중인데요.
메인페이지인 index.php에서


이런식으로 추가하게끔 했습니다.
DB연결도 잘 됐고 추가도 잘 되는데, 문제는 DB에 이미 존재하는 값과 같은 값이 들어오면 예약을 못하게 하는 코드를 추가중인데 이 부분이 잘 안됩니다.
inset.php 의 일부 코드를 보여드리겠습니다. (DB연결은 잘 됐기에 DB 정보들은 가리겠습니다.)
</p>
<p> $DB_IP = "";</p>
<p> $DB_ID = "";</p>
<p> $DB_PWD = "";</p>
<p> $DB_NAME = "";</p>
<p> $DB_ConnectInfo = array("UID"=>$DB_ID, "PWD"=>$DB_PWD, "Database"=>$DB_NAME, "CharacterSet" => "UTF-8");</p>
<p> date_default_timezone_set('Asia/Seoul');</p>
<p> $connect = sqlsrv_connect($DB_IP, $DB_ConnectInfo);</p>
<p> </p>
<p> // query문도 이상 없습니다.</p>
<p> $query_all = "SELECT * FROM tblCalendar WHERE MeetingDate >= CONVERT(date, GETDATE()) ORDER BY MeetingDate, StartTime";</p>
<p> $result_all = sqlsrv_query($connect, $query_all);</p>
<p> </p>
<p> // index.php에서 넘긴 값 가져오기</p>
<p> $id = $_POST["employee_id"];</p>
<p> $MeetingDate = $_POST["MeetingDate"];</p>
<p> $MeetingTitle = $_POST["MeetingTitle"];</p>
<p> $StartTime = $_POST["StartTime"];</p>
<p> $EndTime = $_POST["EndTime"];</p>
<p> $MeetingName = $_POST["MeetingName"];</p>
<p> </p>
<p> $re;</p>
<p> while($row_all = sqlsrv_fetch_array($result_all, SQLSRV_FETCH_ASSOC)) {</p>
<p> if ($StartTime == $EndTime) {</p>
<p> echo "<script>alert('예약 불가. \n시작시간과 종료시간이 동일할 수 없습니다.');</script>";</p>
<p> $re = 0;</p>
<p> break;</p>
<p> }</p>
<p> </p>
<p> // 시간규칙</p>
<p> if ($row_all['MeetingDate'] == $MeetingDate) {</p>
<p> if ($row_all['StartTime'] == $StartTime || $row_all['EndTime'] == $EndTime ||</p>
<p> $row_all['StartTime'] < $StartTime && $StartTime < $row_all['EndTime'] ||</p>
<p> $row_all['StartTime'] < $EndTime && $EndTime < $row_all['EndTime']) {</p>
<p> echo "<script>alert('예약 불가. 기존 예약과 겹칩니다.');</script>";</p>
<p> $re = 0;</p>
<p> break;</p>
<p> }</p>
<p> else {</p>
<p> echo "<script>alert('날짜 같지만 예약 가능.');</script>";</p>
<p> $re = 1;</p>
<p> break;</p>
<p> }</p>
<p> }</p>
<p> else if ($row_all['MeetingDate'] != $MeetingDate) {</p>
<p> echo "<script>alert('날짜 다름. 예약 가능.');</script>";</p>
<p> $re = 1;</p>
<p> break;</p>
<p> }</p>
<p> }</p>
<p>
이런식으로 코드를 작성했고, 밑에 $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
이런조건으로 줘보면 어떨가 싶네요
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
MeetingDate를 가져오는 부분에서 문제가 있었고, substr 잘라서 넣어주려 했으나 그 방법으로는 잘 해결이 안됐고,
date_format($row_all['MeetingDate'], 'Y-m-d') <-- 이렇게 이용해서 해결했습니다.
감사합니다!