我有一个会话变量,在点击链接时会更新,这会将GET变量添加到当前网址:
<?php
$_SESSION['test'] = 0;
if (isset($_GET['do'] && $_GET['do'] == 'this')) {
$_SESSION['test'] = $_SESSION['test'] + 1;
}
echo $_SESSION['test'];
?>
<a href="?do=this">Click me</a>
单击链接时,回显的新会话值仍为0.
为什么呢?如何让它回应更新的值? (1)
编辑:是的,session_start()
包含在页面顶部。
答案 0 :(得分:0)
将其更改为:
$_GET['do']
我比array_key_exists()
更喜欢isset
,因为密钥可以存在为null且仍然通过测试:
来自php docs:“isset()对于与NULL值对应的数组键不返回TRUE,而array_key_exists()则返回TRUE。”
您还错误地使用了isset来测试$_SESSION
的内容。最重要的是,您没有在每次加载页面时启动会话。
session_start()
将初始化$_SESSION
变量并使用相应的内容填充它。由于这不在您的代码中,'do'
变量从未拥有您的'test'
密钥。
您遇到的倒数第二个问题是第一行,您始终将0
键设置为Click me
,导致点击common.less
后结果始终为1 / p>
最后,在输出应该给你错误的原始HTML之前你没有关闭php标签
答案 1 :(得分:0)
也许你没有粘贴整个代码,但这是应该如何完成的。
<?php
session_start();
$_SESSION['test'] = 0;
if (isset($_GET['do']) && $_GET['do'] == 'this') {
$_SESSION['test'] += 1;
}
echo $_SESSION['test'];
?>
<a href="<?php echo $_GET['do'] //assuming $_GET['do'] contains a url ?>">Click me</a>
您需要从session_start()
Google开始,了解有关它的更多信息。
您已将所有内容放入isset()
Google isset()以了解有关它的更多信息。
在插入原始HTML之前,您需要关闭php标记。在HTML内部,您可以使用<?php ?>
标签执行php。
希望这有帮助。
答案 2 :(得分:0)
如前所述,isset()包含的所有内容都应该是
isset($_GET['do'])
不
isset($_GET['do']
此外,每次刷新页面时,您的会话始终设置为0。如果尚未设置$ _SESSION [&#39; test&#39;],则只需设置$ _SESSION [&#39; test&#39;] = 0。
if (!isset($_SESSION['test'])) {
$_SESSION['test'] = 0;
}
答案 3 :(得分:-1)
您在脚本顶部缺少session_start()
。如果以前不存在会话,您也不会分配会话,在递增之前,您将继续将其设置为0。