예약 게시판 관련 질문 드립니다.

예약 게시판 관련 질문 드립니다.

QA

예약 게시판 관련 질문 드립니다.

본문

안녕하세요

한가지 물어 볼게 있어서요

http://youngst.or.kr/bbs/board.php?bo_table=test

여기서 예약을 하는데요

마시멜로 직찍 과 회의실이 각각 시간이 주어진 상태에서 시간 단위로 예약을 하게 되어 있습니다.

예시

여러모로 회의실

11:00 ~ 12:00 (0) 12:00 ~ 13:00 (0) 13:00 ~ 14:00 (0) 14:00 ~ 15:00 (0) 15:00 ~ 16:00 (0) 16:00 ~ 17:00 (0) 17:00 ~ 18:00 (0) 18:00 ~ 19:00 (0) 19:00 ~ 20:00 (0) 20:00 ~ 21:00 (0)

 마시멜로 직찍

11:00 ~ 12:00 (0) 12:00 ~ 13:00 (0) 13:00 ~ 14:00 (0) 14:00 ~ 15:00 (0) 15:00 ~ 16:00 (0) 16:00 ~ 17:00 (0) 17:00 ~ 18:00 (0) 18:00 ~ 19:00 (0) 19:00 ~ 20:00 (0) 20:00 ~ 21:00 (0)

위 처럼 이렇게 예약을 하게 되어 있고 그리고 설정으로는 1명만 중복으로 예약이 가능 하게 되어 있습니다. 마시멜로 특정 시간 선택 및 여러므로 회의실 특 정시간 예약을 하게 되면 그 예약한 곳에는 더이상 예약이 안되게 처리가 되어 있는데요 물론 1명만 2명은 불가로 되어 있구요

그런데 위 모든 시간이 다 찼을 때 예약 마감이 나와야 하는데 몇개 안했는데 예약 마감이 나오는 난감한 상태 입니다.

혹시 이거 어떻게 해야 하는지 아시는 분은 답변 좀 부탁을 드려도 될까요?

제발 도와 주세요

혹시 몰라서 일단 소스는 올려 놓기는 하는데 맞는지는 모르겠습니다. 혹시 잘 알기가 힘드시면 말씀 해주세요 그럼제가 파일은 공유해드리도록 하겠습니다.


$office_no = ($office_no)? $office_no:$_SESSION['ss_office_no'];
$select = ($select)? $select:$_SESSION['ss_select'];

// 게시판아이디체크
if(!$office_no) {
 alert("정비업체를 선택하지 않으셨습니다.");
}
if(!$select) {
 alert("예약 날짜를 선택하지 않으셨습니다.");
}

include_once($board_skin_path . '/company_info.php');
include_once($board_skin_path.'/skin.function.php'); // 함수모음
 
// URL에서 직접 입력하고 접속시 휴무일인지 체크 ($booking_holiday = 업체휴무일 배열, $select = 달력상의 날짜.);
$office_yoil = closed_Day($booking_holiday, $select); // 휴무일이면 0~6 반환, 휴무일이 아니면 X 반환
if($office_yoil!="X") {
 //alert("선택한 날짜는 정기 휴무일입니다.\\n예약가능한 날짜를 선택해 주세요.", G5_BBS_URL."/board.php?bo_table=booking&office_no={$office_no}");
 exit;
}
// 임시공휴일인지 체크
$chk = holiday_check($select);
if($chk == 'true') {
 alert("[ ".$select." ]은 임시휴일이므로 예약을 하실 수 없습니다.");
}
// 선택한 날짜가 예약가능한 날짜인가를 체크
$booking_min = date("Y-m-d", strtotime("{$start_date} day")); //예약 시작 일자.
$booking_max = date("Y-m-d", strtotime("{$end_date} day"));  // 예약 마감일자.
// 오늘날짜가 예약가능한날짜 사이에 있는지 체크
if($select < $booking_min || $select > $booking_max) {
 alert("선택한 날짜는 예약할 수 없습니다.\\n달력에서 예약가능한 날짜를 선택해 주세요.", G5_BBS_URL."/board.php?bo_table={$bo_table}&office_no={$office_no}");
}

## 기타작업
$jobs_01_sub = "청춘 공간";
$jobs_01 = "여러모로 회의실|마시멜로 직찍";
 
