PHP会话:始终发送两个值

时间:2012-11-26 12:54:47

标签: php session hyperlink

我对PHP很陌生,但试图找到我迄今为止运作良好的方式。

问题如下:我有一个有2个链接的网站。两者都应重定向到相同的第二个网站,但根据点击的链接,某些值应该更改。我试图使用PHP会话。

以下是截至目前的代码:

链接1:

<a href="<? echo $link ?>" class="helsinki" onclick="<? $_SESSION['clicked']= "helsinki"; ?>"^^Helsinki^^</a>

链接2:

<a href="<? echo $link ?>"  class="seattle" onclick="<? $_SESSION['clicked']= "seattle"; ?>">^^Seattle^^</a>

现在,如果我尝试阅读下一个点击了哪个链接:

<? if(isset($_SESSION['clicked']))
        echo "clicked ". $_SESSION['clicked'];
?>

我总是看到“西雅图”,赫尔辛基永远不会出现,虽然(我想)如果点击西雅图链接,我输入西雅图。显然它不是那样的......任何人都可以帮助我吗?

6 个答案:

答案 0 :(得分:1)

这是因为PHP代码是服务器端,因此在页面请求时执行。因此$_SESSION['clicked']设置为helsinki,然后在第一页加载时重置为seattle。您可能希望使用$_GET变量而不是$_SESSION变量。

答案 1 :(得分:1)

等待等待一秒钟:PHP是“服务器端”,javascript是“客户端”。这意味着你将始终在javascript之前执行PHP。

您尝试实现的目标可以通过GET变量完成:

<a href="<?= $link ?>?city=seattle">^^Seattle^^</a>
<a href="<?= $link ?>?city=helsinki">^^Helsinki^^</a>

与第二个网站相比,您可以获得我们参数的值:

$city = $_GET['city'];

答案 2 :(得分:1)

不确定这是否有用,但您可以创建“重定向器”。它将用户带到服务器端页面,将其重定向到最终页面,同时更改会话。

页面:

<a href="redirector.php?link=helsinki"> ... </a>
<a href="redirector.php?link=seattle"> ... </a>

redirector.php的代码:

<?php

session_start();
// determine where to redirect user (could be done with database or array of options)
switch ($_GET['link']) {
    case 'helsinki':
        header('Location: /link/to/helsinki');
        break;

    case 'seattle':
        header('Location: /link/to/seattle');
        break;

    default:
        return;
}
$_SESSION['clicked'] = $_GET['link'];

答案 3 :(得分:0)

你正在混淆Javascript和PHP。

PHP是服务器端,这意味着所有PHP代码都在服务器端解析并执行,然后被发送到客户端。

所以,如果你写

line #1: <a href="<? echo $link ?>"  class="helsinki" onclick="<? $_SESSION['clicked']= "helsinki"; ?>">^^Helsinki^^</a>

然后

line #2: <a href="<? echo $link ?>"  class="seattle" onclick="<? $_SESSION['clicked']= "seattle"; ?>">^^Seattle^^</a>

$_SESSION['clicked']的值始终是第一个“赫尔辛基”(第1行),但后来被“西雅图”(第2行)立即覆盖。

为了实现您希望脚本实现的目标,例如,如下所示:

<a href="?location=helsinki" class="helsinki">^^Helsinki^^</a>
<a href="?location=seattle" class="seattle">^^Seattle^^</a>

然后从PHP变量$_GET中捕获已发送的变量:

if (isset($_GET['location'])) {
    if ($_GET['location'] == "helsinki") {
        // Whatever
    }
    elseif ($_GET['location'] == "seattle") {
        // You want
    }
}

答案 4 :(得分:0)

<a href="<? echo $link.'?location="helsinki"'; ?>">"^^Helsinki^^</a>
<a href="<? echo $link.'?location="seattle"'; ?>">"^^Seattle^^</a>

并在另一页上使用$_GET['location']查看 helsinki seattle 的天气。 <{1}}对于两个链接都应该相同。

此外,您不能将PHP(服务器端)与Javascript(客户端)混合使用。查看原因。

答案 5 :(得分:0)

您无法在onclick事件中编写PHP代码。如果你想这样做,你应该使用Javascript / AJAX。即使你这样做,你也不会按照自己的意愿得到结果,因为AJAX请求会延迟几秒钟。

我认为做这种事情的正确方法如下:

<a href="change_city.php?city=helsinki" class="helsinki">Helsinki"</a>

这是change_city.php

<?php

$_SESSION["clicked"] = $_GET["city"];

?>

如果您仍想使用$link,那么您只需将上面的代码放在PHP文件的顶部。