Как правильно вставить переменные php в ячейки таблицы?

0

Я знаю, это звучит немного запутанно, но позвольте мне объяснить дальше.

У меня есть функция php, которая печатает верхнюю часть таблицы, включая теги html, как показано здесь:

function print_table_head (){
    echo "<table>
            <thead>
              <tr>
                <th>URL Link</th>
                <th>Date Start</th>
                <th>Date End</th>
                <th>Total Budget</th>
                <th>Daily Budget</th>
                <th>Model Price</th>
                <th>Unit Rate</th>
                <th>Target Info</th>
                <th>Product</th>
                <th>Status</th>
                <th>Total Units</th>
              </tr>
            </thead>
            <tbody>";
  }

У меня также есть функция, которая закрывает таблицу с тегами окончания таблицы html, как показано ниже:

function print_table_bottom(){
    echo "</tbody>
          </table>";
  }

Теперь, таблица печатает отлично и dandy до здесь. Я получаю правильные заголовки таблиц и все. Но у меня проблемы с печатью тела и содержимого. Вот как выглядит моя основная функция для печати всей таблицы, включая ее тело и содержимое:

function print_table ( $status, $model, $bid, $url, $target, $tBudget,$dBudget, $tUnits, $sMonth, $sDay, $sYear, $eMonth, $eDay, $eYear ){
    print_table_head();

    echo "<tr>
            <td><?php $url[0]; ?></td>
            <td><?php $sMonth[0] / $sDay[0] / $sYear[0];  ?></td>
            <td><?php $eMonth[0]; / $eDay[0]; / $eYear[0];  ?></td>
            <td><?php $tBudget[0]; ?></td>
            <td><?php $dBudget[0]; ?></td>
            <td><?php $model[0]; ?></td>
            <td><?php $targeting[0]; ?></td>
            <td><?php $product[0]; ?></td>
            <td><?php $status[0]; ?></td>
            <td><?php $tUnits[0]; ?></td>
          </tr>";

    print_table_bottom();

  }

Каждый раз, когда я вызываю функцию print_table, она печатает верхнюю часть таблицы с заголовками. Но он не печатает строки/ячейки таблицы. Я не уверен, что я делаю неправильно. Может ли кто-нибудь объяснить это мне и сказать, что я делаю неправильно?

ПРИМЕЧАНИЕ = Я использую основу-5. Не уверен, если это имеет значение.

Кроме того, каждая из используемых переменных - это массив (все они имеют один элемент в них... Да, я знаю, я бы не использовал массив для каждой переменной, но я хочу.)

РЕДАКТИРОВАТЬ:

В качестве запроса комментатора я предоставлю код, который вызывает print_table:

<?php
    //if the length of the array "status" is 1.
    if (count($status)==1){
      print_table ( $status, $model, $bid, $url, $target, $tBudget,$dBudget, $tUnits,$sMonth,$sDay,$sYear,$eMonth, $eDay, $eYear );
    }
    // please ignore this function. 
    else

      print_table_with_multiple_rows ( $status, $model, $bid, $url, $target, $tBudget,$dBudget, $tUnits,$sMonth,$sDay,$sYear,$eMonth, $eDay, $eYear );
  ?>
  • 1
    если вы повторяете блок HTML, это довольно хороший знак, что вам нужно вместо этого использовать некоторые шаблоны и, возможно, некоторое объектно-ориентированное кодирование, чтобы вы могли создать таблицу var, а затем вызвать $ table-> toHTML () для Это. Это решение не собирается в масштабе. На самом деле это уже не удалось.
  • 0
    Как выглядит сгенерированный HTML?
Показать ещё 8 комментариев
Теги:
function

3 ответа

1
Лучший ответ

Простой вариант

Самый простой вариант - просто переформатировать структуру данных и использовать этот код:

$data = // Structure: array([0] => array('url' => '', 'sMonth' => '', 'eMonth' => '', ...), [1] => array(...));
include 'templates/table.php';

шаблоны /Table.php

