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

PHP输出含PHP代码的HTML表格时出现语法错误求助

问题分析与修复方案

你的代码核心问题是在echo语句里嵌套了完整的PHP标签(<?php ?>),这些标签会被当作纯文本输出到页面,根本不会被PHP解析执行。另外还有重复查询、变量未定义、SQL注入风险这些问题,下面是逐一修复后的方案:

错误点拆解

  1. echo内嵌套PHP标签无效:你试图用echo输出包含<?php ?>的字符串,PHP只会把这些标签当成普通文本打印,不会执行里面的代码。
  2. 重复数据库查询:已经执行了$fetchVideos查询,没必要在echo里再执行一次select * from videos,属于冗余操作。
  3. 变量未定义:$location这个变量根本没定义,应该用$rows['location']从查询结果里取值。
  4. SQL注入风险:直接把用户输入$input拼进SQL语句里,很容易被注入攻击,必须用预处理语句。

修复后的完整代码

<!doctype html> 
<html> 
  <head>
     <title>Search</title>
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
     <link rel="stylesheet" href="styles.css">  
  </head>
  <body>

<?php
include("config.php");
if (isset($_POST['input'])){
    $input = $_POST['input'];
    // 用预处理语句防止SQL注入
    $query = "SELECT * FROM videos WHERE location LIKE ? 
              OR FileName LIKE ? OR ImageSize LIKE ? OR MediaDuration LIKE ? 
              OR VideoFrameRate LIKE ? OR CreateDate LIKE ? OR author LIKE ? OR tags LIKE ? OR genre LIKE ? OR rating LIKE ?";
    $stmt = mysqli_prepare($con, $query);
    // 拼接%前缀,匹配以输入开头的内容
    $searchTerm = $input . '%';
    // 绑定10个字符串参数(对应10个LIKE条件)
    mysqli_stmt_bind_param($stmt, "ssssssssss", $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm, $searchTerm);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    // 把查询结果转为数组,方便后续遍历
    $videos = mysqli_fetch_all($result, MYSQLI_ASSOC);

    // 直接输出HTML,嵌入PHP逻辑,不用echo嵌套PHP
    if (!empty($videos)) {
?>
<table class="table table-bordered" style="margin-top: 50px;">
    <tr>
        <th> Video </th>
        <th> Názov </th>
        <th> Autor </th>
        <th> Tagy </th>
        <th> Žáner </th>
        <th> Hodnotenie </th>
        <th> Rozlíšenie videa </th>
        <th> Počet Snímkov </th>
        <th> Dĺžka videa</th>
        <th> Dátum Vytvorenia </th>
    </tr>
    <?php foreach($videos as $rows) { ?>
        <tr>
            <td><video src="<?php echo htmlspecialchars($rows['location']); ?>" controls width='320px' height='320px' ></video></td>
            <td><?php echo htmlspecialchars($rows['FileName']); ?></td>
            <td><?php echo htmlspecialchars($rows['author']); ?></td>
            <td><?php echo htmlspecialchars($rows['tags']); ?></td>
            <td><?php echo htmlspecialchars($rows['genre']); ?></td>
            <td><?php echo htmlspecialchars($rows['rating']); ?></td>
            <td><?php echo htmlspecialchars($rows['ImageSize']); ?></td>
            <td><?php echo htmlspecialchars($rows['VideoFrameRate']); ?></td>
            <td><?php echo htmlspecialchars($rows['MediaDuration']); ?></td>
            <td><?php echo htmlspecialchars($rows['CreateDate']); ?></td>
        </tr>
    <?php } ?>
</table>
<?php
    } else {
        echo "<p>Žiadne videá nájdené.</p>";
    }
}
?>
</body>
</html>

额外优化说明

  • 添加了htmlspecialchars()函数,防止XSS攻击,把用户输入的特殊字符转义成HTML实体。
  • 用预处理语句替代直接拼接SQL,彻底解决SQL注入风险。
  • 移除了冗余的重复查询,只执行一次搜索查询。
  • 增加了无结果时的提示信息,提升用户体验。
  • 修复了原表格里的拼写错误(Dĺžka videa</th>s多了个s)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:58:08