PHP中表单提交时向自身传递ID失败问题求助
你的问题出在表单提交的逻辑冲突上——你给提交按钮加了onclick跳转,这会优先于表单的POST提交,导致实际发起的是GET请求,而你的PHP代码却在判断$_POST['submit'],自然不会执行输出部分。
具体问题拆解:
- 点击按钮时,
onclick里的location.href会让浏览器直接跳转到带GET参数的URL,表单的POST提交被完全中断了,所以PHP里的$_POST['submit']永远不会等于'winners'。 - 你试图通过URL跳转传参,但这不是表单提交的正确方式,既不符合规范也容易引发逻辑混乱。
解决方案一:用表单隐藏字段传递数据(推荐,符合标准规范)
修正后的代码会让表单正常POST提交,同时通过隐藏字段传递所需参数:
<?php // 现在判断POST的submit,从POST中获取参数 if ($_POST['submit'] == 'winners') { $a = $_POST['A']; echo $a; $point = $_POST['POIN']; echo $point; } ?> <form method="post" style="width:auto;"> <div class="box"> <span class='odometer' id="timespan" name="timespan">232</span> <!-- 添加隐藏字段来传递固定值A和动态值POIN --> <input type="hidden" name="A" value="1"> <input type="hidden" name="POIN" id="poin-input"> </div> <input class="process" name="submit" type="submit" id="submit" value="winners"> </form> <script> // 提交表单前,把timespan的内容同步到隐藏字段 document.getElementById('submit').addEventListener('click', function() { document.getElementById('poin-input').value = document.getElementById('timespan').innerHTML; }); </script>
说明:
- 移除了
onclick跳转,让表单按默认逻辑POST提交 - 用隐藏字段
A传递固定值1,用JS动态把timespan的内容同步到隐藏字段POIN - PHP从
$_POST中读取参数,点击提交后就能正确输出1232了
解决方案二:保留跳转逻辑(不推荐,但按需使用)
如果你一定要用location.href跳转的方式,需要调整按钮类型和PHP判断逻辑:
<?php // 改成判断GET参数是否存在,因为跳转是GET请求 if (isset($_GET['A']) && isset($_GET['POIN'])) { $a = $_GET['A']; echo $a; $point = $_GET['POIN']; echo $point; } ?> <form style="width:auto;"> <div class="box"> <span class='odometer' id="timespan" name="timespan">232</span> </div> <!-- 把按钮类型改成button,避免触发表单默认提交 --> <input class="process" type="button" id="submit" value="winners" onclick="location.href='reward-pollingx.php?A=1&POIN='+document.getElementById('timespan').innerHTML"> </form>
说明:
- 按钮类型改为
button,防止表单默认的GET/POST提交干扰跳转逻辑 - PHP判断GET参数是否存在,跳转后就能输出对应的值
总结
优先选择方案一,因为表单提交应该遵循HTTP标准方法,用隐藏字段传递数据更安全、规范,也能避免跳转和表单提交的冲突。
内容的提问来源于stack exchange,提问作者Beny Bond Banjarnahor
相关产品推荐
相关产品推荐

