2015-03-25 2 views
0

Нужна помощь по этому пожалуйста Штабелеры. работает в определенной степени, но застревает в цикле инфузии и время ожидания. Отображает дни выбранного месяца, и мне нужно проверить базу данных и выделить другим классом те, у которых есть данные.Подсвечивание только дней с данными в календаре

Я знаю там несколько похожих скриптов, но это отзывчиво, работает на sqlite и не использует таблицы.

Это где я получил:

############################################################# 
$months31 = array("01","03","05","07","08","10","12"); // MONTHS WITH 31 DAYS 
if($_SESSION['m'] == 02): // IF FEBRUARY 
$daysinmonth = cal_days_in_month (CAL_GREGORIAN , $_SESSION['m'] , $_SESSION['y']); // CHECK DAYS IN FEBRUARY AND CHECK FOR LEAP YEAR 
elseif(in_array($_SESSION['m'],$months31)): // IF IN ARRAY OF MONTHS WITH 31 DAYS 
$daysinmonth = 31; // DAYS IN MONTH = 31 
else: 
$daysinmonth = 30; // DAYS IN MONTH = 30 
endif; 
    ########## ADD DAYS OF SELECTED MONTH ############ 
$d = 1; 
$day = $d ; 
$selectedmonth = $_SESSION['m']; 
$selectedyear = $_SESSION['y']; 
################################################## 
while($d <= $daysinmonth): 
####################### GET DATA FROM DATABASE FOR SELECTED YEAR AND MONTH ################# 
$calshow = $caldb->query("SELECT day FROM calandar WHERE month = '$selectedmonth' AND year = '$selectedyear' "); 
foreach($calshow as $cal): 
$showday = $cal['day']; 


############ HIGHLIGHTS CURRENT DAY ############ 
if($d == $curday && $_SESSION['m']== $curmonth && $_SESSION['y'] == $curyear): 
$today = 'sel'; 
else: 
$today = ''; 
endif; ?> 


<a href="####"> 
    <li class="day <?php echo $today;?><?php if($showday == $d): echo 'data'; endif;?>"><?php echo $d++;?></li></a> 
<?php endforeach; 
endwhile;?> 
+0

дней месяца, указанного здесь: –

ответ

0

Это ваша проблема:

while($d <= $daysinmonth): 

Вы не увеличивая $d в цикле, так что никогда не будет конца. Кроме того, я также не вижу, где вы установили $daysinmonth.

Вы, вероятно, хотите, чтобы закончить петлю что-то вроде этого:

$d++; 
endwhile;?> 

Или, возможно, вам нужно сбросить и увеличить $d в вашем foreach() цикле.

+0

Спасибо Jeroen за ответ, пробовал выше, но не работал, по моей вине я не добавил полный исходный код (теперь добавлен) –

0

Ура отсортировано !!! Есть строка в db с timestamp y-m-d, а затем строка для записей с datestamp в текущем месяце Поскольку я использую SQLITE и PDO, мне нужно использовать $ rows = $ calshow -> fetchAll(); и запрос с использованием счетчика ($ строк) = 0 - просто, когда вы знаете, как ;-)

Работа сценария здесь http://i3ry.com/cal/, если это полезно для тех, кто с той же проблемой (хорошо документированы)

$day = $d ; 
################################## 
while($d <= $daysinmonth): 
$selectedmonth = $_SESSION['m']; 
$selectedyear = $_SESSION['y']; 
$datestamp = $selectedyear.'-'.$selectedmonth.'-'.$d; 
### check if there are appointments ### 
$calshow = $caldb->query("SELECT datestamp FROM calandar WHERE datestamp = '$datestamp' AND month = '$selectedmonth' AND year = '$selectedyear'"); 
$rows = $calshow ->fetchAll(); // COUNT ROWS WHICH MATCH DATESTAMP QUERY 

### GET DATA FROM DATABASE FOR SELECTED YEAR AND MONTH ### 
if($d == $curday && $_SESSION['m']== $curmonth && $_SESSION['y'] == $curyear && count($rows)!= 0): 
$daycss = 'tdyes'; 
elseif ($d == $curday && $_SESSION['m']== $curmonth && $_SESSION['y'] == $curyear): 
$daycss = 'tdno'; 
elseif (count($rows) != 0): 
$daycss = 'dyes'; 
else: 
$daycss = 'dno'; 
endif; 
### echo count($rows); ?> 

<a href="?sh=k&ds=<?php echo $_SESSION['y']."-". $_SESSION['m']."-". $d?>&m=<?php echo $_SESSION['m'];?>&y=<?php echo $_SESSION['y'];?>"><li class="day <?php echo $daycss;?>"><?php echo $d;?></li></a> 
<?php $d++; endwhile; ?> 
Смежные вопросы