You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在HTML嵌套的PHP echo语句中正确输出PHP代码内容?

解决PHP echo中动态输出数据库内容到表单的问题

你的代码里有两个关键问题导致动态内容没正确显示:

问题1:PHP标签不能嵌套在echo的字符串里

当你已经在PHP代码块中(比如function内部),echo输出的是字符串内容,其中的<?php ... ?>会被当作普通文本直接打印到页面上,PHP不会解析这些嵌套的标签。

问题2:变量赋值顺序错误

你原来的代码中,先echo输出了表单,之后才通过while循环从数据库获取$cat_title的值——这意味着当输出表单时,$cat_title还没有被赋值,即使语法正确也拿不到数据。


正确的实现方案

方案1:调整逻辑顺序 + 字符串拼接

先从数据库查询并获取$cat_title的值,再输出表单,通过字符串拼接把变量值插入到HTML属性中:

function update_category(){
    global $connection;
    if (isset($_GET['edit'])) {
        $edit_cat_key = $_GET['edit'];
        // 注意:这里建议使用预处理语句防止SQL注入,示例暂时保留你的写法
        $query = "SELECT * FROM categories WHERE cat_id = {$edit_cat_key}";
        $edit_cat_query = mysqli_query($connection, $query);
        
        // 先初始化变量,避免未定义报错
        $cat_title = '';
        // 从查询结果中获取分类名称(因为cat_id是唯一的,用if代替while更合适)
        if($row = mysqli_fetch_assoc($edit_cat_query)) {
            $cat_title = $row['cat_title'];
            $cat_id = $row['cat_id'];
        }
        
        // 用字符串拼接插入动态值,同时用htmlspecialchars防止XSS攻击
        echo '<form action="categories.php" method="post">
                <div class="form-group">
                    <label for="new-cat-title">New name of category</label>
                    <input value="' . htmlspecialchars($cat_title) . '" type="text" class="form-control" name="new-cat-title">
                </div>
                <div class="form-group">
                    <input class="btn btn-primary" type="submit" name="submit" value="Rename Category">
                </div>
              </form>';
    }
}

方案2:跳出PHP块直接写HTML(更易读)

当需要输出大量HTML时,跳出PHP代码块(用?>)直接编写HTML,只在需要动态内容的地方插入PHP代码,这种方式更清晰,不容易出错:

function update_category(){
    global $connection;
    if (isset($_GET['edit'])) {
        $edit_cat_key = $_GET['edit'];
        $query = "SELECT * FROM categories WHERE cat_id = {$edit_cat_key}";
        $edit_cat_query = mysqli_query($connection, $query);
        
        $cat_title = '';
        if($row = mysqli_fetch_assoc($edit_cat_query)) {
            $cat_title = $row['cat_title'];
            $cat_id = $row['cat_id'];
        }
        ?>
        <!-- 直接写HTML,需要动态内容时插入PHP -->
        <form action="categories.php" method="post">
            <div class="form-group">
                <label for="new-cat-title">New name of category</label>
                <input value="<?php echo htmlspecialchars($cat_title); ?>" type="text" class="form-control" name="new-cat-title">
            </div>
            <div class="form-group">
                <input class="btn btn-primary" type="submit" name="submit" value="Rename Category">
            </div>
        </form>
        <?php
    }
}

额外提示

  • 安全问题:一定要用htmlspecialchars()转义输出到HTML中的变量,防止XSS跨站脚本攻击。
  • SQL注入风险:你的查询语句直接把$_GET['edit']拼接到SQL中,存在SQL注入风险,建议使用mysqli预处理语句或者PDO来处理数据库查询。

内容的提问来源于stack exchange,提问作者Janus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:07:32