Html <a> passing php variables but not loading new page</a>

时间:2011-02-14 02:53:35

标签: php html variables hyperlink synchronous

我正在开发一个网站,用户可以通过页面顶部的链接更新主题。免责声明:稍后我会用Javascript替换链接,但是现在我想要一个安全的备份,以防用户不支持Javascript。

我可以通过我的PHP获得显示的链接。它是<a href="?theme=dark">,如果它是浅色主题,如果用户使用黑暗主题则显示为<a href="?theme=light">

但是,单击这些链接中的任何一个似乎只更新我的地址栏的浏览器,强制我手动刷新页面以更改主题。单击链接时页面不会重新加载,因此主题不会更改。它的行为类似于异步请求,但相关的更改都是嵌入在HTML中的PHP,因此它们在刷新之前不会发生。

我做错了吗?当我点击这些链接时,有没有办法强制页面重新加载?

感谢您提供的任何帮助!

编辑:这是当前的脚本:

<?php
if ($_GET["theme"]) {
    $theme = $_GET["theme"];
    setcookie("theme", $theme, time()+21*24*60*60);
}
else if (isset($_COOKIE["theme"]))
    $theme = $_COOKIE["theme"];
else {
    $theme = "light";
    setcookie("theme", $theme, time()+21*24*60*60);
}
?>
<!DOCTYPE HTML>
<html>
<head>
<!-- head content... -->
</head>
<body id="<?php
    echo $_COOKIE["theme"];
    ?>">

<div id="container">
    <div id="header">
        <a id="switch" href="?theme=<?php
            if ($_COOKIE["theme"]=="light")
                echo "dark";
            else
                echo "light";
        ?>">Lights</span>
    </div>
    <!-- Rest of page content -->
</div>
</body>
</html>

使用上面的代码点击链接会将我带到/index.php?theme= 主题,但我必须在更改保持之前刷新。没有从服务器加载新的html,因此正文ID不会改变。

Cookie保持不变。

P.S。就像我说我将使用Javascript制作异步版本,我只想首先支持没有启用它的用户。感谢。

1 个答案:

答案 0 :(得分:3)

更改此行

<body id="<?php
echo $_COOKIE["theme"];
?>">

到这个

<body id="<?php
echo $theme;
?>">

和这个

if ($_COOKIE["theme"]=="light")

到这个

if ($theme=="light")

您的问题是,当您在当前页面加载中设置cookie时,在下一页加载之前它不可用。因此,为什么刷新似乎使其有效。