需要将变量从index.php
传递到edit.php
。
该变量对于访问者应该不可见,因此不允许地址栏。
第一种方法-在index.php
上使用具有action
属性的表单-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);
答案 0 :(得分:1)
您可以在index.js
中创建一个自定义cookie,并将其附加到document.cookie
上,并且当对edit.php
发出请求时,该cookie将可用。
index.js
const custom_cookie = "x=5";
document.cookie = custom_cookie;
.....
window.location = 'edit.php';
edit.php
$cookie_name = 'x';
echo $_COOKIE[$cookie_name]
答案 1 :(得分:0)
另一种方法是使用PHP会话。
//index.php
$_SESSION['varname'] = $var_value;
//edit.php
$var_value = $_SESSION['varname'];
记住要运行session_start()
;在尝试访问$ _SESSION数组之前,以及在将任何输出发送到浏览器之前,都要在这两个页面上使用该语句。
答案 2 :(得分:0)
如果参数必须在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
答案 3 :(得分:0)
使用Cookie ...
index.php:
openCL
edit.php:
setcookie("x", 5);