奇怪的PHP会话

时间:2013-07-14 09:06:40

标签: php session session-variables

我有一个功能完善的网站,使用会话。唯一的例外是一个特定的页面。该页面执行一些DB SELECTS,验证资料等。 然后,在HTML部分,我有一个标签。之间,我有

<?php
    $classes = explode(",", $_SESSION['classes']);
    foreach ($classes as $class) {
        echo "<option>".$class."</option>";
    }
?>

现在$ _SESSION ['classes']是一个逗号分隔的字符串。示例:“10 A,11 D,12 C” 这是奇怪的部分,当我加载这个页面时,一切都运行完美,我得到一个下拉选择10 A,11 D和12 C选项......但是,当我刷新页面时,我得到一个下拉框只有一个选项:Array

是的,它只是说数组....没有其他选择。

不,我没有在PHP块之后将值设置为其他任何值。事实上,在这之后我没有另一个PHP块

为了调试它,我在echo $_SESSION['classes'];标记之后添加了代码为</select>的php块,并在第一页加载时添加10 A,11 D,12 C。刷新后,它说Array

然后我尝试了var_dump($_SESSION);并且它说["classes"]=> &string(9) "11 A,10 C" 这是最奇怪的部分:刷新后,它说["classes"]=> &array(2) { [0]=> string(4) "11 A" [1]=> string(4) "10 C" }并且在另一次刷新时,它说{{ 1}}

这只发生在我的网络主机上,而不是在我的本地服务器上。而且,仅限于此页面

我不知道造成这种情况的原因,或者如何解决这个问题

2 个答案:

答案 0 :(得分:1)

您可能已启用register_globals,因此$classes会在某个时候与$_SESSION['classes']混在一起。

你应该关掉它们。 (Here's why.)

或者,如果因任何原因无法关闭它们,请更改变量名称。

答案 1 :(得分:0)

知道了!

这是我的新代码:

<?php
    $classesBeingTaught[] = explode(",", $_SESSION['classes']);
    foreach ($classesBeingTaught[0] as $classBeingTaught) {
        echo "<option>".$classBeingTaught."</option>";
    }
?>