unset($ _ GET ['someVariable'])无效

时间:2013-09-08 19:39:46

标签: php javascript forms

我的网页" 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> 

3 个答案:

答案 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?如果您要这样做,可以使用ifif elseelse来处理它。

答案 2 :(得分:0)

那是因为你取消了变量但是

window.location = "mywebpage.php?someVariable=" + theVariable;

是一样的。

我的猜测是,当变量未设置为具有以下内容时,您需要更改:

window.location = "mywebpage.php";