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

如何实现表单更新数据库?数据回显正常但更新功能待实现

解决数据库表单更新的问题

嘿,我看了你的代码,现在更新功能没工作主要是几个小问题导致的,咱们一个个解决,保证你的表单能正确更新数据库里的比赛比分:

现有代码的核心问题

  • HTML表单的method="put"在PHP中不被支持,PHP默认只处理GET和POST请求
  • 所有比分输入框用了相同的name属性,提交后只会获取最后一条记录的值,没法区分要更新哪一场比赛
  • 直接把用户输入拼到SQL语句里,存在严重的SQL注入风险
  • 部分HTML标签没有正确闭合,可能导致页面渲染异常

修改后的完整代码

表单页面(比如matches_edit.php)

<?php
include 'connect.php';

// 处理表单提交
if(isset($_POST['Submit'])){
    // 遍历提交的比分数据,每个键对应matchID
    if(isset($_POST['inphomegoals']) && is_array($_POST['inphomegoals'])){
        foreach($_POST['inphomegoals'] as $matchID => $hGoals){
            $gGoals = $_POST['inpguestGoals'][$matchID];
            // 使用预处理语句,绑定参数防止SQL注入
            $update = "UPDATE matches SET homeGoals = :homeGoals, guestGoals = :guestGoals WHERE matchID = :matchID";
            $stmt = $conn->prepare($update);
            $stmt->bindParam(':homeGoals', $hGoals, PDO::PARAM_INT);
            $stmt->bindParam(':guestGoals', $gGoals, PDO::PARAM_INT);
            $stmt->bindParam(':matchID', $matchID, PDO::PARAM_INT);
            $stmt->execute();
        }
        echo "所有选中的比赛比分已成功更新!";
    }
}
?>

<form action="" method="post">
    <table width="100%">
        <thead>
            <tr>
                <td class="colsp" colspan="5">Terminarz</td>
            </tr>
            <tr class="subcolor title-row">
                <td style="width: 10%">id</td>
                <td style="width: 40%" class="left">Gospodarz</td>
                <td style="width: 40%">Gość</td>
                <td style="width: 5%">Home<br>Goals</td>
                <td style="width: 5%">Guest<br>Goals</td>
            </tr>
        </thead>
        <tbody>
            <?php
            $display = $conn->prepare(
                "SELECT m.matchID, hc.clubName as homeClub, gc.clubName as guestClub, m.homeGoals, m.guestGoals 
                 FROM matches AS m 
                 JOIN clubs AS hc ON hc.clubID = m.homeID 
                 JOIN clubs AS gc ON gc.clubID = m.guestID 
                 ORDER BY matchID ASC"
            );
            $display->execute();
            $results = $display->fetchAll();
            foreach ($results as $index => $row){
                $matchID = $row['matchID'];
            ?>
            <tr>
                <td><label><?php echo $matchID; ?></label></td>
                <td><label><?php echo $row['homeClub']; ?></label></td>
                <td><label><?php echo $row['guestClub']; ?></label></td>
                <td>
                    <label>
                        <input type="number" name="inphomegoals[<?php echo $matchID; ?>]" value="<?php echo $row['homeGoals']; ?>"/> :
                    </label>
                </td>
                <td>
                    <label>
                        <input type="number" name="inpguestGoals[<?php echo $matchID; ?>]" value="<?php echo $row['guestGoals']; ?>"/>
                    </label>
                </td>
            </tr>
            <?php } ?>
        </tbody>
        <tfoot>
            <tr>
                <td colspan="5">
                    <input type="submit" value="更新比分" name="Submit" style="width: 150px; height: 45px"/>
                </td>
            </tr>
        </tfoot>
    </table>
</form>

connect.php(保持不变,确保在表单页面正确引入)

<?php
$db_server="localhost";
$db_username="root";
$db_password="";
$db_database="football_db";
$conn=new PDO("mysql:host=$db_server;dbname=$db_database",$db_username, $db_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>

关键修改说明

  1. 表单提交方法:把method="put"改成method="post",PHP能正常处理POST请求
  2. 输入框命名:将name="inphomegoals"改为name="inphomegoals[<?php echo $matchID; ?>]",这样每个输入框的name绑定对应的比赛ID,提交后可以通过数组索引拿到要更新的matchID
  3. 安全的SQL更新:使用PDO的预处理语句和参数绑定,彻底避免SQL注入风险,同时确保数据类型正确(用PDO::PARAM_INT指定整数类型)
  4. HTML标签修复:补全了所有未闭合的<input>和<td>标签,保证页面渲染正常
  5. 批量更新处理:遍历提交的比分数组,一次性处理所有比赛的更新请求

现在你可以直接运行修改后的代码,修改比分后点击“更新比分”按钮,数据库里的比赛数据就会正确更新啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:07:22