2012-01-20 18 views
0

私は私のホテルの部屋予約システムのためのPHP mysql calnederを持っています。それは私がなぜ知っているのか分からない奇妙な問題を示しています。 2012年2月2日以降は2013年3月に直接行きます。phpカレンダーは2012年2月2日以降に2013年3月に行く

別の問題は、部屋が予約されているかどうかを示すためにカレンダーを作成することです。

function.php次へ前へ用

 function draw_calendar($month,$year){ 

/* draw table */ 
$calendar = '<table cellpadding="0" cellspacing="0" class="calendar">'; 

/* table headings */ 
$headings = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); 
$calendar.= '<tr class="calendar-row"><td class="calendar-day-head">'.implode('</td><td class="calendar-day-head">',$headings).'</td></tr>'; 

/* days and weeks vars now ... */ 
$running_day = date('w',mktime(0,0,0,$month,1,$year)); 
$days_in_month = date('t',mktime(0,0,0,$month,1,$year)); 
$days_in_this_week = 1; 
$day_counter = 0; 
$dates_array = array(); 

/* row for week one */ 
$calendar.= '<tr class="calendar-row">'; 

/* print "blank" days until the first of the current week */ 
for($x = 0; $x < $running_day; $x++): 
    $calendar.= '<td class="calendar-day-np">&nbsp;</td>'; 
    $days_in_this_week++; 
endfor; 

/* keep going with days.... */ 
for($list_day = 1; $list_day <= $days_in_month; $list_day++): 
    $calendar.= '<td class="calendar-day">';; 

     $calendar.= '<div class="day-number">'.$list_day.'</div>'; 

     /** QUERY THE DATABASE FOR AN ENTRY FOR THIS DAY !! IF MATCHES FOUND, PRINT THEM !! **/ 
     $calendar.= getAllRooms($list_day,$month,$year); 

    $calendar.= '</td>'; 
    if($running_day == 6): 
     $calendar.= '</tr>'; 
     if(($day_counter+1) != $days_in_month): 
      $calendar.= '<tr class="calendar-row">'; 
     endif; 
     $running_day = -1; 
     $days_in_this_week = 0; 
    endif; 
    $days_in_this_week++; $running_day++; $day_counter++; 
endfor; 

/* finish the rest of the days in the week */ 
if($days_in_this_week < 8): 
    for($x = 1; $x <= (8 - $days_in_this_week); $x++): 
     $calendar.= '<td class="calendar-day-np">&nbsp;</td>'; 
    endfor; 
endif; 

/* final row */ 
$calendar.= '</tr>'; 

/* end the table */ 
$calendar.= '</table>'; 

/* all done, return result */ 
return $calendar; 
} 
function getAllRooms($date,$month,$year) 
    { 
    global $db; 
    $where = ' '; 
if ($_GET['room_type'] != '') { 
    $where .= " HAVING room_type = '".$_GET['room_type']."'"; 
} 

$sql = "SELECT room_type 
     FROM 
      room 
     GROUP BY 
      room_type 
     $where 
     "; 
/*echo $sql; 
exit;*/ 
$result = $db->Execute($sql);; 
$room = ''; 
while (!$result->EOF) { 
    $qs  = '?room_type='.$result->fields('room_type').'&month='.$month.'& year='.$year; 
       $total =  get_total_rooms_by_type($result->fields('room_type'),$date,$month,$year); 
    $room .= 
    '<div class="'.$result->fields('room_type').'"> 

     <a href="'.BASE_URL.'room_detail.php'.$qs.'"> 
      '.$result->fields('room_type').' ('.$total.') 
     </a> 
    </div>'; 
    $result->MoveNext(); 
} 
$result->Close; 
return $room; 
} 
    function get_total_rooms_by_type($room_type,$date,$month,$year) 
{ 
global $db; 
$_newdate = $year.'-'.$month.'-'.$date; 
$sql   = "SELECT room_id FROM room where room_type = '$room_type' "; 
$room_results = $db->Execute($sql); 
$room_ids  = array(); 
while (!$room_results->EOF) { 
    $room_ids[] = $room_results->fields('room_id'); 
    $room_results->MoveNext(); 
} 
$room_results_str = implode(',',$room_ids); 
$where = ' where 1 = 1 '; 
$available = 1; 
if ($_GET['booking_status'] == '1') { 
    $where .= ' and (booking_status = 1 or booking_status = 2)'; 
    $available = 0; 
} else if ($_GET['booking_status'] == '2') { 
    $where .= ' and (booking_status = 2)'; 
    $available = 0; 
} 
$sql = "select count(room_id) from bookings 
     $where 
      and checkin <= '$_newdate' 
      and '$_newdate' <= checkout 
      and room_id in ($room_results_str) 
     "; 
if ($available == 0) { 
    return $db->GetOne($sql); 

} else { 
    return count($room_ids) - $db->GetOne($sql); 
} 


} 
function draw_calendar_room($month,$year){ 

/* draw table */ 
$calendar = '<table cellpadding="0" cellspacing="0" class="calendar">'; 

/* table headings */ 
$headings = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); 
$calendar.= '<tr class="calendar-row"><td class="calendar-day-head">'.implode('</td><td class="calendar-day-head">',$headings).'</td></tr>'; 


