如何实现表单更新数据库?数据回显正常但更新功能待实现
解决数据库表单更新的问题
嘿,我看了你的代码,现在更新功能没工作主要是几个小问题导致的,咱们一个个解决,保证你的表单能正确更新数据库里的比赛比分:
现有代码的核心问题
- 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); ?>
关键修改说明
- 表单提交方法:把
method="put"改成method="post",PHP能正常处理POST请求 - 输入框命名:将
name="inphomegoals"改为name="inphomegoals[<?php echo $matchID; ?>]",这样每个输入框的name绑定对应的比赛ID,提交后可以通过数组索引拿到要更新的matchID - 安全的SQL更新:使用PDO的预处理语句和参数绑定,彻底避免SQL注入风险,同时确保数据类型正确(用
PDO::PARAM_INT指定整数类型) - HTML标签修复:补全了所有未闭合的
<input>和<td>标签,保证页面渲染正常 - 批量更新处理:遍历提交的比分数组,一次性处理所有比赛的更新请求
现在你可以直接运行修改后的代码,修改比分后点击“更新比分”按钮,数据库里的比赛数据就会正确更新啦!
内容的提问来源于stack exchange,提问作者user9805028
相关产品推荐
相关产品推荐

