繁体   English   中英

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

[英]best way to pass a variable between two php pages

需要将一个变量从index.php传递给edit.php

该变量应该对访问者不可见,因此不允许使用地址栏。

第一种方式 - 在index.php使用带有action属性的表单 - edit.php

使用表单的问题是每次刷新edit.phpedit.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM