PHP GET变量在浏览时传递

时间:2012-01-25 05:29:52

标签: php url post

我的网站分为主题。用户可以随时在任何页面上切换主题。我希望能够在页面之间传递此主题。我猜这应该在php帖子中完成或获取变量。我可以从帖子中获取主题或获取变量,然后运行我的网站的其余部分。但是,这似乎需要每个页面上的表单传递此变量。截至目前,我通过发布或获取变量的唯一方法是从上一页的表单。我从未在几页上传递这些变量。我是否需要在每个页面上都有一个表单来传递这些变量?另外,这是标准的做法吗?

4 个答案:

答案 0 :(得分:1)

您应该使用GET,因为它听起来只是在尝试显示不同的信息,而POST应该用于执行更改或操作。

如果您决定使用GET变量,您只需将它们附加到链接的href的末尾:

<a href="something.php?topic=bananas">MORE BANANAS</a>

答案 1 :(得分:1)

这样做的最小开销方法是添加一些javascript,每当有人导航到新主题时设置cookie。这将假设您可以选择某种方式匹配主题的所有链接(可能是槽类)

更好的方法 - 由于兼容性,可靠性和开销 - 但如果大量链接需要更改,则不一定可行,就是使用GET请求,如another poster suggested

答案 2 :(得分:0)

您可以创建一个帮助函数来生成锚标记,并将任何现有的查询字符串附加到它,所以代替:

<a href="page2.php?foo=bar&baz=bat">Foobar</a>

你会这样做:

<?php echo anchor('page2.php','Foobar'); ?>

你的函数看起来像这样:

/**
 * Function creates an anchor tag and optionally 
 * appends an existing query string
 * @param string $url
 * @param string $txt
 * @param bool $attach_qs Whether or not to follow a query string
*/
function anchor($url, $txt, $attach_qs = true) 
{
    $qs = '';
    if ($attach_qs === true) {
        $qs = (!empty($_SERVER['QUERY_STRING'])) ? '?' . $_SERVER['QUERY_STRING'] : '';
    }
    return '<a href="' . $url . $qs . '">' . $txt . '</a>';
}

答案 3 :(得分:0)

Kolink建议通过PHP echo语句为每个URL放置主题肯定会有效。然而,我感到惊讶的另一个选择还没有出现。

您可以使用PHP会话管理器来存储变量。它类似于使用cookie;但是,它只是暂时的(仅限于会话)。 cookie可以在多个会话中持久存在。

<?php
// use this code before the page is generated, before the topic is decided.
session_start();
if (isset($_GET['topic']) && $_GET['topic'] != $_SESSION['topic']) {
    // GET['topic'] is set, session variable does not match
    // you may want to sanitize or limit what can be passed via ?topic=
    $_SESSION['topic'] = $_GET['topic'];
} else if (isset($_SESSION['topic'])) {
    // Session topic is not empty, run code to display appropriate content
} else {
    // No topic is set, display default
}
?>

这绝不是唯一的解决方案,但它确实为您提供了额外的选择。