За последние 24 часа нас посетили 15748 программистов и 1647 роботов. Сейчас ищут 905 программистов ...

Таблица с инпутами.

Тема в разделе "Прочие вопросы по PHP", создана пользователем olegkaz, 12 апр 2013.

  1. olegkaz

    olegkaz Активный пользователь

    С нами с:
    21 фев 2013
    Сообщения:
    121
    Симпатии:
    0
    Привет всем! При реализации одной системы столкнулся с проблемой, описываю суть.

    Есть таблица table_data и в неё есть поля :
    Код (Text):
    1.  
    2. id       date                content
    3. 1        2013-02-09      Контент
    4. 2        2013-02-08      Контент
    5. 3        2013-02-07      Контент
    6. 4        2013-02-06      Контент
    7. 5        2013-02-05      Контент
    8. 6        2013-02-04      Контент
    Есть html таблица :
    Код (Text):
    1.  
    2. <table>
    3.   <tr>
    4.     <td>
    5.     Дата
    6.     </td>
    7.     <td>
    8.     Контент
    9.     </td>
    10.   </tr>
    11.  
    12.   <tr>
    13.     <td>
    14.     2013-02-09
    15.     </td>
    16.     <td>
    17.    
    18.     </td>
    19.   </tr>
    20.  
    21.   <tr>
    22.     <td>
    23.     2013-02-08
    24.     </td>
    25.     <td>
    26.    
    27.     </td>
    28.   </tr>
    29.  
    30.   и т.д
    31. </table>
    Суть реализации такова, надо взять массив из базы, и пройтись по таблице сравнивая даты, если есть совпадение то вставлять туда определённый контент этой даты, а если нет совпадений то ставиться input. Таблица также генерируется автоматически, она получается что-то типа календаря.

    У меня получается так :
    Код (Text):
    1.  
    2. $array_content = берём все записи из таблицы
    3.  
    4. foreach($array_content as $content)
    5. {
    6.    if($content['date'] == дата в ячейке таблицы)
    7.    {
    8.       echo 'Контент';
    9.    }
    10.    else
    11.    {
    12.      echo '<input value="">';
    13.    }
    14. }
    Так как он пробегается по всему массиу само собой у меня в ячейке наберается куча инпутов, а мне нужно чтобы выводился только один input.
     
  2. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Этот вывод ты сделал в одной ячейке? Надо в foreach строить твою таблицу
    Код (Text):
    1.  
    2. foreach($array_content as $content)
    3. {
    4.    if($content['date'] == дата в ячейке таблицы)
    5.    {
    6.       echo '<td>Контент</td>';
    7.    }
    8.    else
    9.    {
    10.      echo '<td><input value=""></td>';
    11.    }
    12. }
     
  3. olegkaz

    olegkaz Активный пользователь

    С нами с:
    21 фев 2013
    Сообщения:
    121
    Симпатии:
    0
    Ну так он также настрогает ещё <td><input ></td>. К сожалению это не вариант.

    Добавлено спустя 6 минут 59 секунд:
    Он прогоняет ведь по всему полученому массиву, например если записей всего 6, то он выдаст в else 6 <input> в каждой ячейке td.
     
  4. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    тут наверное нужен полный код, а то как-то непонятно.

    вот это
    echo 'Контент';
    куда выводится? в ячейку? если да, то как определяется ячейка?
     
  5. olegkaz

    olegkaz Активный пользователь

    С нами с:
    21 фев 2013
    Сообщения:
    121
    Симпатии:
    0
    Получается есть два массива
    Первый массив это с датами календаря

    Код (Text):
    1.  
    2. Первый ключ - Номер недели
    3. Ключ - День недели
    4. Значение - Сама дата
    5.  
    6. $arrayDate = (
    7.                        1 = array(
    8.                                               1=>'2013-02-04',
    9.                                               2=>'2013-02-05',
    10.                                               3=>'2013-02-06',
    11.                                               4=>'2013-02-07',
    12.                                               5=>'2013-02-08',
    13.                                               6=>'2013-02-09',
    14.                                               7=>'2013-02-10',)
    15.                     ) и т.д
    Второй массив это выборка из баз данных я уже её показывал
    Код (Text):
    1.  
    2. id       date                content
    3. 1        2013-02-09      Контент
    4. 2        2013-02-08      Контент
    5. 3        2013-02-07      Контент
    6. 4        2013-02-06      Контент
    7. 5        2013-02-05      Контент
    8. 6        2013-02-04      Контент
    Формируется таблица
    Код (Text):
    1.  
    2. <table>
    3. <? foreach ($arrayDate as $numWeek): ?>
    4.         <tr>            
    5.             <? foreach($numWeek as $number_day=>$date_day): ?>
    6.             <td>
    7.                 <? if(!empty($date_day)): ?>
    8.  
    9.                     Так вот здесь и должна проходить проверка на соответсвие дат с базой данных и если его нет то вставка одного импута, если есть то контент который соответсвует этой дате. Контент выводиться без проблем, а вот инпут прогоняет столько раз сколько находит не соотвествий это и логичко при конструкции if else. Может как-то по другому надо сделать.
    10.  
    11.                 <? endif ?>            
    12.             </td>
    13.             <? endforeach ?>
    14.         </tr>
    15. </table>
    Добавлено спустя 29 секунд:
    Уже день на этот вопрос убил.
    Может у кого есть мысли.
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Тебе какие мысли нужны, как отобразить календарь или как обойтись одним инпутом для ввода 30 значений?
    Задай вопрос кратко и по существу.
     
  7. olegkaz

    olegkaz Активный пользователь

    С нами с:
    21 фев 2013
    Сообщения:
    121
    Симпатии:
    0
    Нужно чтобы если нет совпадений то в ячейке был инпут.
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Скажу одно: если не понятно, упрощай.
    Нужен только один цикл для вывода календаря.
     
  9. olegkaz

    olegkaz Активный пользователь

    С нами с:
    21 фев 2013
    Сообщения:
    121
    Симпатии:
    0
    Неужели ни у кого не было такой задачи?

    Упрощать на стадии формирования календаря?
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    За тебя всегда кто-то решает?

    Календарь это непрерывный набор дат в заданном диапазоне. Напрашивается цикл for.
    События месяца это считанный с базы набор пар дата => описание. Отлично подошел бы ассоциативный массив.
    Крутишь цикл дат, выводишь ячейки календаря, делая по дороге if (isset($event[$data])) ...
    Проще некуда.
     
  11. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    если ещё не решил, то проблема как раз в том, что в самом внутри идёт ещё один цикл по данным из базы. можно вынести его до всех циклов и сделать массив вот такой
    и потом через isset проверять, если ли такая дата. если даты нет, то ставить требуемый инпут. Проверка будет всего одна (не через цикл) и итпут в ячейке будет всего один.