Php 如何返回已加载提交表单的页面?

Php 如何返回已加载提交表单的页面?,php,session-variables,Php,Session Variables,用户提交表单并从页面0.php转到页面1.php。然后通过从page_1.php到page_2.php的链接。如果用户要从浏览器中按“后退”按钮,如何防止浏览器发出类似错误代码的警告消息:ERR\u CACHE\u MISS confirm form submit?并加载按链接至第2页之前显示的相同数据 我尝试使用session,但并不总是有效: page_0.php:用户选择一个选项: <!-- this is page_0.php --> <form action="pag

用户提交表单并从页面0.php转到页面1.php。然后通过从page_1.php到page_2.php的链接。如果用户要从浏览器中按“后退”按钮,如何防止浏览器发出类似错误代码的警告消息:ERR\u CACHE\u MISS confirm form submit?并加载按链接至第2页之前显示的相同数据

我尝试使用session,但并不总是有效:

page_0.php:用户选择一个选项:

<!-- this is page_0.php -->
<form action="page_1.php" method="post">
  <select name="id">
      <option value="1">Car</option>
      <option value="2">Bike</option>
      <option value="3">Skate</option>
      <option value="4">Plane</option>
  </select>
  <button type="submit">Submit</button>
</form>
page_1.php:提交位于page_0.php上的表单后,用户到达page_1.php

<?php
session_start();
//this is page_1.php
if(isset($_POST['id']))
{ 
   $product_id = $_POST['id'];
   $_SESSION['data'] = $_POST['id']; 
}
else
{
   $product_id = $_SESSION['data'];
}

$result = mysqli_query($con, "SELECT id_product_name, product_name FROM products WHERE id='$product_id'");
$row = mysqli_fetch_assoc($result);
while ($row=mysqli_fetch_array($result))
   {?>
   <a href="page_2.php?id=<?php echo $row['id_product_name']?>">Go to product detail</a>
   <?php
   }
?>
现在,用户单击其中一个链接以查看产品的详细信息。假设单击id=3的链接:

<a href="page_2.php?id=3">Go to product detail</a> 
用户到达页面_2.php

<?php
//this is page_2.php
$product_id = $_GET['id'];
echo 'Hello here you can find details of product'.$product_id;
?>
现在,用户按下浏览器上的“后退”按钮


我的问题是:用户如何返回到page_1.php,仍然可以查看他在单击链接之前看到的相同信息,同时也不会从浏览器收到任何消息?

您应该始终从处理表单提交的页面重定向服务器端,因此,不可能从“后退”按钮返回到它。这是为了防止在“后退”按钮上意外重复提交的可能性,以及您注意到的丑陋错误

我只是想澄清一下。这样做的目的是使历史跳过处理提交的页面,因此从第2页回击将直接返回表单,而不是处理页面

因此,将页面_1.php的结尾从

?>
<a href="page_2.php">Go to page 2</a> 

此外,要使其工作,您可能必须确保在调用header之前不打印任何内容。我不记得这在PHP中是否有必要,但它在一些语言中,例如Java/JSP。

在表单的输入值中回显会话变量

旁注:

不清楚哪个页码对应什么,所以我会让你自行决定 确保在任何页面之前都没有输出。 第一部分

并将您当前的输入作为

第二部分


但我希望用户能够回到它!你想让他们回到表格上,对吗?而不是处理提交的页面。这就是它的作用。我希望用户能够返回到页面_1.php,包含最初提交的所有信息。想象一下,第1页显示一个产品列表,每个产品都有一个指向另一页的链接,以获取更多详细信息。用户输入以查看产品的更多详细信息,然后想返回产品列表。@Pablo请参阅下面我的答案。返回初始表单后,值将重新出现在输入中,这是我从上面的评论中收集到的。仍然不起作用。我在page_1.php上使用了session变量,当我转到page_2.php,然后尝试返回page_1时,我会收到浏览器消息。注意:表单位于第0.php页。@Pablo我需要你显示完整的代码,包括页码。你展示了你的表格和第1页,第0页在图片中的什么位置?这就是你没有给我们看的代码。另外,请确保您也在其中启动了会话。@Pablo重新加载我的答案并查看“编辑:抱歉,当我在第2页“确认表单重新提交”中按“后退”按钮时,浏览器仍会显示一条消息
header('Location: page_2.php');
exit;
<?php
session_start();
?>

<form action="page_1.php" method="post">
  <input value="<?php echo $_SESSION['data']; ?>" name="id" />
  <button type="submit">Submit</button>
</form>
$data = $_SESSION['data'];
echo $data;
<?php
session_start();
if(isset($_POST['id']))
{ 
   $product_id = $_POST['id'];
   $_SESSION['data'] = $_POST['id']; 
}
else
{
   $product_id = $_SESSION['data'];

    $result = mysqli_query($con, "SELECT product_name FROM products WHERE id='$product_id'");
    $row = mysqli_fetch_assoc($result);
    echo $row['product_name'];

}

?>
<a href="page_2.php">Go to page 2</a>
<?php
//this is page_2.php

session_start();

$_GET['id'] = $_SESSION['data'];
$product_id = $_GET['id'];
echo 'Hello here you can find details of product: '.$product_id;
?>