<div class="panel panel-default">
            <div class="panel-body">
                <div class="req_hdlines">
                    <div class="req_hleft"><font color="#0c4ca3">* 필수정보</font></div>
                    <div class="req_hrig2">
                        <li>청춘정거장은 취‧창업과 커뮤니티 활동을 지원하고 함께 공유하는 공간입니다. 뒷정리도 깔끔히! 청춘이니까!^^</li>
                        <li>대관신청은 홈페이지에 대관예약 탭에 들어가셔서 신청하시고 </li>
                        <li>대관내용에 문제가 있거나 확인이 필요할 경우에 사무실에서 전화 드리겠습니다.</li>
                    </div>
                </div>
                <div class="req_box">
                    <div class="col-xs-12 col-md-6">
                        <div class="req_capt req_capt_2 col-md-3 norigbord2">
                            <font color="#0c4ca3">*</font>예약장소<strong class="sr-only">필수</strong>
                        </div>
                        <div class="req_inp req_nums col-md-9">
                            <div style="line-height:3em;">
                                <?php echo $off['office_name']; ?>
                                (<i class='fa fa-phone-square' aria-hidden='true'></i><?php echo $off['office_tel'];?>)
                            </div>
                        </div>
                    </div>
                    <div class="col-xs-12 col-md-6">
                        <div class="req_capt col-md-3 req_capt_2"><font color="#0c4ca3">*</font> 예약일자</div>
                        <div class="req_inp req_inp_2 col-md-9">
                            <div style="line-height:3em;">
                                <?php echo ($write['wr_1'])? $write['wr_1']:$toDay; ?>
                                <input type="hidden" name="wr_1" class="wr_1" value="<?php echo ($write['wr_1'])? $write['wr_1']:$select; ?>" readonly />
                            </div>
                        </div>
                    </div>
                </div>
                <div class="req_box">
                    <div class="col-xs-12">
                        <div class="req_capt reqc_zip col-md-3"><font color="#0c4ca3">*</font>청춘공간</div>
                        <div class="req_inp col-md-9">
                            <?php echo $jobs_01_sub?><br>
                            <li>※ 사용하실 공간을 선택하여 주세요</li><br>
                            <li><?php echo checkBox_booking($jobs_01,$jobs_01,$write['wr_5'],'jobs[]','jobs1',1)?></li>
                        </div>
                    </div>
                </div>
                <div class="req_box">
                    <div class="col-xs-12">
                        <div class="req_capt reqc_zip col-md-3"><font color="#0c4ca3">*</font>예약시간</div>
                        <div class="req_inp col-md-9">
                            <?php if($time_person > 0) { //시간대별 예약인원 제한일경우.. ?>
                            <li>※ 예약 시간대별 최대 예약가능한 인원은 <span style="color:red;"><?php echo $time_person;?></span>명입니다.</li>
                            <li>※ 예약시간 옆 괄호안의 숫자는 현재 예약 수 입니다.</li>
                            <li>※ 이용을 하고자 하는 시간대를 모두 선택하시면 됩니다.</li>
                            <?php } ?>
                            <div id="admin_kk" style="display:none;">여러모로 회의실<br>
                                <?php
                                    $am = booking_time($bo_table, $select); // 예약가능한시간대별리스트
                                    echo check_time($am, $am, $write['wr_2'], 'time[]', 'time');
                                ?>
                            </div>
                            <div id="admin_kk1" style="display:none;">마시멜로 직찍<br>                   
                                <?php
                                    $am = booking_time($bo_table, $select); // 예약가능한시간대별리스트
                                    echo check_time_1($am, $am, $write['wr_2'], 'time[]', 'time2');
                                ?>
                            </div>
                        </div>
                        <script>
                            function c_bo(){
                                var chk = document.getElementsByName("jobs[]"); // 체크박스객체를 담는다
                                var len = chk.length;    //체크박스의 전체 개수
                                var checkRow = '';       //체크된 체크박스의 value를 담기위한 변수
                                var checkCnt = 0;        //체크된 체크박스의 개수
                                var checkLast = '';      //체크된 체크박스 중 마지막 체크박스의 인덱스를 담기위한 변수
                                var rowid = '';          //체크된 체크박스의 모든 value 값을 담는다
                               
                                var cnt = 0;
                               
                                for(var i=0; i<len; i++){
                                    if(chk[i].checked == true){
                                        checkCnt++;        //체크된 체크박스의 개수
                                        checkLast = i;     //체크된 체크박스의 인덱스
                                    }
                                }
                               
                                if(checkCnt>1){
                                    document.getElementById("admin_kk").style.display="";
                                    document.getElementById("admin_kk1").style.display="";
                                }
                                else{
                                    if(checkLast==0){
                                        document.getElementById("admin_kk").style.display="";
                                        document.getElementById("admin_kk1").style.display="none";
                                    }
                                    else{
                                        document.getElementById("admin_kk").style.display="none";
                                        document.getElementById("admin_kk1").style.display="";
                                    }
                                }
                            }
                        </script>
                    </div>
                </div>
 

이 질문에 댓글 쓰기 :

답변 3

로직만 개념적으로 말씀드립니다.

 

기본적으로 예약기능을 체크하려면

 

로직영역에서

1. 기간범위의 각예약상황을 체크

2. 일자별 예약인원/가용인원 체크

   3. 일자 - 시간 또는

      일자 - 장소(대상)

---

 

skin영역에서

