使用 Sessions: 将 PHP 变量发送到另一个页面


Sending PHP variables to another page using Sessions:

我在处理几个页面时遇到了问题:我想列出数据库中的所有图像(存储的URL),然后让用户单击图像,该图像将它们带到另一个页面,然后提供数据库中的其余信息。

我正在使用会话变量发送图像的 ID,然后在另一页上使用该 ID 在查看之前从数据库中选择信息。我遇到的问题是它似乎总是显示数据库上最后输入的详细信息,而不是来自单击的图像变量的实际信息。

不确定这是哪里出了问题,此后我添加了很多session_destroy()命令,我认为这是最初的问题,但尚未解决问题,似乎只会阻塞我的代码。

任何帮助或指导将不胜感激。

这是我的代码:

第 1 页 - 通过会话发送变量

<?php
//code to access database
$query = "SELECT * FROM releases";
$result = mysql_query($query);
if(!$result) die ("Database access failed: " .mysql_error());
$rows = mysql_num_rows($result);
  for ($j = 0 ; $j < $rows ; ++$j)
{
$row = mysql_fetch_row($result);

echo '<a href="test2.php"><img src="images/releases/' . $row[1] .'" id="' . $row [0] . '"/></a>';   
}
$id = $row [0]; //"row 0" is the auto increment of the database id.
if (isset($_SESSION ['id'])){
session_destroy();
}
session_start();
$_SESSION ['id']= $id;
mysql_close($db_server);
?>

第 2 页 - 接收变量,然后使用它访问数据库。

<?php
//code to access database
if (isset($_SESSION ['id'])){
    session_destroy();
}
session_start();
$id = $_SESSION['id'];
$query = "SELECT * FROM releases WHERE release_id = $id";
$result = mysql_query($query);
if(!$result) die ("Database access failed: " .mysql_error());
$row = mysql_fetch_row($result);

echo    "<img src='images/events/"  .$row[1] . "' width= '150' height= '150' />    <br />";
echo    "track title: "                 .$row[2] . "<br />";
echo    "artist: "              .$row[3] . "<br />";
session_destroy();
mysql_close($db_server);
?>

看看你的代码在做什么:

for ($j ...) {
   $row = mysql_fetch_row($result);
   ... do stuff with $row;
}
$id = $row[0];

您在循环终止后设置 $id,这意味着您只会从查询结果中获取 LAST 项。

即使您在循环中设置了$id,您仍然只会在 $_SESSION 中设置一个 ID:

for ($j ...) {
  $id = $row[0];
  $_SESSION['id'] = $id;
}

循环结束后,$_SESSION 将再次成为最后一个 ID。您正在执行的操作不需要会话,只需要一个查询变量:

for ($j ...) {
   $id = $row[0];
   echo "<a href='test.php?id=$id'>click me</a>";
                          ^^^^^^^---note the query string....
}

然后在您的测试.php页面中:

$id = $_GET['id'];