【问题标题】:Push MYSQL table onto another PHP page将 MYSQL 表推送到另一个 PHP 页面
【发布时间】:2014-06-01 01:04:04
【问题描述】:

我有两个 PHP 页面。在 page1 上创建了一个临时表并填充了来自 mysql 数据库的数据。我正在尝试将此表存储到 $_SESSION 变量中,以便可以将表放到 page2 上。

现在这是我的方法:

这是第1页的代码:

//Select data from database
$result = mysqli_query($mysqli,"SELECT * FROM table");
//Set array
$array = array();

while($row = mysql_fetch_assoc($result)){
  // add each row returned into an array
  $array[] = $row;
}

//store array into session variable
$_SESSION['fase1result'] = $array;

这是第2页的代码:

$table = $_SESSION['fase1result'];

echo "<table border='1'>
<tr>
<th>ProductID</th>
<th>ProductName</th>
<th>Fase1</th>
</tr>";

foreach ($table as $row)
{
echo "<tr>";
echo "<td>" . $row['ProductID'] . "</td>";
echo "<td>" . $row['ProductName'] . "</td>";
echo "<td>" . $row['Fase1'] . "</td>";
echo "</tr>";
}
echo "</table>";

不幸的是,到目前为止,这些脚本在 page2 上给我返回了一个空表。非常感谢您的帮助!

更新: 对我来说最好的办法是按原样保留临时表,这样我就可以在第 2 页上使用 MySQL 查询进一步操作它。你知道如何做到这一点,而不是通过将数据拉入 php 来将其撕开吗大批?抱歉把这个问题混淆了一点。

【问题讨论】:

  • 两页顶部都有session_start()吗?
  • 为什么不直接查询数据库呢?
  • 可能不是真正的原因,但您使用的是 session_start 吗?
  • @MikeBrant 您确实可以像这样将数组转储到 PHP 会话中,PHP 会做正确的事情。 PHP 处理将会话存储在任何底层持久层中所需的任何序列化。为什么你不能?
  • 我在两个页面的顶部都使用了 session_start()。查询数据库并不是一个真正的选择(我认为),因为它是在第 1 页创建的临时表。

标签: php mysql arrays html-table session-variables


【解决方案1】:

在使用任何与会话相关的设施之前,您需要致电session_start()

session_start();
$_SESSION['fase1result'] = $array;

然后

session_start();
$table = $_SESSION['fase1result'];

请注意,在大多数情况下,您需要在任何输出之前调用session_start(),因为它通常需要将Cookie: 标头发送到客户端浏览器,除非您配置了不同的会话保持方式。否则可能会导致“标头已发送”错误。

【讨论】:

  • 这更像是一个评论,如果你真的想把它作为答案,你应该添加更多细节......在输出后添加session_start();可能会导致问题......
  • @CodeBird session_start() 是否必须在任何输出之前发生取决于用于会话的持久层。
  • 现在好多了....谢谢。但是,正如 OP 在他的评论中说他正在使用 session_start,你的回答不再成立
【解决方案2】:

正如 tgies 已经指出的,您需要初始化会话。

此外,您使用mysql_fetch_assoc(),即使您使用的是mysqli(至少用于查询),请使用while($row = $result-&gt;fetch_assoc())mysqli_fetch_assoc 函数(注意i)。

编辑:还有其他几个选项,但在大多数情况下,将数据存储在单个持久表中并通过 $_SESSION 中的 id 识别它是一种好方法。

【讨论】:

  • 也使用 pdo 或 mysqli 库,因为 mysql 库不安全且已弃用
  • 他正在使用mysqli_query,因此错误可能是由这个函数调用引起的,因为它需要一个mysql-result。
  • 好眼光@Sebb,我认为这实际上是问题所在。你应该在评论的地方更新你的答案
  • 那么如何将数据存储在一个表中呢?我可以这样做: $result = mysqli_query($mysqli,"SELECT * FROM table");然后: $_SESSION['fase1result'] = $result;并在下一页上使用此 $_SESSION 变量调用表?
  • 很难说,因为我不知道你的表实际上是做什么的,但是对于这个 approuch,你必须添加两行:一个具有唯一 ID(通过 uniqid() 或 @987654325 生成) @) 和一个带有时间戳的,然后将 id 存储在 $_SESSION 中,并在下一页中使用 $db-&gt;query("SELECT * FROM table WHERE unique_id=".$_SESSION["myid"]);。在脚本 1 的顶部或通过 cronjob,您应该删除所有超过 5 分钟左右的条目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
相关资源
最近更新 更多