如何在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
相关产品推荐
相关产品推荐

