PHP 会话数据被 java 刷新删除

PHP session data removed by java refresh

在此先感谢,

我想创建一个链接的下拉菜单并在网上找到 tutorial/code

我已经两次使用此代码来创建 lmsdropdown.php 和 clubdropdown.php。我能够将 lmsdropdown 表单中的值存储为一个会话,并将它们回显到 clubdropdown(仅用于验证值是否存在)。

lmsdropdown 是 php 包含在 members.php 中,而 clubdropdown 是包含在 members2.php.

当我 select clubdropdown 上的值时,页面会刷新以填充第二个下拉框,这会导致我的会话数据被清除。

我是 PHP/Javascript 的新手,所以答案可能非常明显,但这让我困惑了几天。非常感谢任何帮助。

下面是两个片段的合并 members2.php,它采用了 lmsdropdown 的输出并将输出存储在会话中。 clubdropdown 显示 java 代码以及回显会话语句

我能够正确回显会话数据,但是 java脚本似乎在构建下拉列表 2 时删除了它。

members.php session data

<?php
    session_start();
    $_SESSION['lms'] = $_POST['lms'];
    $_SESSION['week'] =  $_POST['week'];

    if (!isset($_SESSION['usr_lvl']) or ($_SESSION['usr_lvl'] != 0)) {  
        header("Location: login.php");
        exit();
    }

?>

clubdropdown output of session data

<SCRIPT language=JavaScript>
    function reload(form) {
        var val = form.lge.options[form.lge.options.selectedIndex].value;
        self.location = 'members-page2.php?lge=' + val;
    }
</script>
</head>
<body>
    <?php
        $usr = $_SESSION['usr_id'];
        @$lge=$_GET['lge']; // Use this line or below line if register_global is off
        if(strlen($lge) > 0 and !is_numeric($lge)){ // to check if $lge is numeric data or not. 
            echo "Data Error";
            exit;
        }
        $usr = $_SESSION['usr_id'];
        $lms=$_SESSION['lms'];
        $week=$_SESSION['week'];
        echo "<br>Value of $week = $week<br>Value of $lms = $lms <br>Value of $usr = $usr";

下图显示了输出到 members2.php 中包含的 clubdropdown 的会话变量 clubdropdown with variables shown

此图显示了 selection 从第一个下拉列表中生成后的错误。 Error after list refresh

根据对此处类似问题的一些回答,我认为错误是因为 post 数据正在 overwritten/removed 刷新,但我认为这就是会话的目的?

非常感谢任何意见。

您正在从 $_POST 获取值,这是您第二次 运行 页面不存在。您需要添加一个 If(isset($_POST['lms'])){ $_SESSION['lms'] = $_POST['lms']; } 以便在 $_POST 值不存在时跳过它。

目前,您的 $_SESSION 变量仍然存在,但正在替换为空的 $_POST 值。

我怀疑您最好使用 AJAX 调用来填充您的下拉列表。