Вывод данных из БД в таблицу html с помощью php

361
07 марта 2017, 17:33

Уважаемые посетители. Есть вопрос. Суть ситуации - необходимо вывести данные из базы в таблицу на странице. Если запись в БД есть, выводить содержимое в ячейку, если нет - отрисовывать пустую клетку в таблице.

Сейчас данные отрисовываются только те, которые возвращает запрос, т.е. данные по которым есть в БД, остальное - игнорируется. Пробовал несколько вариантов вывода.

Есть еще особенность - количество дней, которое показывает соответствует данным из БД, и если смотреть исходный код страницы, то данные о конкретном дне добавились в с нужным id, но опять же пустых клеток нет.

Понял в чем проблема: массив arr - многомерный, ассоциативный. Не той функцией перебираю его и ищу значение $id в нем. Теперь другая сложность, как найти динамично изменяющийся $id в многомерном ассоциативном массиве. Нашел несколько статей на эту тему, но увы...

Прилагаю скрин.

$id = strtoupper($info[$i]['id'])."-".$gluing_date; // делаю уникальный id для каждого элемента <td>, чтобы записывать данные в нужную ячейку
$sql = "SELECT id, work_date, cause 
          FROM month_detail
         WHERE id = '".strtoupper($info[$i]['id'])."'
           AND work_date = '".$gluing_date."'
        ";  
$query = mysqli_query($connect,$sql); //Выполнение запроса в БД;
// цикл отрисовки ячеек таблицы         
$t=0;
while ($row = mysqli_fetch_assoc($query))
{
    $arr[$t]['cause'] = $row['cause'];
    $arr[$t]['concat'] = $row['id']."-".$row['work_date'];
    if (in_array($id,$arr)){ //проверка $id клетки <td> в получаемом массиве, чтобы записать конкретную запись именно в этот id
        echo "<td class='day'; id='".$id."'> ".$arr[$t]['cause']." </td>";  // если $id есть в массиве $arr, то отрисовать <td> с содержимым из БД
    } else {
        echo "<td class='day'; id='".$id."'> &nbsp; </td>"; // если нет - рисовать пустую клетку
    }
    $t++;
}
Answer 1

Вы смотрели исходник страницы, которая выводится? Если там есть

<td></td>

то пустые ячейки выводятся, просто их не видно в браузере.

Попробуйте подставить вместо неразрывного пробела какую-нибудь букву и посмотреть, выводится ли она.

Answer 2

Задайте ячейкам ширину и высоту с помощью css, можно задать радиус. И будет работать <td style="border: 1px solid red; width: 50px; height: 50px;">&nbsp;</td> Железно рисует ячейку

Answer 3

Выбор, присвоение и логика составлено логически правильно. Некорректно подобрана функция, которая осуществляет поиск значения в массиве.

В условии

if (in_array($id,$arr)){ //проверка $id клетки <td> в получаемом массиве, чтобы записать конкретную запись именно в этот id
        echo "<td class='day'; id='".$id."'> ".$arr[$t]['cause']." </td>";  // если $id есть в массиве $arr, то отрисовать <td> с содержимым из БД
    } else {
        echo "<td class='day'; id='".$id."'> &nbsp; </td>"; // если нет - рисовать пустую клетку
    }

Использовать функцию in_array - недопустимо, так как поиск осуществляется в многомерном ассоциативном массиве. По-этому описанное условие не выполняется.

READ ALSO
PHPExcel Не читает строки из xlsx

PHPExcel Не читает строки из xlsx

Здравствуйте, имеется файл импорта (неизвестно как сгенерирован) xlsx (2007)Файл в принципе читается, но сыпется ошибка на Excel2007

364
Кэширование частообновляемой базы

Кэширование частообновляемой базы

Имеется база из 6000 элементов(и это не предел), в ней 35 полей из которых половина обновляется чуть ли не каждые 5 минут(а у некоторых записей...

235
Как прибавить к дате часовой пояс?

Как прибавить к дате часовой пояс?

Нужно прибавить к текущей дате разницу между часовыми поясамиВ чем суть, у меня часовой пояс GMT +2, необходимо выводить время пользователей

227
отправка данных ajax

отправка данных ajax

Подскажите, как в opencart2 принять данные в модель, у меня есть форма

223