我有html页面,我已经在其中使用了一个表单和表单之外的其他链接.Form是由POST方法提交的,当我第一次提交表单时确定,当我点击链接时,它通过GET方法传递数据,当我再次提交表单然后发送GET和POST变量,即表单数据和链接数据两者。那是什么原因以及如何解决它。我的html页面在下面
<html>
<body>
<form method='post'>
<input type=input name='name'/>
<input type=submit name='submit' value='submit'/>
</form>
<a href='check_global.php?page_number=6'>Page Number</a>
</body>
</html>
答案 0 :(得分:2)
因为表单没有action属性,所以它只是重新加载页面。当你第一次提交它时一切都很好,但是当你点击链接后这样做时,由于链接的数据,网址是“脏的”,所以你有GET和POST值。
您可以检查POST属性是否已设置(if(isset($_POST['name']))
使用php),在这种情况下,它已使用表单提交
答案 1 :(得分:0)
当您第二次提交表单参数+页面的url参数时提交表单(请记住,您单击了相对URL的链接'check_global.php?page_number = 6')。
要验证上述内容,请尝试以下操作:
<?php
echo 'GET param ' . $_GET["page_number"];
echo 'POST param ' . $_POST["name"];
?>
如您所见,您可以在POST请求期间访问这两种类型的参数。
希望有所帮助。
答案 2 :(得分:0)
为了说明问题,OP并没有表明该表单应该提交到除当前页面之外的任何地方。所以只是对于funsies,这里有相同的基本思想,但有一个action属性值:
<form method="post" action="">
<input type="text" name="name"/>
<input type="submit" name="submit" value="submit"/>
</form>
<a href="?page_number=6">Page Number</a>
请注意,我已将其设置为无论出于何种原因,链接指向同一页面,表单也是如此。结果:
首次加载:表单提交请求POST数据到blah.php
第二次加载:链接跟随请求使用GET(感谢查询字符串)到blah.php?page_number=6
第三次加载:表单提交,使用空白操作指示当前页面在哪里发布,使用POST表单数据向blah.php?page_number=6
发出请求,从而同时拥有POST表单数据和GET URL数据。
因此,您可以选择将操作属性值设置为blah.php
,使其不包含查询字符串,或者如果您想避免使用各种方法来支持更模块化的形式(将其放在任何页面中,你知道它会发布到该地址),然后简单地让PHP后端检查是否设置了$_POST['submit']
,如果是,请像表单一样处理它而不是使用任何可能搞砸的$_GET
逻辑。
该链接永远不会将表单数据作为POST发送,并且POST数据不是GET数组的一部分,因此您知道当没有POST时,它只是获取,如果有POST,则表示提交,即使有一个GET数组。
或者只是使用单独的脚本,这样就不会混淆。