PHP-刷新页面时会话变量的值未正确响应

PHP-刷新页面时会话变量的值未正确响应,php,Php,我有一个会话变量,在单击链接时更新,该链接将GET变量添加到当前URL: <?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&g

我有一个会话变量,在单击链接时更新,该链接将GET变量添加到当前URL:

<?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

为什么??如何使其回显更新的值?(一)


编辑:是,
session\u start()
包含在页面顶部

脚本顶部缺少
session\u start()
。如果会话以前不存在,您也不会分配它,而是在递增之前将其连续设置为0。

将其更改为如下:

<?php
session_start();
if(!array_key_exists('test', $_SESSION)){
    $_SESSION['test'] = 0;
}

if(array_key_exists('do', $_GET) && $_GET['do'] === 'this') {
   $_SESSION['test']++;
}

echo $_SESSION['test'];
?>
<a href="?do=this">Click me</a>

我喜欢的不仅仅是因为密钥可以为null并且仍然通过测试:

来自php文档:“对于对应于空值的数组键,isset()不返回TRUE,而array_key_exists()返回TRUE。”

您还错误地使用isset来测试
$\u GET['do']
的内容。最重要的是,您没有在每次加载页面时启动会话

将初始化
$\u会话
变量并用适当的内容填充它。因为这不在代码中,所以
$\u会话
变量从来没有您的
'do'

您遇到的倒数第二个问题是第一行,您总是将
'test'
键设置为
0
,导致在单击
单击我之后结果始终为1


最后,您在输出原始HTML之前没有关闭php标记,这应该会给您一个错误

也许您没有粘贴整个代码,但下面是应该如何完成的

<?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\u start()
Google开始了解更多信息。 您已将所有内容放入
isset()
Google isset()以了解更多信息

您需要先关闭php标记,然后才能插入原始HTML。在HTML中,您可以使用
标记执行php


希望这能有所帮助。

如前所述,您已将所有内容包装在isset()中

isset($_GET['do'])
不是

此外,每次页面刷新时,您的会话总是设置为0。如果尚未设置$_会话['test'],则只需将$_会话['test']=0

if (!isset($_SESSION['test'])) {
    $_SESSION['test'] = 0;
}

您是否有
会话_start()在文件的顶部?1)您的
isset()
调用中包含了所有内容,这不会像您认为的那样执行2)您不能只在PHP中包含html当我尝试运行它时,它工作得非常好。不知道问题是什么。
if (!isset($_SESSION['test'])) {
    $_SESSION['test'] = 0;
}