PHP AJAX 동적 웹 DB값 비교
본문
안녕하세요. 제가 현재 AJAX를 이용해서 동적웹으로 회의실을 예약하는 코드를 작성중인데요.
메인페이지인 index.php에서
이런식으로 추가하게끔 했습니다.
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
이런조건으로 줘보면 어떨가 싶네요
리소스 낭비가 너무 심하네요.
현재 php코드는 전체 예약을 검색해서 루프로 일일이 if문 돌려서 판단하는데
조건을 db에 넣에서 검색결과가 있는지 확인 해보고 있으면 예약 불가 없으면 예약 가능으로 하는게 더 좋을것 같아요