2015-07-21 25 views
-2

我点击一个链接时更新会话变量它增加了GET变量到当前的URL:PHP的价值无法正常呼应刷新页面时

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

你在文件的顶部有'session_start();'吗? –

+1

1)你的'isset()'调用中有一切,它不会做你认为它做的事2)你不能只在你的php中有html – Rizier123

+0

当我试着运行它时,它工作得很好。不知道问题是什么。 – Brian

回答

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> 

我喜欢比issetarray_key_exists()更因为密钥可以存在被空,仍然通过测试:

从PHP文档: “对于对应于NULL值的数组键,isset()不返回TRUE,而array_key_exists()不会。”

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

session_start()将初始化变量$_SESSION,并与相应的内容填充它。由于这是不是在你的代码中,$_SESSION变量从未有过的'do'关键。

第二个到最后你必须是第一个行,你总是'test'项设置为0导致的结果永远是1点击Click me

最后经过问题,你没关输出原始HTML之前的php标签应该给你一个错误

-1

你在你的脚本的顶部缺少session_start()。如果以前不存在会话,您也不会分配会话,您将在递增之前不断将其设置为0。

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()的isset()中以了解更多信息。

您需要关闭PHP标签,然后才能插入原始的HTML。在HTML内部,您可以使用<?php ?>标签执行php。

希望这会有所帮助。

0

正如前面提到的,你拥有的一切包在isset()函数应该是

isset($_GET['do']) 

isset($_GET['do'] 

而且,你会总是被设置为0,每个页面刷新。如果尚未设置$ _SESSION ['test'],则只需设置$ _SESSION ['test'] = 0。

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