提交带有" POST"的表单后刷新时要求重新发送信息的方法

时间:2017-09-09 20:12:26

标签: javascript php html

表单已提交。但在此之后,当我刷新它时,firefox会显示此消息"要显示此页面,Firefox必须发送信息,这些信息将重复之前执行的任何操作(例如搜索或订单确认)。"并给出两个选项"重新发送"或"取消"。

使用" GET"表格不会发生这种情况。方法

我的form.php代码如下。

<html>
<body>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="image">
<input type="submit" value="Submit">
</form>
</body>
</html>

我想这个解决方案在于&#34; POST后重定向&#34; (php)或form.reset()...(javascript)或HTML

我已经阅读了很多文章但我无法实现它,因为有很多理论可用,但没有工作实例。 我希望你们和这个网站可以帮助我。如果我获得成功,这对我来说将是最大的成就。谢谢!!

7 个答案:

答案 0 :(得分:1)

是的,这是正常的。一种常见的做法是在使用php header()函数进行表单处理后让页面重定向到自身:

header("Location: http://www.example.com/");

答案 1 :(得分:1)

这是正常的浏览器行为。如果您不想这样,只需在处理POST数据后将用户重定向到页面。

您可以通过以下代码执行此操作:

header('Location: redirectpage.php');

请注意,这可能与您刚刚来的页面完全相同,但在重定向后,POST容器将为空,因此您的浏览器不会提示您重新发送数据。

答案 2 :(得分:0)

您必须执行以下操作: def __call__(self, inputs,state): #c is not a output. c somehow is a "memory keeper". #Necessary to update and pass new_c through LSTM c,h=state #...Calculate your z #...inputs will be each tokens in context(passage) respectively #...Calculate alpha_Q z=tf.concat([inputs,alpha_Q],axis=1) ########This part is reimplement of Basic_LSTM with vs.variable_scope("LSTM_core"): sigmoid=math_ops.sigmoid concat=_linear([z,h],dimension*4,bias=True) i,j,f,o=array_ops.split(concat,num_or_size_splits=4,axis=1) new_c=(c*sigmoid(f+self._forget_bias)+sigmoid(i)*self._activation(j)) new_h = self._activation(new_c) * sigmoid(o) new_state=(new_c,new_h) return new_h,new_state 或者如果您已发送标题,则可以执行以下操作:

header("Location: http://www.example.com/");

或试试这个:

//Complete response of sending form
<?php
echo "<meta http-equiv=\"refresh\" content=\"0; url=http://example.com/\"   />\n";
?>

或者执行以下操作:

<script>
location.href = "youroriginalpage.php";
</script>

答案 3 :(得分:0)

  

在我刷新它时,提交带有“POST”方法的表单要求重新发送信息

这是正确的行为。

  

我想这个解决方案在于“POST后重定向”(php)或form.reset()......(javascript)或HTML

您必须按照POST-Redirect-GET (PRG) pattern设计应用程序。基本上,您需要从POST表单接收数据的PHP脚本。该脚本必须使用GET请求将浏览器重定向到相同或另一个脚本。因为使用GET检索最后一个脚本,所以如果刷新页面,则不会收到消息,也不会再次提交数据。

// For an script that shows the form and receives the data

// detect if it is received by POST
if (count($_POST)) {

  // process the file using a function 
  process_upload($_FILES["image"]);

  // redirect the browser to the same page
  header("Location: ".$_SERVER['PHP_SELF']);
  exit();
}
<html>
<body>
  <form action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="image">
    <input type="submit" value="Submit">
  </form>
</body>
</html>

对于其他示例,您可以查看:

答案 4 :(得分:0)

试试这个:

<?php
if( $_POST )
{
   if( empty($_POST['file']) )
     {
       // echo error or do nothing;
       die("Select a file to upload");
     }
}
?>
<html>
<body>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="image">
<input type="submit" value="Submit">
</form>
</body>
</html

希望这有帮助!

答案 5 :(得分:0)

这是一种正常的浏览器行为。为了避免这种情况,请打印出重定向代码,例如:

<script>
location.href = "youroriginalpage.php";
</script>

您需要将表单提交到除表单之外的页面,这在我看来也是一种更好的方法。

另一种方法也是发送一个AJAX请求,这将使用户保持在同一页面上。

答案 6 :(得分:0)

PRG pattern可以这样改写:

  • 永不显示响应POST的页面
  • 始终使用GET
  • 加载页面
  • 使用REDIRECT
  • 从POST导航到GET