将变量从一个 PHP 页面发送到另一个

Posted

技术标签:

【中文标题】将变量从一个 PHP 页面发送到另一个【英文标题】:Sending variables from one PHP page to another 【发布时间】:2011-12-05 18:10:39 【问题描述】:

我正在构建一个从我服务器上的数据库动态生成的测验 Web 应用程序。我几乎实现了所有功能,唯一缺少的部分是使其能够提供多个测验。现在我必须在 quiz.php 脚本中手动写入代码$quiz_id = 1, $quiz_title = "geography" 才能正确运行。如果我可以为这两个变量生成值,我的 quiz.php 将适用于多个测验主题。

所以,这就是我的问题:我希望用户能够从测验主题列表中进行选择(在页面 quizlist.php 上),单击他们想要参加的测验的链接,然后将他们带到带有测验问题/选择的页面(在页面 quiz.php 上)。此外,我想将 quizlist.php 中的一些值发送到与用户单击的特定链接相关联的 quiz.php。我想将 quiz_id 和 quiz_title 发送到页面 quiz.php 以提出正确的问题集。

我相信有一种方法可以使用 $_GET 或 $_POST,以及使用 $_SESSION。 我的问题是哪种方式更好?我该怎么做?我听说 $_SESSION 更安全,但我不确定我是否真的担心这些数据(quiz_id 和 quiz_title)的安全性。

目前,这里是 quizlist.php 的代码

<?php
  // Start the session
  require_once('startsession.php');

  // Insert the page header
  $page_title = 'Quiz List';
  require_once('header.php');

  require_once('connectvars.php');

  // Make sure the user is logged in before going any further.
  if (!isset($_SESSION['user_id'])) 
    echo '<p class="login">Please <a href="login.php">log in</a> to access this page.</p>';
    exit();
  

  // Show the navigation menu
  require_once('navmenu.php');

  // Connect to the database
  $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

  // Determine number of quizes based on title in quiz table
  $query = "SELECT * FROM quiz";
  $data = mysqli_query($dbc, $query);
  // Loop through quiz titles and display links for each
  while ($row = mysqli_fetch_array($data)) 
    echo '<a href="quiz.php">' . $row['title'] . '</a><br />';
  

  mysqli_close($dbc);

  // Insert the page footer
  require_once('footer.php');
?>

感谢您的帮助!

【问题讨论】:

您可以使用会话来制作“全局”变量。 一次解决一个问题,首先是工作的问题列表,然后是身份验证。您应该使用 GET,因为 SESSION 是针对特定用户的特定内容。 POST 用于修改服务器端的代码(这里你只从数据库加载东西)。 GET 是检索服务器端信息,这正是您的情况。 感谢您对 $_SESSION、$_POST 和 $_GET 的准确分类。 【参考方案1】:

使用$_GET

首先,你要改变这一行

echo '<a href="quiz.php">' . $row['title'] . '</a><br />';

这样的:

echo '<a href="quiz.php?id='.$row['id'].'">' . $row['title'] . '</a><br />';

然后在quiz.php 中,使用$_GET['id'] 作为主键检索相应的测验,以便在数据库中查找它。

您也应该将测验标题存储在那里(在数据库中)。

$_GET 在这里很合适,因为您只是使用 ID 来确定要显示的测验。这里不需要保密。当您提交更改数据库的表单数据时,您将使用$_POST$_SESSION 可用于存储基本登录信息和其他在会话期间必须跨多个页面持续存在的内容,例如向导表单。

【讨论】:

【参考方案2】:

要将值从一个 PHP 页面“发送”到另一个页面,您可以使用在 url 中发送的会话或 GET 变量。

会话:

$_SESSION["quiz_id"] = 1;
$_SESSION["quiz_title"] = "geography";

网址:mypage.php?quiz_id=1&amp;quiz_title=geography

$quiz_id = $_GET["quiz_id"];
$quiz_title = $_GET["quiz_title"];

要将值从客户端发送到服务器,您必须使用 html 表单或 AJAX。

【讨论】:

是的,他可以使用$_SESSION 跨页面传递这些内容,但他为什么还要传递这些值呢?它们是硬编码的! 在这种情况下你为什么要使用 session? 在他的情况下,他可能不应该使用会话。我只是在展示如何使用它们,因为这是他的问题的一部分。【参考方案3】:

首先,一次解决一个问题,首先是工作的问题列表,然后是身份验证。

你应该使用 GET 因为:

$_SESSION 用于存储特定于给定用户的行为和身份验证信息,例如令牌。 $_POST 用于修改服务器端的代码(这里你只从数据库加载东西)。 $_GET 是检索服务器端信息,这正是您的情况。

此处加载问题不应因用户而异。 它不会直接修改服务器端的某些内容。 这就是您应该使用 GET 的原因。 使用其他方法也可以,但这不是正确的方法。

所以基本上你改变的是:

echo '<a href="quiz.php">' . $row['title'] . '</a><br />';

通过

echo '<a href="quiz.php?q_id='.$row['id'].'">' . $row['title'] . '</a><br />';

在您的测验页面中,您现在可以知道问题的 id(默认存储在 $_GET["qid"] 中),然后随心所欲地使用它。 这当然可以应用于其他变量。

【讨论】:

以上是关于将变量从一个 PHP 页面发送到另一个的主要内容,如果未能解决你的问题,请参考以下文章

将变量从一个表传递到另一个 PHP 页面中的另一个 [重复]

有没有办法将参数从一个页面发送到另一个页面而不在 url 中发送它们?

jQuery Mobile:将数据从一个页面发送到另一个页面

使用 header() 将数据从一个 PHP 页面传递到另一个页面

将列表框选定项从一个 wpf 页面发送到另一个页面

如何在 React 中将结果数据从一个页面发送到另一个页面