我有以下两个文件,我想使用会话在两个文件之间传输信息,但我没有得到正确的结果。这是文件
index.php
:
<?php
session_start();
for ($i=0; $i<=2; $i++) {
echo ("<p><a href='getpage.php?row=$item_title' target='_blank'>" . $item_title . "</a>");
echo ("<br>");
echo ($item_desc . "</p>");
$_SESSION['item_link'] = $item_link;
$_SESSION['item_title'] = $item_title;
}
并且getpage.php
具有以下
<?php
session_start();
if (isset($_SESSION['item_link']) && isset($_SESSION['item_title'])) {
$item_link = $_SESSION['item_link'];
$item_title = $_SESSION['item_title'];
header( "Location: $item_link" );
}
但是当我点击链接并通过单击索引文件中的链接运行item_link
文件时,我一直收到最后一个getpage.php
。如何将会话放入数组中,以便在单击链接后不仅获得会话中的最后一个值?
答案 0 :(得分:0)
这是快速尝试回答,但您可以尝试
$_SESSION['item_link'][] = $item_link;
$_SESSION['item_title'][] = $item_title;
然后你的会话变量本身就是数组。
答案 1 :(得分:0)
我怀疑你的代码是基于对底层机制的误解。文件只不过是静态资产,只不过是一堆零而且除了使用磁盘空间之外什么都不做,直到你对它们做了一些事情。
只需打印文件名称:
echo ("<p><a href='getpage.php?row=$item_title' target='_blank'>" . $item_title . "</a>");
...既不会执行文件也不会将其加载到内存中,也不会为其分配任何变量资源。它只是文字。 for-each-file 循环中定义的变量不会传输到文件。当用户点击链接时,文件中的源代码最终会运行。
其次,这并不是PHP会话的工作方式。会话数据未附加到特定文件,即会话范围内的信息。
您似乎部分了解网址参数。这是传输信息的正确方式,只要它不敏感或太长。如果您在网址中传递$item_title
:
echo ("<p><a href='getpage.php?row=$item_title' target='_blank'>"
......它将在$_GET['row']
处可用。没有必要摆弄会议:
$_SESSION['item_link'] = $item_link; // What for?
最后但同样重要的是,当您将文本注入到旨在被计算机使用的字符串(例如URL或HTML文档)时,您需要确保不要破坏数据格式。 PHP提供以下内置工具:
所以你的回声应该是这样的:
echo ("<p><a href='getpage.php?row=" . htmlspecialchars(rawurlencode($item_title)) . "' target='_blank'>"