在两个PHP页面之间传递变量的最佳方法

时间:2019-04-08 06:35:42

标签: javascript php jquery

需要将变量从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);

4 个答案:

答案 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);