【问题标题】:Create Session, Establish Variable and Transfer Variable to Next Page创建会话,建立变量并将变量转移到下一页
【发布时间】:2014-01-23 13:52:37
【问题描述】:

我正在处理的这个页面有一个链接列表,我不想附加 url 变量 (.html?id=12345),所以我认为第一次尝试会话可能值得一试。

页面对数据库进行查询,获取行,然后将它们显示在列表中。我遇到的问题是会话变量被 while 结果中的下一行覆盖。所以无论用户点击什么,会话都会携带页面上的最后一个变量。

我认为这是代码放置(重新排列)的问题,但我还没有成功将正确的变量正确传递到下一页。

<?php
    session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<?php
$tourQuery = mysql_query("SELECT * table WHERE ID = '".$page['main_id']."' AND DateTime >= CurDate() ORDER BY DateTime ASC");
$tourcount = mysql_num_rows($tourQuery);
while($tour = mysql_fetch_array($tourQuery))
    {
        $_SESSION['sessionname'] = $tour['EventID'];
    ?>
            <div class="schedule-row vevent" style="overflow:auto;"> 
                <div class="schedule-button">
                    <a class="schedlink url" href="<?=$pg['request']?>.html">
                        View
                    </a>
                </div>
                <br clear="all" /> 
            </div>
<?php       
}

如您所见,正在为查询的每个结果确定一个会话变量,我只是想弄清楚如何将其传递到下一页而不是页面上的最后一个变量。

如果您认为下一页中的代码是相关的,我可以提供它,但是,这个页面上似乎一切正常,所以我认为专注于上面的代码是有意义的。

所以,请帮帮我。

【问题讨论】:

  • 会话不是这样工作的。 $_SESSION 是请求之间共享的数组。你可以在里面放任何东西,包括key =&gt; value 对。但是您需要以某种方式将链接与会话项相关联。您可以使用 GET 或 POST 数据来执行此操作。意思是 $_SESSION 在这里是多余的。坚持?EventID=$tour['EventID']。
  • 如果您不想使用GET,那么您肯定必须选择POST 方法,因为使用会话您无法唯一标识ID 来显示值。

标签: php session session-variables


【解决方案1】:

如果您不想在url中添加变量,并且页面$pg['request']和循环中的值$tour['EventID']之间没有关系,那么只有将用户发送到具有对应的下一页的唯一方法值,是使用一个表单,发布它并将$tour['EventID'] 添加为(隐藏)表单字段。

类似:

<form action="<?php echo $pg['request']; ?>" method="post">
  <input type="hidden" name="id" value="<?php echo $tour['EventID']; ?>">
  <input type="submit" value="View">
</form>

(您可能需要对变量进行编码/转换,以便能够echo 将它们毫无问题地输出)

【讨论】:

  • 我喜欢这个主意...我要试试这个。
  • 那么这可以通过保留文本链接来完成吗?我宁愿没有提交按钮。
  • @NotJay 如果&lt;input&gt; 没有给您足够的可能性来使用css 设置样式,您可以使用&lt;button&gt;。但我认为两者都可能看起来像一个链接。
  • 这几乎可以工作了...传递变量的页面是一个 php 页面,但我们使用 .htaccess 将 url 的结尾更改为 .html 而不是 .php。该变量未显示在第二页上。这可能是由于 .html 扩展名造成的吗?另外,使用 $_POST 来获取变量?
  • @NotJay POST 变量会在您重写 url 时正常传递,除非您执行像 http://www.... 这样的重定向而不是像 /path/to/file.php 这样的重写。
【解决方案2】:

而不是使用这个:

$_SESSION['sessionname'] = $tour['EventID'];

使用这个:

$_SESSION['EventID'][$tour['EventID']] = $tour['EventID'];

或

$_SESSION['Events'][$tour['EventID']] = $tour;

如果您不管理 cookie,则不需要会话名称。

【讨论】:

    猜你喜欢
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2013-05-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多