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