HTML按钮formaction无法传递GET参数问题求助
问题原因与解决办法
你的问题出在表单的默认提交行为上:form标签默认使用GET方法提交,当点击submit类型的按钮时,浏览器会收集表单内的所有输入字段数据,生成新的查询字符串(query string),并覆盖掉formaction URL里原有的查询参数。因为你的表单里没有任何输入字段,所以最终跳转的URL就只剩下edit.php,原本的?claim_id=xxx被清空了。
下面给你几种实用的解决方式:
方式1:用普通按钮+JavaScript跳转(最简单,适合纯跳转场景)
把按钮类型改成button,通过点击事件直接触发页面跳转,完全绕开表单提交的规则,参数会完整保留在URL里:
<h1 class="headerWithButton">Claim #<?echo($_GET['claim_id'])?> <form> <button type="submit" formaction="index.php" class="backButton">Back</button> <button type="button" onclick="window.location.href='edit.php?claim_id=<?echo($_GET['claim_id'])?>'" class="editButton">Edit</button> </form> </h1>
方式2:在表单中添加隐藏输入字段(保留表单提交逻辑)
在form标签内添加一个hidden类型的input,把claim_id存进去。这样点击submit按钮时,浏览器会自动把这个参数加到URL里,不会覆盖formaction的地址:
<h1 class="headerWithButton">Claim #<?echo($_GET['claim_id'])?> <form> <input type="hidden" name="claim_id" value="<?echo($_GET['claim_id'])?>"> <button type="submit" formaction="index.php" class="backButton">Back</button> <button type="submit" formaction="edit.php" class="editButton">Edit</button> </form> </h1>
补充说明
如果不需要在URL里显示参数,也可以把form的method设为POST,这样参数会放在请求体里,后端通过$_POST['claim_id']就能获取,但URL里不会显示这个参数。不过看你的需求是要在URL里带参数,所以前两种方式更合适。
内容的提问来源于stack exchange,提问作者WestCarey
相关产品推荐
相关产品推荐

