[英]best way to pass a variable between two php pages
需要将一个变量从index.php
传递给edit.php
。
该变量应该对访问者不可见,因此不允许使用地址栏。
第一种方式 - 在index.php
使用带有action
属性的表单 - edit.php
。
使用表单的问题是每次刷新edit.php
时edit.php
出现有关重新提交的警告。
第二种方式 - 在index.js
上使用 ajax 调用来更改 php 端的会话变量。
使用 ajax 的缺点是一条额外的路径 - 首先转到server side
(更改 php) - 然后到client side
(成功函数获取新值) - 然后再到服务器端(使用新变量转到edit.php
) .
什么是正确的方法?
有没有这样的简单方法:
location.href = 'edit.php', set x = 5
在edit.php
上得到这个:
echo $x
(结果 5);
您可以在index.js
创建一个自定义 cookie edit.php
加到document.cookie
,当对edit.php
发出请求时,它将可用。
索引.js
const custom_cookie = "x=5";
document.cookie = custom_cookie;
.....
window.location = 'edit.php';
编辑.php
$cookie_name = 'x';
echo $_COOKIE[$cookie_name]
另一种方法是使用 PHP Sessions。
//index.php
$_SESSION['varname'] = $var_value;
//edit.php
$var_value = $_SESSION['varname'];
记得运行session_start()
; 在您尝试访问 $_SESSION 数组之前,以及在将任何输出发送到浏览器之前,在这两个页面上的语句。
如果参数必须在 UI 中保持不可见(即不在地址栏中)并且您需要避免由于页面重新加载而导致 POST 请求,则可以通过两个请求来实现...
一个 AJAX POST 然后一个 GET,即
fetch('set-session-var.php', {
method: 'post',
body: 'x=5',
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
}).then(res => {
if (res.ok) {
window.location = 'edit.php'
}
})
或使用Post / Redirect / Get模式,例如
<form action="set-session-var.php" method="post">
<!-- set the "x" value however and whenever you want -->
<button type="submit" name="x" value="5">Go</button>
</form>
// set-session-var.php
session_start();
$_SESSION['x'] = $_POST['x'];
header('Location: edit.php'); // omit this if using the AJAX version
使用饼干...
索引.php:
setcookie("x", 5);
编辑.php:
echo $_COOKIE["x"];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.