PHP中$_SERVER['REQUEST_METHOD']提交后未转为POST如何解决
表单提交请求方法始终为GET的修复方案
你遇到的问题是PHP表单配置了POST提交但实际触发GET请求,属于Web开发中非常常见的重定向或表单配置类问题,可按以下步骤逐一排查修复:
第一步排查服务器重定向问题
这是90%以上同类问题的诱因:当服务器配置了301/302重定向规则(比如HTTP强制跳转HTTPS、URL自动补全尾斜杠、不带后缀的路径自动补全.php后缀等)时,POST请求在跳转后会自动转为GET请求,同时丢失所有请求体数据。
排查方法:打开浏览器开发者工具的「网络」面板,勾选「保留日志」选项后点击提交按钮,查看第一条请求的状态码,如果为301/302即可确认是该问题。
修复方法:- 给form标签的
action属性填写完整的当前页面路径,不要留空,比如当前页面是update.php就写成:
<form method="POST" enctype="multipart/form-data" action="update.php">- 调整服务器重定向规则:如果是Apache的
.htaccess文件、或Nginx的rewrite配置,新增规则跳过POST请求的强制跳转即可。
- 给form标签的
第二步修正表单基础配置
部分老旧浏览器对没有明确属性的表单元素会触发默认行为,可补全两个配置:- 给提交按钮明确加上
type="submit"属性,避免被识别为普通按钮触发默认GET提交:
<button class="btn btn-success" type="submit">Submit</button>- 检查页面是否存在嵌套表单、或者其他JavaScript代码拦截了表单提交事件强行发送GET请求。
- 给提交按钮明确加上
第三步排查代码逻辑异常
你当前贴出的代码中有三个函数没有给出实现:validateUser、putJson、uploadImage,需要确认:- 三个函数都正常定义、没有语法错误,不会触发PHP报错导致请求异常跳转
- 确认
users/part.json文件存在且有读写权限,你写死的$userId = 2对应用户数据存在,不会触发404页面跳转 - 提交逻辑执行完成前没有提前输出内容,避免
header("Location: index.php")跳转失效。
内容的提问来源于stack exchange,提问作者yalshin zhang
相关产品推荐
相关产品推荐

