你如何将这样的会话放入一个数组中

时间:2016-10-18 16:55:03

标签: php

我有以下两个文件,我想使用会话在两个文件之间传输信息,但我没有得到正确的结果。这是文件

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。如何将会话放入数组中,以便在单击链接后不仅获得会话中的最后一个值?

2 个答案:

答案 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'>"