0

我对 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'];
?>

我总是看到“西雅图”,赫尔辛基从来没有出现过,尽管(我想)如果单击西雅图链接,我会输入西雅图。显然不是那样...有人可以在这里帮助我吗?

4

6 回答 6

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'];
于 2012-11-26T13:04:46.840 回答
1

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

于 2012-11-26T12:58:17.187 回答
1

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

您想要实现的目标可以简单地使用 GET 变量完成:

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

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

$city = $_GET['city'];
于 2012-11-26T13:01:20.537 回答
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 文件的顶部即可。

于 2012-11-26T13:03:59.283 回答
0
<a href="<? echo $link.'?location="helsinki"'; ?>">"^^Helsinki^^</a>
<a href="<? echo $link.'?location="seattle"'; ?>">"^^Seattle^^</a>

$_GET['location']在另一页查看天气是赫尔辛基还是西雅图$link两个链接应该相同。

此外,您不能将 PHP(服务器端)与 Javascript(客户端)混合使用。查一下为什么会这样。

于 2012-11-26T13:01:45.283 回答
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']总是首先是“Helsinki”(第 1 行),但随后立即被“Seattle”覆盖(第 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
    }
}
于 2012-11-26T13:01:36.853 回答