首页 > 解决方案 > 变量在 PHP 模板中变为未定义变量

问题描述

目前,我在将输出值返回到 PHP 模板时遇到问题,因为我收到一条错误消息,指出该变量在实际定义时未定义。我有一个包含所有 HTML的index.html.php模板,并且应该在主要部分中打印$output变量值。

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

同时,在我的index.php文件中$output设置为products.html.php文件的 ob_get_clean() (见下文);

 <?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') . '$'?></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 循环的结果时未定义。我已经使用相同的结构构建了另一个项目,并且一切正常,但是,在这里找不到变量未定义的问题。

标签: phpvariablesundefinedob-start

解决方案


推荐阅读