Search code examples
javascriptphpsessionsession-variablespage-refresh

PHP session data removed by java refresh


Thank in advanced,

I was looking at creating a linked dropdown menu and found tutorial/code online

I have used this code twice to create lmsdropdown.php and clubdropdown.php. I am able to store the values from the lmsdropdown form is a session and echo them to clubdropdown (just for verification that values are present).

lmsdropdown is a php include within members.php and clubdropdown is an include in members2.php.

When I select a value on clubdropdown the page refreshes to populate the 2nd dropdown box and this results in my session data being cleared.

I am new to PHP/Javascript so the answer may be very obvious but this has had me stumped for a few days now. Any help would be very much appreciated.

Below is a merge of two snippets members2.php, that has taken the output of lmsdropdown and stored output in sessions. clubdropdown shows the java code and also the echo session statements

I am able to correctly echo the session data however the javascript seems to remove this when building dropdown 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";

The image below shows the session variables outputted to clubdropdown that is included in members2.php clubdropdown with variables shown

This image shows the errors after a selection is made from th 1st dropdown. Error after list refresh

From some of the answers to similar questions on here I assume the error is because the post data is being overwritten/removed on refresh but I thought that's what the session was for?

Any input is greatly received thank you.


Solution

  • You are getting the values from $_POST, which the second time you run the page is absent. You need to add an If(isset($_POST['lms'])){ $_SESSION['lms'] = $_POST['lms']; } so that it is skipped if the $_POST value isn't present.

    Currently, your $_SESSION variables are still there, but are being replaced with empty $_POST values.

    I suspect you might be better off using an AJAX call to populate your dropdown list.