PHP展示SQL表记录时,如何获取按钮对应行的记录值?
解决按钮点击无法获取对应行记录值的问题
你的核心问题是没有给每个按钮绑定对应行的ApplicationID,而且原代码里还有HTML标签错误,导致无法区分点击的是哪条记录。下面给你两种简单可行的解决方法:
方法一:通过GET参数直接传递ID(最便捷)
直接在按钮的跳转链接里带上当前行的ApplicationID,这样处理页面就能拿到对应的ID。同时修正原代码里的HTML标签错误(<a>标签不能用</button>闭合):
<tbody> <?php while($row = mysqli_fetch_assoc($applicationResult)){ ?> <tr> <td><?php echo $row['FirstName'] ?></td> <td><?php echo $row['LastName'] ?></td> <td><?php echo $row['UserName'] ?></td> <td><?php echo $row['Email'] ?></td> <td><?php echo $row['ApplicationID'];?></td> <td> <!-- 给href加上?id=传递ApplicationID --> <a href="acceptApplication.php?id=<?php echo $row['ApplicationID']; ?>" class="btn btn-sm round btn-outline-success">Accept</a> <a href="rejectApplication.php?id=<?php echo $row['ApplicationID']; ?>" class="btn btn-sm round btn-outline-danger">Reject</a> </td> </tr> <?php } ?> </tbody>
在acceptApplication.php或rejectApplication.php里,直接通过$_GET['id']获取对应记录的ID:
// 先判断参数是否存在,避免报错 if(isset($_GET['id'])){ $applicationId = $_GET['id']; // 这里写你的处理逻辑,比如更新数据库状态等 // 注意:一定要做安全验证,比如用mysqli_real_escape_string转义,或者用预处理语句防止SQL注入 }
方法二:用表单POST传递ID(更安全,适合敏感操作)
如果不想把ID暴露在URL里,可以用表单+隐藏域的方式传递,每行单独一个表单:
<tbody> <?php while($row = mysqli_fetch_assoc($applicationResult)){ ?> <tr> <td><?php echo $row['FirstName'] ?></td> <td><?php echo $row['LastName'] ?></td> <td><?php echo $row['UserName'] ?></td> <td><?php echo $row['Email'] ?></td> <td><?php echo $row['ApplicationID'];?></td> <td> <!-- Accept按钮的表单 --> <form action="acceptApplication.php" method="POST" style="display:inline;"> <input type="hidden" name="applicationId" value="<?php echo $row['ApplicationID']; ?>"> <button type="submit" class="btn btn-sm round btn-outline-success">Accept</button> </form> <!-- Reject按钮的表单 --> <form action="rejectApplication.php" method="POST" style="display:inline;"> <input type="hidden" name="applicationId" value="<?php echo $row['ApplicationID']; ?>"> <button type="submit" class="btn btn-sm round btn-outline-danger">Reject</button> </form> </td> </tr> <?php } ?> </tbody>
在处理页面里通过$_POST['applicationId']获取ID:
if(isset($_POST['applicationId'])){ $applicationId = $_POST['applicationId']; // 处理逻辑,同样要注意安全验证 }
额外注意事项
- 原代码里的
array_push和$_SESSION['applicants']完全没必要,因为这种方式存的是所有ID,根本没法区分点击的是哪一行,直接删掉就行。 - 无论用哪种方法,都要对获取到的
ApplicationID做合法性验证,比如检查是否为数字,或者用预处理语句执行数据库操作,防止SQL注入攻击。
内容的提问来源于stack exchange,提问作者Potato
相关产品推荐
相关产品推荐

