Создать ответ 
Вывод данных по БД на календарь
Автор Сообщение
by_haskell Не на форуме
Ефрейтор
*

Сообщений: 11
У нас с: Jan 2014
Сообщение: #1
Вывод данных по БД на календарь
Здравствуйте! Как только не пытался сделать, никак не получалось. Есть календарь (такой лишь подойдет к задумке по сайту), нужно что бы он смотрел в таблицу match и выводил по дате которая записанная в БД данные (данные здесь уже любые, я подкорректирую если будет что на этот счет). В календаре уже есть поиск по сегодняшнему дню, примерно так хочется что бы отображались что есть на такое-то число что-то в БД.

Сам скрипт
PHP код:
<?php
// проверяем передали ли нам месяц и год
if(isset($_GET["ym"]))
{
    
$year = (int)substr($_GET["ym"], 04);
    
$month = (int)substr($_GET["ym"], 42);
}
else    
// иначе выводить текущие месяц и год
{
    
$month date("m"mktime(0,0,0,date('m'),1,date('Y')));
    
$year date("Y"mktime(0,0,0,date('m'),1,date('Y')));
}
 
$skip date("w"mktime(0,0,0,$month,1,$year)); // узнаем номер дня недели
$daysInMonth date("t"mktime(0,0,0,$month,1,$year));    // узнаем число дней в месяце
$calendar_head '';    // обнуляем calendar head
$calendar_body '';    // обнуляем calendar boday
$day 1;    // для цикла далее будем увеличивать значение
 
