Note that there are some explanatory texts on larger screens.

plurals
  1. POWrong module is displayed in next page when using $_SESSION
    primarykey
    data
    text
    <p>Below I have a php script where it displays a "Course" drop down menu and a "Module" Drop down menu. What is suppose to happen is the user first selects a course from the "Course" drop down menu and then a list of Modules which belongs to the selected course will appear in the "Modules" drop down menu. Below is the code for this:</p> <pre><code>create_session.php $sql = "SELECT CourseId, CourseNo, CourseName FROM Course"; $sqlstmt=$mysqli-&gt;prepare($sql); $sqlstmt-&gt;execute(); $sqlstmt-&gt;bind_result($dbCourseId, $dbCourseNo, $dbCourseName); $courses = array(); // easier if you don't use generic names for data $courseHTML = ""; $courseHTML .= '&lt;select name="courses" id="coursesDrop"&gt;'.PHP_EOL; $courseHTML .= '&lt;option value=""&gt;Please Select&lt;/option&gt;'.PHP_EOL; while($sqlstmt-&gt;fetch()) { $courseno = $dbCourseNo; $course = $dbCourseId; $coursename = $dbCourseName; $courseHTML .= "&lt;option value='".$course."'&gt;" . $courseno . " - " . $coursename . "&lt;/option&gt;".PHP_EOL; } $courseHTML .= '&lt;/select&gt;'; ?&gt; &lt;form action="&lt;?php echo htmlentities($_SERVER['PHP_SELF']); ?&gt;" method="post"&gt; &lt;table&gt; &lt;tr&gt; &lt;th&gt;Course: &lt;?php echo $courseHTML; ?&gt; &lt;input id="courseSubmit" type="submit" value="Submit" name="submit" /&gt; &lt;/th&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/form&gt; &lt;?php if (isset($_POST['submit'])) { $submittedCourseId = $_POST['courses']; $query = "SELECT cm.CourseId, cm.ModuleId, c.CourseNo, m.ModuleNo, c.CourseName, m.ModuleName FROM Course c INNER JOIN Course_Module cm ON c.CourseId = cm.CourseId JOIN Module m ON cm.ModuleId = m.ModuleId WHERE (c.CourseId = ?) ORDER BY c.CourseName, m.ModuleId"; $qrystmt=$mysqli-&gt;prepare($query); // You only need to call bind_param once $qrystmt-&gt;bind_param("s",$submittedCourseId); // get result and assign variables (prefix with db) $qrystmt-&gt;execute(); $qrystmt-&gt;bind_result($dbCourseId,$dbModuleId,$dbCourseNo,$dbModuleNo,$dbCourseName,$dbModuleName); $qrystmt-&gt;store_result(); $num = $qrystmt-&gt;num_rows(); if($num ==0){ echo "&lt;p style='color: red'&gt;Please Select a Course&lt;/p&gt;"; } else { $dataArray = array(); while ( $qrystmt-&gt;fetch() ) { // data array $dataArray[$dbCourseId]['CourseName'] = $dbCourseName; $dataArray[$dbCourseId]['CourseNo'] = $dbCourseNo; $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleName'] = $dbModuleName; $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleNo'] = $dbModuleNo; // session data $_SESSION['idcourse'] = $dbCourseNo; $_SESSION['namecourse'] = $dbCourseName; $_SESSION['idmodule'] = $dbModuleNo; $_SESSION['namemodule'] = $dbModuleName; } foreach ($dataArray as $foundCourse =&gt; $courseData) { $output = ""; $output .= "&lt;p&gt;&lt;strong&gt;Course:&lt;/strong&gt; " . $courseData['CourseNo'] . " - " . $courseData['CourseName'] . "&lt;/p&gt;"; $moduleHTML = ""; $moduleHTML .= '&lt;select name="module" id="modulesDrop"&gt;'.PHP_EOL; $moduleHTML .= '&lt;option value=""&gt;Please Select&lt;/option&gt;'.PHP_EOL; foreach ($courseData['Modules'] as $moduleId =&gt; $moduleData) { $moduleHTML .= "&lt;option value='$moduleId'&gt;" . $moduleData['ModuleNo'] . " - " . $moduleData['ModuleName'] ."&lt;/option&gt;".PHP_EOL; } } $moduleHTML .= '&lt;/select&gt;'; echo $output; ?&gt; &lt;form action="&lt;?php echo htmlentities($_SERVER['PHP_SELF']); ?&gt;" method="post"&gt; &lt;table&gt; &lt;tr&gt; &lt;th&gt;Course: &lt;?php echo $moduleHTML; ?&gt; &lt;input id="courseSubmit" type="submit" value="Submit" name="submit" /&gt; &lt;/th&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/form&gt; </code></pre> <p>So lets say I select the Course <code>INFO101 - Information Communication Technology</code> in the "Course" drop down menu, it displays the following modules in the Module drop down menu below which corresponds with that course:</p> <pre><code>CHI2520 - Advanced Web Programming CHI2220 - Systems Strategy CHI2350 - Interactive Systems </code></pre> <p>Now this is the problem I have. If I select the module <code>CHI2520 - Advanced Web Programming</code> and then access the page below, it displays this module instead <code>CHI2350 - Interactive Systems</code>. </p> <p>QandATable.php:</p> <pre><code> &lt;?php if (isset($_POST['idmodule'])) { $_SESSION['idmodule'] = $_POST['idmodule']; } if (isset($_POST['namemodule'])) { $_SESSION['namemodule'] = $_POST['namemodule']; } if (isset($_POST['idcourse'])) { $_SESSION['idcourse'] = $_POST['idcourse']; } if (isset($_POST['namecourse'])) { $_SESSION['namecourse'] = $_POST['namecourse']; } $outputDetails = ""; $outputDetails .= " &lt;table id='sessionDetails' border='1'&gt; &lt;tr&gt; &lt;th&gt;Course:&lt;/th&gt; &lt;th&gt;{$_SESSION['idcourse']} {$_SESSION['namecourse']}&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th&gt;Module:&lt;/th&gt; &lt;th&gt;{$_SESSION['idmodule']} {$_SESSION['namemodule']}&lt;/th&gt; &lt;/tr&gt; &lt;/table&gt; "; echo $outputDetails; ?&gt; </code></pre> <p>My question is that why does it display the wrong module number and name in the other page? Both page does include <code>session_start();</code></p> <p>Below is form which navigates to QandATable.php:</p> <pre><code>&lt;form action="QandATable.php" method="post" id="sessionForm"&gt; &lt;table&gt;&lt;tr&gt;&lt;th&gt;6: Module:&lt;/th&gt; &lt;td&gt;&lt;?php echo $moduleHTML; ?&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;p&gt;&lt;strong&gt;11: &lt;/strong&gt;&lt;input class="questionBtn" type="submit" value="Prepare Questions" name="prequestion" /&gt;&lt;/p&gt; &lt;/form&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload