用户提交表单并从page_0.php转到page_1.php。然后浏览从page_1.php到page_2.php的链接。如果用户想要从浏览器中按“后退”按钮,如何防止来自浏览器的警告消息如“错误代码:ERR_CACHE_MISS”(确认表单提交?)并加载之前显示的相同数据按链接到page_2?
我尝试使用会话,但并不总是有效:
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>
用户到达page_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并仍然查看他在点击链接之前看到的相同信息,而且没有从浏览器收到任何消息?
答案 0 :(得分:1)
以表格的输入值回显会话变量。
图片的标题说明:
第1部分
<?php
session_start();
?>
<form action="page_1.php" method="post">
<input value="<?php echo $_SESSION['data']; ?>" name="id" />
<button type="submit">Submit</button>
</form>
如果这不是所需的结果,那么只需在同一页面上使用会话变量。
I.e。:
$data = $_SESSION['data'];
echo $data;
并将您当前的输入保持为<input value="854" name="id" />
第2部分
<?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>
修改强>
第2页看起来像这样,将$_SESSION['data']
分配给$_GET['id']
:
<?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;
?>
答案 1 :(得分:0)
您应始终从处理表单提交的页面重定向服务器端,因此无法从后退按钮返回到该页面。这是为了防止在后退按钮上意外双重提交的可能性,以及像你注意到的那样的丑陋错误。
(只是为了澄清。这样做会使历史记录跳过处理提交的页面,因此从page_2返回将直接返回到表单,而不是处理页面。)
因此,请从
更改page_1.php的结尾?>
<a href="page_2.php">Go to page 2</a>
要:
header('Location: page_2.php');
exit;
此外,要使其正常工作,您可能必须确保在致电header()
之前不要打印任何内容。我不记得在PHP中是否有必要,但它是在某些语言中(例如Java / JSP)。