/* days and weeks vars now ... */ 
$running_day = date('w',mktime(0,0,0,$month,1,$year)); 
$days_in_month = date('t',mktime(0,0,0,$month,1,$year)); 
$days_in_this_week = 1; 
$day_counter = 0; 
$dates_array = array(); 

/* row for week one */ 
$calendar.= '<tr class="calendar-row">'; 

/* print "blank" days until the first of the current week */ 
for($x = 0; $x < $running_day; $x++): 
    $calendar.= '<td class="calendar-day-np">&nbsp;</td>'; 
    $days_in_this_week++; 
endfor; 

/* keep going with days.... */ 
for($list_day = 1; $list_day <= $days_in_month; $list_day++): 
    $calendar.= '<td class="calendar-day">';; 

     $calendar.= '<div class="day-number" style=" padding:5px 5px 45px;background-color:'.getRoomColor($list_day,$month,$year).'">'.$list_day.'</div>'; 

     /** QUERY THE DATABASE FOR AN ENTRY FOR THIS DAY !! IF MATCHES FOUND, PRINT THEM !! **/ 


    $calendar.= '</td>'; 
    if($running_day == 6): 
     $calendar.= '</tr>'; 
     if(($day_counter+1) != $days_in_month): 
      $calendar.= '<tr class="calendar-row">'; 
     endif; 
     $running_day = -1; 
     $days_in_this_week = 0; 
    endif; 
    $days_in_this_week++; $running_day++; $day_counter++; 
endfor; 

/* finish the rest of the days in the week */ 
if($days_in_this_week < 8): 
    for($x = 1; $x <= (8 - $days_in_this_week); $x++): 
     $calendar.= '<td class="calendar-day-np">&nbsp;</td>'; 
    endfor; 
endif; 

/* final row */ 
$calendar.= '</tr>'; 

/* end the table */ 
$calendar.= '</table>'; 

/* all done, return result */ 
return $calendar; 
} 
function getRoomColor($date,$month,$year) 
{ 
global $db; 
$where = ' '; 
if ($_GET['room_id'] != '') { 
    $room_id = $_GET['room_id']; 

} else { 
    $sql = "SELECT room_id 
        FROM 
         room 
        WHERE 
         room_type = '".$_GET['room_type']."' order by room_number asc 
        "; 
    $room_id = $db->GetOne($sql);; 
} 
$_newdate = "$year-$month-$date"; 
$sql = "SELECT booking_status 
     FROM 
      bookings 
     where 
      checkin <= '$_newdate' 
      and 
      '$_newdate' <= checkout 
      and 
      room_id = '$room_id' 
     "; 
/*echo $sql; 
exit;*/ 
$result = $db->GetOne($sql);; 
if ($result == 1) { 
    return '#FF0'; 
} else if ($result == 2) { 
    return '#F00'; 
} else { 
    return '#64C733'; 
} 

} 

のindex.php:私は23-25から部屋を予約した場合、それは23とここで24は、カレンダーのコードですでなければなりませんwheather 24と25を予約したマーク関数:

 $prev_month = (($month - 1) == 0) ? 12 : $month -1 ; 
     $prev_year = ($prev_month == 12) ? $year - 1 : $year; 
    ?> 
    <h2 class="calender"> 
    <a href="index.php?month=<?php echo $prev_month ?>&year=<?php echo $prev_year ?>" class="prev"> &gt;&gt;</a> 


    <span class="month"><?php echo date('F',mktime(0,0,0,$month,1,$year)).' '.$year.''; ?></span> 
    <?php 
     $next_month = (($month + 1) == 13) ? 1 : $month + 1 ; 
     $next_year = ($prev_month == 1) ? $year + 1 : $year; 
    ?> 
    <a href="index.php?month=<?php echo $next_month ?>&year=<?php echo $next_year ?>" class="next"> 
     &lt;&lt;</a> 

ありがとうございました。

答えて

2

:2月の場合

$next_year = ($prev_month == 1) ? $year + 1 : $year; 

を、$prev_monthは1に設定されているので、あなたの$next_year$year + 1となっています。それは、このことなら

$next_year = ($month == 12) ? $year + 1 : $year; 
+0

はいこの行で問題が解決しました。ありがとうございます。最初の問題を解決する方法を教えていただけますか?もう一度ありがとう.. –

+0

@ Snowbell92私はこの質問にのみ気づきます。とにかく、別の質問をして、その特定の問題の原因となっているコードだけを投稿する方が良いかもしれません。 – jeroen

1

あなたのコードに何があるのか​​正確には分かりませんが、今年 - 2012年 - うるう年と関係があります。

$ days_in_monthなどの変数に2月の29日間のオプションがあることを確認してください。私は第二のスニペットを見てきましたが、私はこれが問題であるかなり確信している

0

私は、あなたがしなければならないすべては、にその行を変更だと思いますか?

<?php 
    $next_month = (($month + 1) == 13) ? 1 : $month + 1 ; 
    $next_year = ($prev_month == 12) ? $year + 1 : $year; 
?> 
関連する問題