我的网页" mywebpage.php"是通过GET'来到达的。来自" someotherpage.php":
// In someotherpage.php -- go to mywebpage.php and display the form:
window.location = "mywebpage.php?someVariable=" + theVariable;
我在" mywebpage.php"如下:
THIS IS THE 'GET' HANDLER for the form IN "mywebpage.php":
if(isset($_GET['someVariable']))
{
// set up form variables to initial values, then display the form
}
当表单提交时,我会重新输入相同的" mywebpage.php"处理表单的POST:
THIS IS THE 'POST' HANDLER IN "mywebpage.php"
// okay the form was submitted, handle that here...
if(isset( $_POST['theformSubmitButton']))
{
// handle the form submit
}
问题是当用户提交表单时,仍然会调用GET处理程序,以便重新初始化表单。
原因是,当用户POST表单时,GET [' someVariable']仍然存在,因此重新输入GET处理程序,然后处理POST处理程序代码,但到那时GET处理程序重新初始化了混淆用户的表单,因为他们刚刚完成了从初始设置更改表单的值。
换句话说,当提交表单时,POST数组正在被正确填充,但是GET数组会因为旧的变量仍在那里而挂起,包括' someVariable'
所以我添加了一个未设置的'在GET处理程序中调用:
this is the MODIFIED 'GET' HANDLER in "mywebpage.php"
if(isset($_GET['someVariable']))
{
// set up form variables then display the form
// now clear out the 'someVariable' in the GET array so that
// when the user POST's the form, we don't re-enter here
unset($_GET['someVariable']));
}
这无法工作。发布表单时,我仍然看到上面的GET处理程序被调用。
我需要确保在提交表单时,不会重新调用GET处理程序 - 为什么没有" unset()"代码高于工作?
编辑:这是形式,而不是所有重要部分(我遗漏了很多输入,几个img标签,等等): <form enctype="multipart/form-data" action="#" style="display: inline-block"
method="post" name="myForm" id="myFormId">
<textarea name="InitialText" id="theText" rows="4" cols="68"
style="border: none; border-style: none"></textarea>
<br />
<label style="font-weight: bold; font-style: italic">For more info provide an email addres:</label>
<input type="text" id="emailField" name="emailFieldName" value="you@gmail.com" />
<input type="submit" id="theformSubmitButton" name="theformSubmitButton" value="Post Now">
</form>
答案 0 :(得分:3)
GET Request和$ _GET变量位于两个不同的层上。
当您的用户被定向到mywebpage.php时,会有通过get传递的数据。到目前为止还可以,但是数据仍在用户当前的URL中。您可以通过查看地址栏来查看。地址末尾会有?someParameter=someValue
。
取消设置功能仅适用于您的服务器,并且仅适用于您的脚本的一次性执行。它不会从用户浏览器中的URL中删除GET信息。
当您通过HTML表单提交数据时,您将用户重定向到相同的网址,其中包含GET数据,不仍在那里,但正在重新提交
尝试设置:
<form action="mywebpage.php" method="post">
这将为您的html表单设置一个自定义目标,从而删除GET信息。
答案 1 :(得分:0)
我会尽可能避免直接使用$_POST
或$_GET
。原因:您可以过滤/修改全局请求。简单示例:
$myPost = $_POST;
$myGET = $_GET;
unset($myGET["someVariable"]);
一般情况下:您为什么同时使用$_GET
和$_POST
?如果您要这样做,可以使用if
,if else
和else
来处理它。
答案 2 :(得分:0)
那是因为你取消了变量但是
window.location = "mywebpage.php?someVariable=" + theVariable;
是一样的。
我的猜测是,当变量未设置为具有以下内容时,您需要更改:
window.location = "mywebpage.php";