PHP好友请求系统点击提交按钮无法传递正确数据如何解决
问题原因
- 你在while循环中反复给全局的
$_SESSION["fid"]赋值,每次循环都会覆盖上一次的结果,最终SESSION里只会保留最后一条好友请求的发起人信息 - 你输出form标签后没有写对应的
</form>闭合标签,浏览器会默认把所有循环输出的下拉框、按钮都归到同一个表单下,提交时自然只会传递最后一组表单的数值 - 单个表单内没有携带当前好友请求的唯一标识,后端接收时无法区分是哪条请求的提交
修复方案
- 删除循环内的
$_SESSION["fid"] = $row["friend_request_name"];这行代码,不要用SESSION存储单条请求的标识 - 每个表单内增加隐藏input字段,传递当前好友请求的发起人信息/请求唯一ID
- 每个表单输出完成后补充
</form>闭合标签,保证各条请求的表单相互独立 - 移除重复的id属性,或给id增加动态后缀避免id重复冲突
修改后的代码如下:
echo '<div class="container-fluid">'; echo '<div class="container-sm posts shadow p-3 mb-5 bg-white rounded">'; echo '<div class="container title"><h3>'; echo $current_user; echo '</h3></div>'; echo '<div class="container content">'; if ($result = $conn->query($query)) { while ($row = $result->fetch_assoc()) { if( $current_user == $row["currentUser"] && $row["current_request"] == 1){ echo '<form action = "include/approve_friend_request.php" method = "POST">'; // 增加隐藏域传递当前请求的发起人信息 echo '<input type="hidden" name="friend_request_name" value="'.$row["friend_request_name"].'">'; echo $row["friend_request_name"]; echo '<select class="form-select" aria-label="Default select example" name="friend_reqest_level">'; echo '<option value="1">friends</option>'; echo '<option value="2">best friends</option>'; echo '</select>'; echo '<button type="submit" name = "submit" class="btn btn-dark">Submit</button> '; echo '<br>'; // 闭合表单,保证各表单独立 echo '</form>'; } } } echo '<br>'; echo '<br>'; echo '</div>'; echo '<div class="container footer"><p class="footer">.</p></div>'; echo '</div>'; echo '</div>';
后端处理脚本approve_friend_request.php中直接通过$_POST['friend_request_name']和$_POST['friend_reqest_level']就能拿到对应请求的发起人信息和选择的好友等级,不需要再读取SESSION。
内容的提问来源于stack exchange,提问作者Michael Niebauer
相关产品推荐
相关产品推荐

