RESCHK.php 4.34 KB
<?php 
//*****************************************************************************
//* 
//* プログラム名:施設予約 重複チェック
//* プログラムID:RESCHK.php
//* 機能				:
//* 作成者			:
//* 
//*****************************************************************************

header("Content-type: text/html; charset=EUC-JP");

include("include/session_start.inc");
include("include/SessionChk.inc");

$strDBinc="include/dbcon.inc";
include($strDBinc);

	//時間不完全時はノーチェック
	if($st_hour == "" || $ed_hour == ""){
		exit;
	}

	//入力値
	$strDatsS = $st_year."/".$st_mon."/".$st_day;
	$strDatsE = $ed_year."/".$ed_mon."/".$ed_day;
	$strTimeS = $st_hour.":".sprintf('%02d',((int) $st_minute)).":00";
	$strTimeE = $ed_hour.":".sprintf('%02d',((int) $ed_minute)).":00";
	
	$seq = (int) $seq;

//echo $strDatsS."\n";
//echo $strDatsE."\n";
//echo $strTimeS."\n";
//echo $strTimeE."\n";
	
	//該当データ取得(時間完全入力モノ)
	$strSQL = "Select * From sisetu_TBL WHERE rsv_no = ".$rsv_no." and ";
	$strSQL .= "((rsv_st_date <= '".$strDatsS."' and rsv_ed_date >= '".$strDatsS."') or (rsv_st_date <= '".$strDatsE."' and rsv_ed_date >= '".$strDatsE."')) ";
	$strSQL .= "and rsv_st_time <> '' and rsv_ed_time <> ''";
//echo $strSQL."\n";
	$objRecSet = pg_exec($strSQL);
	if($objRecSet==false){
		echo("SQL実行に失敗しました(SELECT)");
		exit;
	}
//echo pg_numrows($objRecSet)."\n";
	if(pg_numrows($objRecSet) > 0){
		//入力値の全日付
	getDays($type,$strDatsS,$strDatsE,$wday,$eday,$inpDate);
//echo count($inpDate)."\n";
		//登録済み抽出
		for($i=0;$i<pg_numrows($objRecSet);$i++){
			$Data = pg_fetch_object($objRecSet, $i);
			//開始日
			if($Data->rsv_st_date < $strDatsS){
				$strDatsSDB = $strDatsS;
			}else{
				$strDatsSDB = $Data->rsv_st_date;
			}
			//終了日
			if($Data->rsv_ed_date > $strDatsE){
				$strDatsEDB = $strDatsE;
			}else{
				$strDatsEDB = $Data->rsv_ed_date;
			}
			unset ($dbDate);
			getDays($Data->rev_type,$strDatsSDB,$strDatsEDB,$Data->rev_code,$Data->rev_code,$dbDate);
//echo count($dbDate)."\n";
//echo "Array? ".is_array($dbDate)."\n";

			if(is_array($dbDate) === false){
				continue;
			}
//echo "あらやん!\n";
			for($j=0;$j<count($dbDate);$j++){
//echo "dbDate ".$dbDate[$j]."\n";
				for($k=0;$k<count($inpDate);$k++){
					if($dbDate[$j] == $inpDate[$k] && $Data->seq != $seq){
						//DB開始時間≦入力開始時間≦DB終了時間 → DB開始時間<=入力開始時間<DB終了時間
						//if(($Data->rsv_st_time <= $strTimeS) && ($strTimeS <= $Data->rsv_ed_time)){
						if(($Data->rsv_st_time <= $strTimeS) && ($strTimeS < $Data->rsv_ed_time)){
							echo "ERR_OVERLAP";
							exit;
						}
						//DB開始時間≦入力終了時間≦DB終了時間→DB開始時間<入力終了時間<DB終了時間
						//if(($Data->rsv_st_time <= $strTimeE) && ($strTimeS <= $Data->rsv_ed_time)){
						if(($Data->rsv_st_time < $strTimeE) && ($strTimeE <= $Data->rsv_ed_time)){
							echo "ERR_OVERLAP";
							exit;
						}
						//入力開始時間≦DB開始時間≦入力終了時間→入力開始時間≦DB開始時間<入力終了時間
						//if(($strTimeS <= $Data->rsv_st_time) && ($Data->rsv_st_time <= $strTimeE)){
						if(($strTimeS <= $Data->rsv_st_time) && ($Data->rsv_st_time < $strTimeE)){
							echo "ERR_OVERLAP";
							exit;
						}
						//入力開始時間≦DB終了時間≦入力終了時間→入力開始時間<DB終了時間<入力終了時間
						//if(($strTimeS <= $Data->rsv_ed_time) && ($Data->rsv_ed_time <= $strTimeE)){
						if(($strTimeS < $Data->rsv_ed_time) && ($Data->rsv_ed_time <= $strTimeE)){
							echo "ERR_OVERLAP";
							exit;
						}
					}
				}
			}
			
//echo count($dbDate);
		}
	}else{
		exit;
	}
	
function getDays($pType,$pDateS,$pDateE,$pWday,$pDay,&$pDate){
	
	list($y1,$m1,$d1)=split("/",$pDateS);
	list($y2,$m2,$d2)=split("/",$pDateE);
	$t1=mktime(0,0,0,$m1,$d1,$y1);
	$t2=mktime(0,0,0,$m2,$d2,$y2);
	$dayNum =  1+abs($t1-$t2)/(60*60*24);

	if($pType == 0){
		for($i=0;$i<$dayNum;$i++){
			$pDate[$i] = date("Y/m/d",mktime(0,0,0,$m1,$d1+$i,$y1));
//echo $pDate[$i]."\n";
		}
	
	}else if($pType == 1){
		$j=0;
		for($i=0;$i<$dayNum;$i++){
			if(date("w",mktime(0,0,0,$m1,$d1+$i,$y1)) == $pWday){
				$pDate[$j] = date("Y/m/d",mktime(0,0,0,$m1,$d1+$i,$y1));
//echo $pDate[$j]."\n";
				$j++;
			}
		}
	}else if($pType == 2){
		$j=0;
		for($i=0;$i<$dayNum;$i++){
			if(date("d",mktime(0,0,0,$m1,$d1+$i,$y1)) == $pDay){
				$pDate[$j] = date("Y/m/d",mktime(0,0,0,$m1,$d1+$i,$y1));	
//echo $pDate[$j]."\n";
				$j++;
			}
		}
	}
}	
?>