PHP表单复选框选中记录如何获取对应关联的recordid与addressid
问题根源
未勾选的复选框不会随表单提交,但所有addressid隐藏域无论是否勾选对应行都会全部提交,导致两个数组的下标无法对应,最终匹配错误。
解决方案
修改前端表单字段的命名规则,将addressid的数组索引和对应行的recordid绑定,确保提交后两个数据的关联关系不会错乱。
1. 修改复选框页代码
<tbody> <?php $sql_select = mysqli_query($conn, "SELECT * FROM tblapprovedrenewal WHERE renewalstatus = 0 AND status = 1 ORDER BY subscriptionexpiry, inserttimestamp"); if(mysqli_num_rows($sql_select) > 0){ while ($result = mysqli_fetch_assoc($sql_select)){ $current_recordid = $result['recordid']; // 提前取出当前行recordid作为索引 ?> <tr> <td><input type="checkbox" class="checkitem" name="recordid[<?php echo $current_recordid; ?>]" value="1"></td> <input type="hidden" name="addressid[<?php echo $current_recordid; ?>]" value="<?php echo $result['addressid']; ?>"> <td><?php echo $result['name']; ?></td> <td><?php echo $result['address']; ?></td> <td><?php echo $result['subscriptionexpiry']; ?></td> <td><?php echo $result['inserttimestamp']; ?></td> </tr> <?php } } ?> </tbody>
2. 修改接收数据页代码
<?php if(isset($_POST['disapprove'])){ if(!empty($_POST['recordid'])){ // 直接遍历recordid的键,键就是选中的recordid值 foreach($_POST['recordid'] as $recordid => $checked) { echo $recordid. ': '. $_POST['addressid'][$recordid].'</br>'; } } } ?>
修改后即可保证选中的recordid和对应的addressid完全匹配。
内容的提问来源于stack exchange,提问作者sansam
相关产品推荐
相关产品推荐

