За последние 24 часа нас посетил 20221 программист и 1578 роботов. Сейчас ищут 1943 программиста ...

Вывод данных в таблицу из файла с привязкой ко времени

Тема в разделе "PHP Free-Lance", создана пользователем inter91, 19 июн 2014.

  1. inter91

    inter91 Новичок

    С нами с:
    19 июн 2014
    Сообщения:
    6
    Симпатии:
    0
    Есть сайт телеканала на Drupal 7. Нужно реализовать подобную штуку:
    [​IMG]
    Есть файл с расписанием программ (.xlsx или .csv - со столбцами вида
    |6/16/2014 | 0:00 | "НАЗВАНИЕ" |12+| ) , нужно читать данные из этого файла и выводить в таблицу html в зависимости от даты и времени суток. В таблице должно быть 3 столбца - время, название и ограничение по возрасту, и 3 строки - уже прошедшая передача, идущая в данный момент и следующая.
    Вопросы и предложения на мэйл: inter91@mail.ru
     
  2. Bio

    Bio Новичок

    С нами с:
    17 июн 2014
    Сообщения:
    18
    Симпатии:
    0
    table.php
    Код (Text):
    1.  
    2. <?php
    3. header("Content-Type: text/html; charset=windows-1251");
    4.  
    5. $f=file("data.csv");
    6. foreach($f as $k=>$v){
    7.     $f[$k]=explode(";","$v");
    8. }
    9.  
    10. $day=date("d-m-Y",time());
    11. $H=date("H",time());
    12. $i=date("i",time());
    13. $arr=array();
    14.  
    15. foreach($f as $k=>$v){
    16.     foreach($v as $l=>$d){
    17.         if($d==$day){
    18.             if($v["1"]+0===$H){
    19.                 list(,$arr[$k])=explode(":",$v['1']);
    20.             }
    21.         }
    22.     }
    23. }
    24. function getTable($value){
    25. echo "<table border=1>";
    26.     GLOBAL $f;
    27.     $past=$value-1;
    28.     $future=$value+1;
    29.     echo "<tr>  <td>До:</td><td>{$f[$past][1]}</td><td>{$f[$past][2]}</td><td>{$f[$past][3]}</td>             </tr>";
    30.     echo "<tr>  <td>Сейчас:</td><td>{$f[$value][1]}</td><td>{$f[$value][2]}</td><td>{$f[$value][3]}</td>      </tr>";
    31.     echo "<tr>  <td>Далее:</td><td>{$f[$future][1]}</td><td>{$f[$future][2]}</td><td>{$f[$future][3]}</td>     </tr>";
    32. echo "<table>";
    33. }
    34.  
    35. end($arr);
    36. $key=key($arr);
    37. foreach($arr as $k=>$v){
    38.     if($v==$i){
    39.         getTable($k);
    40.         break;
    41.     }
    42.     if($v>$i){
    43.         $k--;
    44.         getTable($k);
    45.         break;
    46.     }
    47.     if($key==$k){
    48.         getTable($k);
    49.         }
    50. }
    51. ?>
    data.csv
    Код (Text):
    1.  
    2. 19-06-2014;21:45;Football;0+
    3. 19-06-2014;22:00;Вести;12+
    4. 19-06-2014;22:15;Моя планета;10+
    5. 19-06-2014;23:00;Мультфильмы;0+
    6. 19-06-2014;23:45;Хоккей;7+
    Код требует доработки (различных проверок), но так более менее работает.
     
  3. inter91

    inter91 Новичок

    С нами с:
    19 июн 2014
    Сообщения:
    6
    Симпатии:
    0
    А если из базы? Сейчас так выводится:
    Код (Text):
    1. <?php<?
    2.  
    3. include ("blocks/db.php");   // подключение блока где реализуется подключение к БД
    4. $strSQL = "SELECT date,time,name,age FROM tvprogram";     // запрос
    5. $rs = mysql_query($strSQL);                          
    6. $table = "<table border=1 width = '600px' align=center>";
    7. while($row = mysql_fetch_array($rs)) {                   //цикл
    8.  $table .= "<tr >";
    9.  $table .= "<td >".$row['time']."</td>";
    10.  $table .= "<td >".$row['name']."</td>";
    11.  $table .= "<td >".$row['age']."</td>";
    12.  $table .= "</tr>";
    13.       }
    14. $table .= "</table>";
    15.         echo $table;           // выводится
    16.     // Закрыть соединение с БД
    17.     mysql_close();
    18.     ?>
     
  4. Bio

    Bio Новичок

    С нами с:
    17 июн 2014
    Сообщения:
    18
    Симпатии:
    0
    Задача актуальна, или сам разобрался?
     
  5. inter91

    inter91 Новичок

    С нами с:
    19 июн 2014
    Сообщения:
    6
    Симпатии:
    0
    Почти. Нужно вывести строку - передача идущая в данный момент.
    Пока как то так. Выводится передача, в поле time которой первая цифра минуты совпадает с текущей первой цифрой минуты. Не могу подобрать условие.
    Код (Text):
    1. <?
    2.  include ("blocks/db.php");   // подключение блока где реализуется подключение к БД
    3. $strSQL = "SELECT date,time,name,age,week FROM tvprogram";     // запрос
    4. $rs = mysql_query($strSQL);
    5. $cdate = date("w");
    6. $d = date("D");
    7. $ctime = date("H");
    8. $cmin = date("i");
    9. if ($row['week'] == $cdate ) {  $table1 = "<div name='top' id='segodnya' class='progra'>";}
    10. else {  $table1 = "<div class='progra'>";}
    11. while($row = mysql_fetch_array($rs)) {
    12. $hour=substr($row['time'],0,2);  
    13. $min=substr($row['time'],3,1);
    14. $ccmin=substr($cmin,0,1);  
    15. if ($row['week'] == $cdate  and $hour==$ctime and $min == $ccmin) {  
    16. $table1 .= "<div class='strprg'>";
    17.  $table1 .= "<div id='ttime'>".$row['time']."</div>";
    18.  $table1 .= "<div id='tneme'>".$row['name']."</div>";
    19.  $table1 .= "<div id='tage'>".$row['age']."</div>";
    20.  $table1 .= "</div>";
    21. }
    22. }
    23. $table1 .= "</div>";
    24. //-------------------------------------------------------------
    25. if ($d == "Mon") {echo "Понедельник";}
    26. elseif ($d == "Tue") {echo "Вторник";}
    27. elseif ($d == "Wed"){echo "Среда";}
    28. elseif ($d == "Thu"){echo "Четверг";}
    29. elseif ($d == "Fri"){echo "Пятница";}
    30. elseif ($d == "Sat"){echo "Суббота";}
    31. else {echo "Воскресенье";}
    32. //-------------------------------------------------------------
    33.  echo $table1;  
    34.  
    35.     mysql_close();
    36. ?>
     
  6. Bio

    Bio Новичок

    С нами с:
    17 июн 2014
    Сообщения:
    18
    Симпатии:
    0
    Лови:
    Код (Text):
    1.  
    2. <?php
    3. header("Content-Type: text/html; charset=utf-8");
    4.  
    5. $link=mysqli_connect("***","***","***","table_tv")or die("Не удалось подключиться к серверу БД.");
    6. $date=date("d-m-Y",time());
    7. $sql="SELECT time, name, age FROM tvprogram WHERE date='$date'";
    8. $result=mysqli_query($link,$sql)or die(mysqli_error($link));
    9. while($row=mysqli_fetch_assoc($result)){
    10.     $arr[]=$row;
    11. }
    12. mysqli_close($link);
    13. if(!isset($arr)){
    14. echo "Телепрограмма на сегодняшний день пуста!";
    15. exit;
    16. }
    17.  
    18. function getTable($value){
    19. echo "<table border=1>";
    20.     GLOBAL $arr;
    21.     $current=$value-1;
    22.     $past=$value-2;
    23.     echo "<tr>  <td>До:</td><td>{$arr[$past]["time"]}</td><td>{$arr[$past]["name"]}</td><td>{$arr[$past]["age"]}</td>             </tr>";
    24.     echo "<tr>  <td>Сейчас:</td><td>{$arr[$current]["time"]}</td><td>{$arr[$current]["name"]}</td><td>{$arr[$current]["age"]}</td>        </tr>";
    25.     echo "<tr>  <td>Далее:</td><td>{$arr[$value]["time"]}</td><td>{$arr[$value]["name"]}</td><td>{$arr[$value]["age"]}</td>        </tr>";
    26. echo "<table>";
    27. }
    28.  
    29. $H=date("H",time());
    30. $i=date("i",time());
    31. $key=count($arr)-1;
    32. foreach($arr as $k=>$v){
    33.     foreach ($v as $l=>$d){
    34.         if($v["time"]+0==$H){
    35.             list($asd,$arr2[$k])=explode(":",$v["time"]);
    36.         }
    37.         if(!isset($arr2) and $k==$key){
    38.             foreach ($arr as $k=>$v){
    39.                 foreach($v as $l=>$d){
    40.                     if($v["time"]+0>$H){
    41.                         getTable($k);
    42.                         break 4;
    43.                     }
    44.                 }
    45.             }
    46.         }  
    47.     }
    48. }
    49.  
    50. end($arr);
    51. $key=key($arr);
    52. if(isset($arr2)){
    53.     foreach($arr2 as $k=>$v){
    54.         if($v==$i){
    55.             getTable($k);
    56.             break;
    57.         }
    58.         if($v>$i){
    59.             getTable($k);
    60.             break;
    61.         }
    62.         if($key==$k){
    63.             getTable($k);
    64.             }
    65.     }
    66. }
    67. ?>
    Дополнение: предыдущий код нечего не вывел бы, если 1 программа шла например 2 часа. Этот выведет правильную информацию.
    Примечание: если вводить время программ не по порядку, то данные в табличке будут неверные! Можно это исправить, но с соответствующими дополнениями, но главный вопрос: нужно ли это Вам?
     
  7. inter91

    inter91 Новичок

    С нами с:
    19 июн 2014
    Сообщения:
    6
    Симпатии:
    0
    Спасибо! Уже сделал по другому. Нужные строчки вычислял с помощью sql запросов.
     
  8. melkor

    melkor Новичок

    С нами с:
    20 апр 2015
    Сообщения:
    2
    Симпатии:
    0
    Использовал первый вариант с хранением в файле, но почему то получаю белый лист, в чем может быть проблема? А мне вот как раз и нужно, что бы информация считывалась с файлика. Помогите плиз.
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    melkor а где на твой файл посмотреть?
     
  10. melkor

    melkor Новичок

    С нами с:
    20 апр 2015
    Сообщения:
    2
    Симпатии:
    0