Переменная становится неопределенной переменной в шаблоне PHP

#php #variables #undefined #ob-start

#php #переменные #неопределенная #ob-start

Вопрос:

В настоящее время у меня проблема с возвратом выходных значений в шаблон PHP, потому что я получаю сообщение об ошибке, в котором говорится, что переменная не определена, когда она фактически определена. У меня есть index.html.php шаблон, который содержит весь HTML-код и должен печатать значения переменной $output в главном разделе.

     <main>
    <div class="container">
        <?=$output?>
    </div>
</main>
 

Между тем, в моем index.php file $output имеет значение ob_get_clean() для products.html.php файл (смотрите его ниже);

  <?php

try {
    //Connect to the database
    $pdo = new PDO ('mysql:host=localhost;dbname=scandiweb;charset=utf8', 'root', '');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = 'SELECT * FROM `products`';
    $products = $pdo->query($sql);
    $title = 'Product list';

    //Starts output buffer.
    ob_start();
    include __DIR__ . '/../templates/products.html.php';

    //Stores contents of output buffer into a variable
    $output = ob_get_clean();

} catch (PDOException $e) {
    $title = 'An error has occurred';
    $error = 'Database error: ' . $e->getMessage() . ' in ' . $e->getFile() . ':' . $e->getLine();
}

include __DIR__ . '/../templates/index.html.php';
 

и в products.html.php Я перебираю возвращаемые SQL данные, которые должны быть сохранены в переменной $output:

 <?php foreach ($products as $product): ?>
        <div class="card my-2">
            <div class="card-body">
                <p class="card-text text-center"><?php echo htmlspecialchars($product['sku'], ENT_QUOTES, 'UTF-8') ?></p>
                <p class="card-text text-center"><?php echo htmlspecialchars($product['name'], ENT_QUOTES, 'UTF-8') ?></p>
                <p class="card-text text-center"><?php echo htmlspecialchars($product['price'], ENT_QUOTES, 'UTF-8') . '

Однако, в конце концов, когда я тестирую index.php страница, я получаю сообщение об ошибке, в котором говорится, что переменная $output не определена, когда она должна возвращать результаты цикла foreach. Я создал другой проект, используя ту же структуру, и все работало нормально, однако не могу найти здесь проблему, почему переменная не определена.


Комментарии:

1. Я не могу воспроизвести. Хотя на самом деле вам не нужно использовать выходной буфер. Почему бы просто не включить шаблон products в шаблон index и использовать $products переменную там напрямую?

2. Я подумал, что в такой ситуации лучше использовать выходной буфер

3. "... в такой ситуации" - и в какой ситуации это будет?

?></p>

<?php if (!is_null($product['size'])): ?>
<p class="card-text text-center"><?php echo 'Size: ' . htmlspecialchars($product['size'], ENT_QUOTES, 'UTF-8') . ' MB'?></p>
<?php endif; ?>

<?php if (!is_null($product['dimensions'])): ?>
<p class="card-text text-center"><?php echo 'Dimensions: ' . htmlspecialchars($product['dimensions'], ENT_QUOTES, 'UTF-8')?></p>
<?php endif; ?>

<?php if (!is_null($product['weight'])): ?>
<p class="card-text text-center"><?php echo 'Weight: ' . htmlspecialchars($product['weight'], ENT_QUOTES, 'UTF-8') . ' KG'?></p>
<?php endif; ?>
<form action="deleteproducts.php" method="post" class="text-center" id="deleteForm">
<input type="checkbox" name="checkbox[]" class="text-center" value="<?=$product['sku']?>">
</form>
</div>
</div>
<?php endforeach; ?>
Однако, в конце концов, когда я тестирую index.php страница, я получаю сообщение об ошибке, в котором говорится, что переменная $output не определена, когда она должна возвращать результаты цикла foreach. Я создал другой проект, используя ту же структуру, и все работало нормально, однако не могу найти здесь проблему, почему переменная не определена.

Комментарии:

1. Я не могу воспроизвести. Хотя на самом деле вам не нужно использовать выходной буфер. Почему бы просто не включить шаблон products в шаблон index и использовать $products переменную там напрямую?

2. Я подумал, что в такой ситуации лучше использовать выходной буфер

3. «… в такой ситуации» — и в какой ситуации это будет?