HTML嵌套PHP展示MySQL表内容运行失败,代码问题如何排查?
代码存在的问题
- 语法错误:第一部分PHP代码末尾有多余的右大括号
},会直接触发PHP语法报错,导致代码无法运行。 - 嵌套PHP标签无效:在已经开启的PHP代码块的echo语句中,再次写
<?php ?>标签不会被PHP解析,只会被当作普通字符串输出到HTML源码中,不会执行内部逻辑。 - 仅读取了单条数据:代码中只给
$row赋值为$matrix[0],也就是查询结果的第一行,后续循环10次输出的都是同一行内容,没有遍历整个$matrix结果集。 - 列数遍历不完整:表共19列,循环条件
$a<18只会遍历前18个字段,缺失最后一列数据。 - 单引号不解析变量:外层输出
<tr>用的是单引号包裹字符串,内部的$row[$a]不会被解析为PHP变量,会直接当作普通文本输出。 - 安全风险:直接拼接用户可控的
$usr到SQL语句中存在SQL注入漏洞,直接输出数据库内容到HTML页面存在XSS漏洞。
修复后可运行代码
<?php // 数据库连接 $con = mysqli_connect($host,$user,$password,$db); // 使用预处理语句避免SQL注入 $stmt = mysqli_prepare($con, "SELECT * FROM data WHERE user = ?"); mysqli_stmt_bind_param($stmt, "s", $usr); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $matrix = mysqli_fetch_all($result); // 释放资源 mysqli_stmt_close($stmt); mysqli_close($con); ?> <html> <head> <style> table { border:2px solid black; width: 100%; margin-left:0%; } tr, td { border:1px solid black; width: 1%; font-size: 20px; text-align:center; } </style> </head> <body> <table> <?php // 遍历所有查询到的行,无需硬编码10次循环 foreach($matrix as $row) { echo '<tr>'; // 遍历当前行所有字段,自动适配19列需求 foreach($row as $cell) { // htmlspecialchars处理避免XSS风险 echo "<td>".htmlspecialchars($cell)."</td>"; } echo '</tr>'; } ?> </table> </body> </html>
内容的提问来源于stack exchange,提问作者Saeed Eisakhani
相关产品推荐
相关产品推荐