<table>
    <thead>
        <tr>
            <th>URL Link</th>
            <th>Date Start</th>
            <th>Date End</th>
            <th>Total Budget</th>
            <th>Daily Budget</th>
            <th>Model Price</th>
            <th>Unit Rate</th>
            <th>Target Info</th>
            <th>Product</th>
            <th>Status</th>
            <th>Total Units</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach($data as $row) : ?>

        <td><?php echo $row->url ?></td>
        <td><?php echo $row->sMonth . "/" . $row->sDay . "/" . $row->sYear; ?></td>
        <td><?php echo $row->eMonth . "/" . $eDay . "/" . $eYear;  ?></td>
        <td><?php echo $row->tBudget; ?></td>
        <td><?php echo $row->dBudget; ?></td>
        <td><?php echo $row->model; ?></td>
        <td><?php echo $row->targeting; ?></td>
        <td><?php echo $row->product; ?></td>
        <td><?php echo $row->status; ?></td>
        <td><?php echo $row->tUnits; ?></td>

        <?php endforeach; ?>
    </tbody>
</table>

Расширенный вариант (лучше)

Это может быть немного более продвинутым, чем остальная часть вашего кода, но это более подходящий способ писать (OO) PHP в целом. Однако это, вероятно, потребует реструктуризации всего вашего кода.

Структура каталога:

--models
    --informationmodel.php
--controllers
    --abstractcontroller.php
    --informationcontroller.php
--templates
    --information
        --table.php

модели /informationmodel.php

Во-первых, модельный класс. Эта модель отражает определенный тип данных - в этом случае любую информацию, отображаемую в вашей таблице. Этот класс не должен манипулировать данными - это просто класс, который хранит нужные вам данные.

class InformationModel { //Where "Information" is changed to describe this data type

    private $data;

    public function __construct($data = array()) { //pass the things as an associative array
        $this->data = $data;
    }

    public function __set($key, $value) {
        $this->data[$key] = $value;
    }

    public function setData($data) {
        $this->data = $data;
    }
}

Контроллеры /abstractcontroller.php

Это абстрактный контроллер. Контроллер находится там, где хранится ваша логика приложения. Это должно включать в себя манипулирование данными, поиск модели и т.д. Абстрактный класс используется каждым контроллером, чтобы предоставить ему доступ к определенным функциям, которые являются общими для всех контроллеров.

abstract class AbstractController {

    // add more functions for all controllers here

    public function renderTemplate($template, $data) {
        include $template;
    }
}

Контроллеры /informationcontroller.php

Вот фактический контроллер. Внутри этого контроллера мы можем определить действия - в этом случае мы будем определять действие таблицы. Это означает, что мы можем вызвать это действие, чтобы отобразить таблицу с данными, которые мы ее даем. Это полезно, потому что, если мы хотим изменить способ представления данных, это легко сделать. Мы могли бы даже сделать так, чтобы данные были представлены в другом формате, чем HTML, если мы его настроим, чтобы вы могли указать это. Прямо сейчас у нас простое действие: загрузить данные и передать их в шаблон.

require_once 'models/informationmodel.php'; // note: autoloading would be preferable

class InformationController extends AbstractController {

    public function tableAction($rawData) {

        $data = new InformationModel($rawData);

        $this->renderTemplate('templates/information/table.php', $data);
    }
}

шаблоны/информация /Table.php

Это шаблон. Здесь вы определяете способ отображения кода. Если вы хотите пойти дальше, загляните в шаблонный движок, такой как Twig (мои личные рекомендации). Это чисто для представления данных. как вы увидите, я поместил шаблон в папку для отображения определенного типа информации: таблицу информации типа данных (или что бы вы ни изменили ее). Это поможет вам организовать ваши шаблоны.

<table>
    <thead>
        <tr>
            <th>URL Link</th>
            <th>Date Start</th>
            <th>Date End</th>
            <th>Total Budget</th>
            <th>Daily Budget</th>
            <th>Model Price</th>
            <th>Unit Rate</th>
            <th>Target Info</th>
            <th>Product</th>
            <th>Status</th>
            <th>Total Units</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach($data as $row) : ?>

        <td><?php echo $row->url ?></td>
        <td><?php echo $row->sMonth . "/" . $row->sDay . "/" . $row->sYear; ?></td>
        <td><?php echo $row->eMonth . "/" . $eDay . "/" . $eYear;  ?></td>
        <td><?php echo $row->tBudget; ?></td>
        <td><?php echo $row->dBudget; ?></td>
        <td><?php echo $row->model; ?></td>
        <td><?php echo $row->targeting; ?></td>
        <td><?php echo $row->product; ?></td>
        <td><?php echo $row->status; ?></td>
        <td><?php echo $row->tUnits; ?></td>

        <?php endforeach; ?>
    </tbody>