for($i 0$i 6$i++) // Внешний цикл для недель 6 с неполными
{
    
$calendar_body .= '<tr>';    // открываем тег строки
    
for($j 0$j 7$j++)    // Внутренний цикл для дней недели
    
{
        if((
$skip 0)or($day $daysInMonth)) // выводим пустые ячейки до 1 го дня и после полного количества дней
        
{
            
$calendar_body .= '<td class="none">&nbsp;</td>'
            
$skip--;
        }
        else
        {
            if(
$j == 0)    // если воскресенье то отмечаем выходной
                
$calendar_body .= '<td class="holiday">'.$day.'</td>'
            else {    
// в противном случае просто выводим день в ячейке
                
if ((date(j)==$day)&&(date(m)==$month)&&(date(Y)==$year)){//проверяем на текущий день
                    
$calendar_body .= '<td class="today">'.$day.'</td>';
                }    
                else{ 
                    
$calendar_body .= '<td class="day">'.$day.'</td>'
                   }
                 }
            
$day++; // увеличиваем $day
        
}
        
    }    
// закрываем внутренний цикл
    
$calendar_body .= '</tr>'// закрываем тег строки
// закрываем внешний цикл
 
// заголовок календаря
$calendar_head '
  <tr>      
    <th colspan="2"><a href="?ym='
.date("Ym"mktime(0,0,0,$month-1,1,$year)).'">&laquo; Пред</a></th>
      <th colspan="3">'
.date("F, Y"mktime(0,0,0,$month,1,$year)).'</th>
      <th colspan="2"><a href="?ym='
.date("Ym"mktime(0,0,0,$month+1,1,$year)).'">След &raquo;</a></th>
  </tr>
  <tr>
    <th>Воскресенье</th>
    <th>Понедельник</th>
    <th>Вторник</th>
    <th>Среда</th>
    <th>Четверг</th>
    <th>Пятница</th>
    <th>Суббота</th>
  </tr>'
;
  
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;" />
<title>Calendar</title>
<style type="text/css">
body{margin:0 auto; width:800px; padding:10px;}
#calendar{border:0px;}
#calendar tbody tr{ height:40px;}
#calendar td{ width:80px; border:0px; border:solid 1px #99FF99; font-size:22px; text-align:center;}
#calendar th{background-color:#4DDBFF; border:solid 1px #00CCFF; color:#ffffff;}
#calendar td.none{border:0px;}
#calendar td.holiday{ background-color:#FF6633; border-color:#FF531A; color:#94E4FF;}
.day{ background-color:#CCFFCC; color:#00B32D;}
#calendar td.today{background-color:#FFFF99; border-color:#FF531A;}
</style>
 
</head>
<body>
<!-- таблица для вывода календаря -->
<table id="calendar" width="710" border="1" cellspacing="0" cellpadding="5">
<thead> 
  <?php echo $calendar_head?>
</thead>
<tbody>
    <?php echo $calendar_body?>
</tbody>
</table>
<!-- таблица для вывода календаря -->
</body>
</html> 
Пы.Сы. Скрипт с интернета, но помощи там ждать не приходится, есть какие-то мысли потому, как связать БД с календарем?
11.05.2014 19:18:08
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #2
RE: Вывод данных по БД на календарь
Решение еще зависит и от того, в каком формате у Вас хранится дата в таблице match. Предположим, что дата у Вас хранится в поле date в формате 2014-05-11, тогда при минимальных изменениях скрипт будет такой:

PHP код:
for($i 0$i 6$i++) // Внешний цикл для недель 6 с неполными
{
    
$calendar_body .= '<tr>';    // открываем тег строки
    
for($j 0$j 7$j++)    // Внутренний цикл для дней недели
    
{
        if((
$skip 0)or($day $daysInMonth)) // выводим пустые ячейки до 1 го дня и после полного количества дней
        
{
            
$calendar_body .= '<td class="none">&nbsp;</td>';
            
$skip--;
        }
        else
        {
            if(
$j == 0)    // если воскресенье то отмечаем выходной
                
$calendar_body .= '<td class="holiday">'.$day;
            else {    
// в противном случае просто выводим день в ячейке
                
if ((date(j)==$day)&&(date(m)==$month)&&(date(Y)==$year)){//проверяем на текущий день
                    
$calendar_body .= '<td class="today">'.$day;
                }
                else{
                    
$calendar_body .= '<td class="day">'.$day;
                   }
                 }
            
$res=mysqli_query($db,"SELECT * FROM match WHERE date='".$year.'-'.$month.'-'.$day."' ");
            while (
$events=mysqli_fetch_array($res)) $calendar_body .= '<br>'.$events["text"];
            
$calendar_body .='</td>';
            
$day++; // увеличиваем $day
        
}

    }    
// закрываем внутренний цикл
    
$calendar_body .= '</tr>'// закрываем тег строки
// закрываем внешний цикл 

Не стал указывать целиком, а только тот блок, в котором будут изменения.
Думаю, 30 SQL запросов в цикле будет не очень страшно. Scratch

Можно конечно и одним запросом вытянуть, но лень было думать про двумерные, а то и трехмерные массивы. Тут еще зависит, каждой дате соответствует только одна запись в базе или их может быть несколько.
11.05.2014 22:02:01
Найти все сообщения Цитировать это сообщение
by_haskell Не на форуме
Ефрейтор
*

Сообщений: 11
У нас с: Jan 2014
Сообщение: #3
RE: Вывод данных по БД на календарь
(11.05.2014 22:02:01)Admin писал(а):  Решение еще зависит и от того, в каком формате у Вас хранится дата в таблице match. Предположим, что дата у Вас хранится в поле date в формате 2014-05-11, тогда при минимальных изменениях скрипт будет такой:

PHP код:
for($i 0$i 6$i++) // Внешний цикл для недель 6 с неполными
{
    
$calendar_body .= '<tr>';    // открываем тег строки
    
for($j 0$j 7$j++)    // Внутренний цикл для дней недели
    
{
        if((
$skip 0)or($day $daysInMonth)) // выводим пустые ячейки до 1 го дня и после полного количества дней
        
{
            
$calendar_body .= '<td class="none">&nbsp;</td>';
            
$skip--;
        }
        else
        {
            if(
$j == 0)    // если воскресенье то отмечаем выходной
                
$calendar_body .= '<td class="holiday">'.$day;
            else {    
// в противном случае просто выводим день в ячейке
                
if ((date(j)==$day)&&(date(m)==$month)&&(date(Y)==$year)){//проверяем на текущий день
                    
$calendar_body .= '<td class="today">'.$day;
                }
                else{
                    
$calendar_body .= '<td class="day">'.$day;
                   }
                 }
            
$res=mysqli_query($db,"SELECT * FROM match WHERE date='".$year.'-'.$month.'-'.$day."' ");
            while (
$events=mysqli_fetch_array($res)) $calendar_body .= '<br>'.$events["text"];
            
$calendar_body .='</td>';
            
$day++; // увеличиваем $day
        
}

    }    
// закрываем внутренний цикл
    
$calendar_body .= '</tr>'// закрываем тег строки
// закрываем внешний цикл 

Не стал указывать целиком, а только тот блок, в котором будут изменения.
Думаю, 30 SQL запросов в цикле будет не очень страшно. Scratch

Можно конечно и одним запросом вытянуть, но лень было думать про двумерные, а то и трехмерные массивы. Тут еще зависит, каждой дате соответствует только одна запись в базе или их может быть несколько.
Выдает такое "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in W:\domains\textovik\calendar.php on line 96" формат даты такой же как вы указали, пробовал просто вывести
echo '".$year."'-'".$month."'-'".$day."';
Выводит - 0
Если просто поочередно выводить то все в порядке, лишь day - принимает 32
11.05.2014 22:36:22
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #4
RE: Вывод данных по БД на календарь
Вы точно заменили только часть скрипта, а то я не стал копировать ту часть, которая не меняется? Столбец date заменили на название того, в котором у Вас хранится дата?

echo '".$year."'-'".$month."'-'".$day."'; не может выводить 0, там же дефисы и начальное значение для $day равно 1. Scratch

Вы в каком месте пытались вывести? Попробуйте сразу перед MySQL запросом.
11.05.2014 23:09:36
Найти все сообщения Цитировать это сообщение
by_haskell Не на форуме
Ефрейтор
*

Сообщений: 11
У нас с: Jan 2014
Сообщение: #5
RE: Вывод данных по БД на календарь
(11.05.2014 23:09:36)Admin писал(а):  Вы точно заменили только часть скрипта, а то я не стал копировать ту часть, которая не меняется? Столбец date заменили на название того, в котором у Вас хранится дата?

echo '".$year."'-'".$month."'-'".$day."'; не может выводить 0, там же дефисы и начальное значение для $day равно 1. Scratch

Вы в каком месте пытались вывести? Попробуйте сразу перед MySQL запросом.

Да все точно скопировал, нашел откуда вырезали, ставил только что вот перед запросом - выводит 0 все равно. Столбец date как и у вас.
11.05.2014 23:16:56
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru