通过为每个链接传递会话ID,将动态生成的链接链接到php

时间:2015-11-22 13:04:27

标签: php html mysql session

我在item.php中有这段代码:

while ($row = mysqli_fetch_array($res)) {
$link .= '<br><a href="item.php?id='.$row['item_id'].'">'.$row['item_name'].'</a><br>';
}

echo $link;

所以这会根据有多少结果(在数据库中)生成链接,所以说用户有4个项目,它会将项目名称显示为超链接,但我不知道如何将其链接到我的itemdetail .PHP。因此每个项目都将链接到itemdetail.php,但它们将具有将从mysql数据库中获取的唯一信息。

此刻我想让itemdetail.php回显项目名称,但我现在想要的是,我想基于item_id为每个链接生成一个唯一的会话ID,所以当我按下它时会话ID传递给itemdetail.php,从那里我可以将会话ID作为字符串传递并从mysql中提取数据(简单的位,所以在这一点上不需要帮助)。

我知道如何在页面之间传递会话ID,但这仅适用于固定链接(已经存在的按钮),但我无法弄清楚如何为生成的按钮/链接执行此操作。

仅供参考,我的网址确实显示/item.php?id=12345,12345是我的item_id,如果有帮助的话。这是当我点击生成的链接时(所以从/item.php到/item.php?id=12345或者每个链接的item_id都是这样),但当然除了更改URL之外,链接什么都不做。

tl; dr为每个生成的链接创建一个唯一的id(最简单的方法可能是获取item_id并使用它),将唯一的id作为会话传递,然后在另一个php中传递echo会话。

提前感谢任何有用的见解。

itemdetail.php

<?php
session_start();
include('connection.php'); 
echo $_SESSION['advert'];
$aName = $_SESSION['advert'];
?>

atm没有任何反应,因为item.php中的按钮没有连接到此。如果我尝试:

while ($row = mysqli_fetch_array($res)) {
$link .= '<br><a href="item.php?id='.$row['item_id'].'">'.$row['item_name'].'</a><br>';
if($link == true) {
 header("Location:item.php");
}

我得到'标题已由'错误

发送

2 个答案:

答案 0 :(得分:1)

要像现在一样通过项目ID,请使用$_REQUEST['id']之类的内容。

如果您实际上询问的是会话ID(与问题中显示的应用级项目ID不同):

会话ID通常通过cookie传递。

PHP将在没有重要应用程序代码的情况下为您本地执行此操作。您只需致电session_start(),用户的会话数据即可在$_SESSION全球范围内使用。

在幕后,这可以让服务器通过set-cookie标头将会话ID传递给客户端,客户端的浏览器将把它连接到后来连接到同一服务器的所有未来请求。在服务器端,会话ID连接到数据存储(默认情况下,本地文件系统上的文件,但可以是数据库或其他任何取决于您的PHP配置)。

答案 1 :(得分:0)

我不完全确定你想要达到的目标。

如果您希望页面item.php显示项目列表(如果未指定id),则只需if ($_REQUEST['id'])即可分隔这两种情况。 (处理输入时要小心!)

如果项目ID不足以唯一地标识项目(它应该是),那么也将其他信息添加到网址:

$link .= '<br><a href="item.php?id='.$row['item_id'].'&sid='.session_id().'">'.$row['item_name'].'</a><br>';

如果您在直接使用session_id()时遇到问题,可以执行以下两项操作:

  1. 在发送标头之前调用session_id()并将id存储在变量中 $SID = session_id()或类似的东西。
  2. 缓冲输出直到最后。请参阅ob_start()
  3. 但是,如果您希望显示列表中的项目具有相同的标识符,但根据查看它们的用户而不同,则必须提供更多详细信息。

    可以调整item.php?id=N中的逻辑以考虑$SID并将收到的ID N转换为数据库中使用的项目的unique id。完全取决于您的特定应用......

    您还可以使用php方便地为您维护的$_SESSION数组。生成链接时,请将所需信息(例如unique item id)存储在那里。然后,下次加载item.php?id=1时,您可以访问$_SESSION['item_links'][$n]

    同样,我也不太明白你在问什么。