Php 单击“上一步”按钮而不是“$\u POST”值时读取会话
我有3页,使用Php 单击“上一步”按钮而不是“$\u POST”值时读取会话,php,session,post,Php,Session,Post,我有3页,使用$\u POST方法传递值。不使用$\u GET方法的原因是我不希望用户转到url并更改值,并且能够传递值。从t2和t3页面开始: t2和t3将检查是否(设置($\u POST))然后保存到会话 当t3.php用户单击“上一步”按钮时,t3不会传递$\u POST数据和读取会话 当将数据从t1传递到t2和t2传递到t3时,它可以工作,但当单击从t3到t2的后退按钮时,浏览器显示“确认表单重新提交”。当用户点击后退按钮时,如何使页面读取会话数据而不是$\u POST值 t1.php
$\u POST
方法传递值。不使用$\u GET
方法的原因是我不希望用户转到url并更改值,并且能够传递值。从t2和t3页面开始:
是否(设置($\u POST))
然后保存到会话$\u POST
数据和读取会话$\u POST
值
t1.php
<html>
<body>
<form id="b">
value1: <input type="text" name="value1" id="value1">
value2: <input type="text" name="value2" id="value2">
<input type="button" onclick ="test()" value="test">
</form>
</body>
</html>
<script type="text/javascript">
function test(){
document.getElementById("b").method = "post";
document.getElementById("b").action = "t2.php";
document.getElementById("value1").value = "asd";
document.getElementById("value2").value = "zxc";
document.getElementById('b').submit();
}
</script>
价值1:
价值2:
功能测试(){
document.getElementById(“b”).method=“post”;
document.getElementById(“b”).action=“t2.php”;
document.getElementById(“value1”).value=“asd”;
document.getElementById(“value2”).value=“zxc”;
document.getElementById('b').submit();
}
t2.php
<?php
session_start();
if(isset($_POST)){
unset($_SESSION['t2']);
$_SESSION['t2']=$_POST;
}else if(isset($_SESSION['t2'])){
}else{
header("Location: http://localhost/my_project/t1.php");
}
?>
<html>
<body>
value1<?php echo $_SESSION['t2']["value1"]; ?>!<br>
value2 <?php echo $_SESSION['t2']["value2"]; ?>.
<form id="b">
value1: <input type="text" name="value1" id="value1">
value2: <input type="text" name="value2" id="value12">
<input type="button" onclick ="test()" value="test">
</form>
</body>
</html>
<script type="text/javascript">
function test(){
document.getElementById("b").method = "post";
document.getElementById("b").action = "t3.php";
document.getElementById("value1").value = "qwe";
document.getElementById("value2").value = "rty";
document.getElementById('b').submit();
}
</script>
价值1
价值2。
价值1:
价值2:
功能测试(){
document.getElementById(“b”).method=“post”;
document.getElementById(“b”).action=“t3.php”;
document.getElementById(“value1”).value=“qwe”;
document.getElementById(“value2”).value=“rty”;
document.getElementById('b').submit();
}
t3.php
<?php
session_start();
if(isset($_POST)){
unset($_SESSION['t3']);
$_SESSION['t3']=$_POST;
}else if(isset($_SESSION['t3'])){
}else{
header("Location: http://localhost/my_project/t1.php");
}
?>
<html>
<body>
value1<?php echo $_SESSION['t3']["value1"]; ?>!<br>
value2 <?php echo $_SESSION['t3']["value2"]; ?>.
</body>
</html>
价值1
价值2。
如果您点击浏览器中的“后退”按钮,您的浏览器将尝试重新创建第一次调用该页面时出现的情况/状态
这意味着,您要执行以下操作
1) t1-->t22) t2-->t3
3) 点击浏览器中的“后退”按钮 现在,您的浏览器尝试重新创建情况1)以显示第t2页,并希望重新发布您第一次调用t2时发送的数据 解决这一问题的一种方法是始终从会话中加载现有数据,并通过ajax发布表单,以将下一页的请求与数据发送分离。如果仅当您从浏览器角度执行该功能(例如,单击绑定到该功能的提交按钮)时才发送数据,则无需调用页面 如果您按照这种方式操作,您的页面也会加载存储在会话中的数据(这是最新的数据)。只有通过ajax提交数据,会话数据才会更新 此问题的多个答案解释了一些选项: 我想添加一些代码片段(jQuery/AJAX-未测试)。它是这样工作的:
- 单击submit按钮,将表单数据发送到t2.php李>
- 在t2.php中,检查表单数据是否已发送。如果是,请进行处理李>
- 处理调用并发送响应后,第一个调用完成,而不加载实际页面李>
- 然后(此处为“success:…”)将t2.php加载到浏览器中,而不发送表单数据。最后一部分是浏览器打开t2.php时执行的操作,以及单击后退按钮时执行的操作
// You can also reference the jQuery library differently than this:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js">
// Will bind the function, once the page is loaded
$(document).ready(funtion(){
// Gets a reference to your form
var $form = $('#yourFormId');
// Gets the target URL of your form
var formURL = form.attr("action");
// Will be execured when you click the submit button
$form.submit(funtion(e){
// Does stop the form from submitting data itself
e.preventDefault();
// Call to send data
$.ajax({
type: "POST",
url: formURL,
data: $(this).serialize(),
cache: false,
success: function() { window.location.href = formURL; }
});
});
});
</script>
//您也可以以不同的方式引用jQuery库:
//加载页面后,将绑定函数
$(文档).ready(函数(){
//获取对窗体的引用
var$form=$(“#yourFormId”);
//获取表单的目标URL
var formURL=form.attr(“操作”);
//将在单击“提交”按钮时执行
$form.submit(功能(e){
//是否阻止表单本身提交数据
e、 预防默认值();
//呼叫发送数据
$.ajax({
类型:“POST”,
url:formURL,
数据:$(this).serialize(),
cache:false,
成功:函数(){window.location.href=formURL;}
});
});
});
如果在按下导航器返回按钮时丢失数据,导致页面未加载,则只需添加此会话缓存限制器(“私有”否“过期”)代码>在会话_start()之前代码>这将保持页面加载不变,即使您按下“后退”按钮,并且作为另一种方式,您可以使用get方法和not post来传递参数,因为第一种方法session_cache_limiter('private_no_expire')代码>将产生一些问题
祝您度过愉快的一天在发布数据之前检查会话数据?您可以在t3.php上设置会话变量,然后检查t2.php上是否存在该变量。如果是这样,用户点击后退按钮,这样您就可以阅读会话了。如果在使用post数据之前不能直接从会话中读取数据,这是一个选项。@Epodax,是的,因为如果用户键入从t1到t2的新数据,会话应该存储最新的数据value@CharlotteDunois,我已经将值保存在$_SESSION['t2']中,当第t1页到第t2页时,为什么还要再次存储变量?当用户单击后退按钮时,t2页面未读取会话,不确定是否我的代码错误我已尝试更改顺序,首先检查会话,如果(isset($_会话['t2']){}否则如果(isset($_POST)){未设置($_会话['t2']);$_会话['t2']=$_POST;}否则{头(“位置:)}如果我理解正确,上面的代码会检查会话变量t2中是否已经存储了信息。如果已经存储了信息,则不会对其进行更新,对吗?如果是这种情况,那么一旦设置了t2,您将永远无法更新它。我想的是,首先通过ajax发送数据来更新会话数据,而无需加载新页面。之后ajax调用已成功处理,您无需发送数据即可加载新页面。是的,根据上面的评论,一旦会话获得数据,它将无法更新新记录。但是,即使我在t2中以这种方式编写,当我在t3中单击“上一步”按钮时,它仍然显示“确认表单重新提交”“是的,如果为调用该页面而完成表单提交,则始终如此。你的公司