如何实现点击MySQL数据行后进入表单编辑该行数据
实现MySQL表格行点击跳转至编辑表单的方案
你现在已经通过行点击传递了id参数,接下来只需要分几步就能完成编辑功能,我给你拆解成具体的实现步骤:
1. 接收URL中的ID参数并查询对应数据
在页面开头(表格代码之前),先判断是否有id参数传入,如果有就查询该ID对应的完整数据,准备填充到表单里:
<?php $link = mysqli_connect("127.0.0.1", "root", "", "database"); // 处理编辑模式的ID参数 $editId = isset($_GET['id']) ? intval($_GET['id']) : 0; $editData = []; if ($editId > 0) { // 查询对应ID的数据,用预处理语句防止SQL注入 $stmt = mysqli_prepare($link, "SELECT id, a, b FROM person WHERE id = ?"); mysqli_stmt_bind_param($stmt, "i", $editId); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $editData = mysqli_fetch_assoc($result); } ?>
2. 渲染编辑表单(如果有编辑ID的话)
在表格上方或者合适的位置,当存在editId时显示编辑表单,把查询到的数据回显到输入框中:
<?php if ($editId > 0 && !empty($editData)): ?> <h3>编辑数据</h3> <form method="post" action=""> <input type="hidden" name="id" value="<?php echo $editData['id']; ?>"> <div> <label for="a">字段A:</label> <input type="text" id="a" name="a" value="<?php echo htmlspecialchars($editData['a']); ?>" required> </div> <div> <label for="b">字段B:</label> <input type="text" id="b" name="b" value="<?php echo htmlspecialchars($editData['b']); ?>" required> </div> <button type="submit" name="update">保存修改</button> <a href="?">返回列表</a> </form> <?php endif; ?>
3. 处理表单提交的更新请求
在页面最开头(连接数据库之后),添加处理更新的逻辑,当表单提交时执行数据库更新:
<?php // 处理更新提交 if (isset($_POST['update']) && isset($_POST['id'])) { $updateId = intval($_POST['id']); $a = mysqli_real_escape_string($link, $_POST['a']); $b = mysqli_real_escape_string($link, $_POST['b']); $stmt = mysqli_prepare($link, "UPDATE person SET a = ?, b = ? WHERE id = ?"); mysqli_stmt_bind_param($stmt, "ssi", $a, $b, $updateId); if (mysqli_stmt_execute($stmt)) { // 更新成功后跳回列表页 header("Location: ?"); exit; } else { echo "<p>更新失败:" . mysqli_error($link) . "</p>"; } } ?>
4. 保留原有的数据列表表格
把你原来的表格代码放在后面就行,注意把原来的$row[id]改成$row['id'](加上引号更规范):
<?php // 显示数据列表 echo "<table border='1'>"; echo "<tr> <td>id</td> <td>a</td> <td>b</td> </tr>"; $sql = "select id,a,b from person"; $result = mysqli_query($link, $sql) or die("Error : $sql"); while($row = mysqli_fetch_assoc($result)){ echo "<tr onclick=\"location='?id={$row['id']}'\"> <td>{$row['id']}</td> <td>{$row['a']}</td> <td>{$row['b']}</td> </tr>"; } echo "</table>"; ?>
几个重要的小提醒
- 我在代码里用了预处理语句,这是为了防止SQL注入,比直接拼接字符串安全很多,一定要养成这个习惯
- 用
htmlspecialchars()转义输出的内容,避免XSS攻击 - 如果希望把编辑功能放到单独的页面(比如
edit.php),只需要把跳转地址改成location='edit.php?id={$row['id']}',然后在edit.php里实现上述的接收ID、查询数据、表单渲染和更新逻辑即可
内容的提问来源于stack exchange,提问作者Bożena Czupryn
相关产品推荐
相关产品推荐