1. 표현할 기간 

   2. (일자별) 예약/가능상황표현

      3. (일자중) 오늘날짜 체크

           (표현다르게)

      4. (일자중) 표현일자별 가용여부 표현

        - 로직2번의 예약상황을 표현

          5. 일자별 여러가지 조건인경우 각가표현

      

   

들여쓰기를 해드린건

상위의 개념안에 포함되는 것을 나타냅니다.

 

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

 

위에 나열할 소스는 스킨의 일부분같아 보입니다.

일자별 가용인원 체크로직이 없네요

 

오늘일자에 가용인원(시간별)이 다 찬경우 예약완료를 표현할수있는 체크사항이 있어야 합니다.

훌륭한 답변입니다.. 
많은 분들이 질문을 올릴때 소스 일부분만 공개해주셔서, 답변달기 애매한 경우가 많은데..
( 추가 소스를 받기엔 부담스럽죠, 분석할 시간적 여유도 없구요...)
이번 질문도, 구성을 모르는 상태에서 껍대기 부분만 보여진 케이스죠..

이런경우, 플래토님처럼 전체 개념을 잡아 정리하는게 맞는 답변이라 생각합니다.
사실 모든 QnA는  해법보단 해결을 위한 방향을 가이드해주는게 좋다고 생각합니다~
이전에 댓글을 주고받은적있어서 제 기억으로는.. 대표님 같으신데  꼼꼼하셔서 운영잘하실듯..

아 그러보니, 게시판 취지에 어긋난 내용을 담게되었네요~ ㅎㅎ

혹시

 wr_1 = '$select' and ca_name = '$office_no' and wr_5='마시멜로 직찍'
혹시 이 부분 때문에 마감이 되는 것은 아닌지요


// 시간대별 예약시간을 라디오버튼으로 변경
function check_time_1($data1,$data2,$db_data,$name,$id_v) {
 global $g5, $write, $board, $office_no, $select, $time_person;
 // 시간대별 예약자 추출
 $sql = "select
    wr_2,
    count(wr_2) as cnt
   from
    ".$g5['write_prefix'].$board['bo_table']."
   where
    wr_1 = '$select' and ca_name = '$office_no' and wr_5='마시멜로 직찍'
   group by
    wr_2 ";
 $result = sql_query($sql, true);
 $person=array();
 while($res=sql_fetch_array($result)) {
  $wr2 = explode("|", $res['wr_2']);
  for($i=0; $i < count($wr2); $i++) {
   //$tr = $wr_2[$i];
   $ps[] = $wr2[$i];  // 예약시간대 배열 생성.
  }
 }
 $ps = array_count_values($ps);
 foreach ($ps as $key => $value) {
   $tr = $key."|".$value;
   $person[$tr] = $key;
 } 
 $data1=explode("|",$data1);
 $data2=explode("|",$data2);
 for($i=0; $i < count($data1); $i++){$dataA[$i]=$data1[$i];}
 for($i=0; $i < count($data2); $i++){$dataB[$i]=$data2[$i];}
 $check=explode("|",$db_data);
 $wr_five = array();
 for($i=0;$i<count($check);$i++) {
  $wr_five[] = $check[$i];
 }
 $result = "";
 for($i=0; $i < (count($data2)-1); $i++) {
  $db = array_search($dataB[$i],$wr_five);
  if($dataB[$i]==$wr_five[$db]) {
   $checked="checked";
   $span="color:#FF0080;";
  } else {
   $checked="";
   $span="";
  }
  // 시간대별 예약가능한 최대인원수에 해당하는 시간대별배열.
  $closed = array_search($dataB[$i],$person);
  $cnt = explode("|",$closed);
  //echo print_r2($time_person);
  // 시간대별 예약 최대 인원수에 도달한 시간일경우 선택 못하게 disabled 시킨다.
  if($cnt[0] == $dataB[$i] && $cnt[1] >= $time_person ) {
   $disabled = "disabled='disabled'";
   $color  = "color:red";
  }
  $result .= "<span class='chkBox'>";
  $result .= "<input type='checkbox' value='$dataB[$i]' name='${name}' {$checked} {$disabled} class='hand' id='${id_v}[$i]'/>";
  $result .= "<label for='${id_v}[$i]' style='{$color}'> {$dataA[$i]} ~ {$dataA[$i+1]} (".number_format($cnt[1]).")</label>";  
  //$result .= "<input type='checkbox' name='${name}' id='${id_v}[$i]' class='hand' value='{$dataB[$i]}' $checked {$disabled}>";
  //$result .= "<label for='${id_v}[$i]' style='{$color}'> {$dataA[$i]} (".number_format($cnt[1]).")</label>";
  $result .= "</span>";
  unset($disabled);
  unset($color);
 }
 return($result);
}

답변을 작성하시기 전에 로그인 해주세요.
전체 123,162 | RSS
QA 내용 검색

회원로그인

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