</table>

Как вы можете видеть, я изменил структуру данных: данные обрабатываются в строках, и эти строки содержат только один элемент. Использование шаблонизатора приведет к уменьшению уродства структуры <?php echo $row->status?> - в Twig это выглядит так: {{ row.status }}.

Затем, чтобы фактически использовать этот код:

любую страницу, которую вы используете

require_once "controllers/informationcontroller.php"; //even better: use autoloading

// $data =  get your data in here somewhere.

$info = new InformationController();
$info->tableAction($data); // prints out a table;

Очевидно, что это много новой информации, но это полезно. Если вы потратите время на изучение объектно-ориентированного PHP (OOPHP), MVC, шаблонов и т.д., Вы станете лучшим программистом, и ваш код будет легче писать и поддерживать. Дополнительные темы: Twig, Autoloading, Injection of Injection/Inversion of Control, Namespacing, Routing

Прямо сейчас класс модели на самом деле ничего не делает, и я не использовал инъекцию зависимостей (существует прямая зависимость от класса модели внутри контроллера, на который неодобрительно), но основные понятия здесь. Пока вы можете просто передать данные непосредственно контроллеру или даже непосредственно в шаблон.

Отказ от ответственности: я не тестировал этот код. Однако в любом случае это потребует некоторой модификации. Если вы действительно хотите продолжить писать веб-сайт на PHP, вам следует рассмотреть его структурирование таким образом.

1

ehm.. you mess php и html..

function print_table ( $status, $model, $bid, $url, $target, $tBudget,$dBudget, $tUnits, $sMonth, $sDay, $sYear, $eMonth, $eDay, $eYear ){
    print_table_head();

    echo "<tr>
            <td>{$url[0]}</td>
            <td>{$sMonth[0]} / {$sDay[0]} / {$sYear[0]}</td>
            <td>{$eMonth[0]} / {$eDay[0]} / {$eYear[0]}</td>
            <td>{$tBudget[0]}</td>
            <td>{$dBudget[0]}</td>
            <td>{$model[0]}</td>
            <td>{$targeting[0]}</td>
            <td>{$product[0]}</td>
            <td>{$status[0]}</td>
            <td>{$tUnits[0]}</td>
          </tr>";

    print_table_bottom();

  }
  • 0
    Хотя это и правда, это не должно препятствовать генерации таблицы. Это просто дало бы неправильные значения в каждой ячейке.
  • 0
    У меня есть этот точный код. Это не печатает ничего из этого.
Показать ещё 2 комментария
0

Я считаю это более читаемым лично:

function print_table ( $status, $model, $bid, $url, $target, $tBudget,$dBudget, $tUnits, $sMonth, $sDay, $sYear, $eMonth, $eDay, $eYear ){
    print_table_head();
    ?>

    <tr>
        <td><?= array_shift($url); ?></td>
        <td><?= array_shift($sMonth), "/", array_shift($sDay), "/", array_shift($sYear); ?></td>
        <td><?= array_shift($eMonth), "/", array_shift($eDay), "/", array_shift($eYear); ?></td>
        <td><?= array_shift($tBudget); ?></td>
        <td><?= array_shift($dBudget); ?></td>
        <td><?= array_shift($model); ?></td>
        <td><?= array_shift($targeting); ?></td>
        <td><?= array_shift($product); ?></td>
        <td><?= array_shift($status); ?></td>
        <td><?= array_shift($tUnits); ?></td>
    </tr>

    <?php
    print_table_bottom();

  }

Примечание. Если это не работает, возможно, это связано с тем, что ваш PHP не принимает <?=. В этом случае вместо этого используется значение <?= <?php echo.

  • 0
    Я согласен, за исключением коротких тегов. Это не включено в каждой среде.
  • 0
    Я собирался поставить все это, но так как в PHP 5.4 он включен и в большинстве сред также включен, я решил его включить. Я напишу отказ от ответственности однако.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню