php - 如何使用 $_SESSION 变量检索数据并将其显示在另一个页面中

标签 php session

<分区>

下面我有一个 php 脚本,它显示一个“类(class)”下拉菜单和一个“模块”下拉菜单。假设发生的是用户首先从“类(class)”下拉菜单中选择一门类(class),然后属于所选类(class)的模块列表将出现在“模块”下拉菜单中。下面是代码:

create_session.php

$sql = "SELECT CourseId, CourseNo, CourseName FROM Course"; 
$sqlstmt=$mysqli->prepare($sql);
$sqlstmt->execute(); 
$sqlstmt->bind_result($dbCourseId, $dbCourseNo, $dbCourseName);
$courses = array(); // easier if you don't use generic names for data 

$courseHTML = "";  
$courseHTML .= '<select name="courses" id="coursesDrop">'.PHP_EOL; 
$courseHTML .= '<option value="">Please Select</option>'.PHP_EOL;  

while($sqlstmt->fetch()) 
{ 
    $courseno = $dbCourseNo;
    $course = $dbCourseId;
    $coursename = $dbCourseName; 
    $courseHTML .= "<option value='".$course."'>" . $courseno . " - " . $coursename . "</option>".PHP_EOL;  
} 

$courseHTML .= '</select>'; 

?>

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
    <table>
        <tr>
            <th>Course: <?php echo $courseHTML; ?>
                <input id="courseSubmit" type="submit" value="Submit" name="submit" />
            </th>
        </tr>
    </table>
</form>

<?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->prepare($query);

    // You only need to call bind_param once
    $qrystmt->bind_param("s",$submittedCourseId);
    // get result and assign variables (prefix with db)

    $qrystmt->execute(); 
    $qrystmt->bind_result($dbCourseId,$dbModuleId,$dbCourseNo,$dbModuleNo,$dbCourseName,$dbModuleName);

    $qrystmt->store_result();

    $num = $qrystmt->num_rows();

    if($num ==0){
        echo "<p style='color: red'>Please Select a Course</p>";
    } else { 

        $dataArray = array();

        while ( $qrystmt->fetch() ) { 
            // data array
            $dataArray[$dbCourseId]['CourseName'] = $dbCourseName; 
            $dataArray[$dbCourseId]['CourseNo'] = $dbCourseNo; 
            $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleName'] = $dbModuleName; 
            $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleNo'] = $dbModuleNo; 

            }

        foreach ($dataArray as $foundCourse => $courseData) {

            $output = ""; 

            $output .= "<p><strong>Course:</strong> " . $courseData['CourseNo'] .  " - "  . $courseData['CourseName'] . "</p>";

            $moduleHTML = ""; 
            $moduleHTML .= '<select name="module" id="modulesDrop">'.PHP_EOL;
            $moduleHTML .= '<option value="">Please Select</option>'.PHP_EOL;      
            foreach ($courseData['Modules'] as $moduleId => $moduleData) {        

                $moduleHTML .= "<option value='$moduleId'>" . $moduleData['ModuleNo'] . " - " . $moduleData['ModuleName'] ."</option>".PHP_EOL;        
            } 
        }
    $moduleHTML .= '</select>';

    echo $output;

?>

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
    <table>
        <tr>
            <th>Course: <?php echo $moduleHTML; ?>
                <input id="courseSubmit" type="submit" value="Submit" name="submit" />
            </th>
        </tr>
    </table>
</form>

假设我在“类(class)”下拉菜单中选择类(class) INFO101 - Information Communication Technology,它会在下面的模块下拉菜单中显示与该类(class)对应的以下模块:

CHI2520 - Advanced Web Programming
CHI2220 - Systems Strategy
CHI2350 - Interactive Systems

现在我想要做的是,我希望用户从下拉菜单中选择一个模块,然后提交下面的表单以导航到 QandATable.php 页面。但我想知道如何从下拉菜单中检索模块编号和名称并将其显示在 QandATable.php 页面中?我知道我应该使用 $_SESSION 变量 在两个页面中如何以及在何处编写 $_SESSION 变量?我是否还需要使用 isset 这样我就不会得到 undefined variable ?

下面是导航到 QandATable.php 的表单:

<form action="QandATable.php" method="post" id="sessionForm">
            <table><tr><th>6: Module:</th>
            <td><?php echo $moduleHTML; ?></td>
            </tr>
            </table>
            <p><strong>11: </strong><input class="questionBtn" type="submit" value="Prepare Questions" name="prequestion" /></p>   


        </form>

最佳答案

回答您的问题。是的,最好在最初发布的变量上使用 isset 或 is_null 以确保您具有有效值。在将其写入 session 变量的情况下,尽管这无关紧要。您可以为 session 变量分配一个空值,但如果您尝试使用期望有效值的 session 变量,它最终可能会在以后导致意外结果。

要设置 session 变量,您可以执行以下操作。您可以随时设置它以更新变量。我通常在从用户那里收集数据后将它们分配到某个帖子页面上。

$_SESSION['variableName'] = $_POST['postedVariable'];

请记住,您还需要在每个将使用 session 或可能被已建立的 session 变量命中的页面的最顶部添加以下代码。如果您没有在页面上设置此代码并且用户访问它,您将失去 session 跟踪。

session_start();

要稍后引用存储的 session 变量,您可以这样做:

echo $_SESSION['variableName'];

希望我正确理解了您的问题。

关于php - 如何使用 $_SESSION 变量检索数据并将其显示在另一个页面中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557357/

相关文章:

php - 单例类和mysqli事务

php - Codeigniter + ajax(jQuery) session 问题

macos - 通过 Express 和 MongoDB 使用 session ,为什么我只能连接一次路由,除非我更改 session key ?

PHP session 并具有 "prev"和 "next"按钮并保留值

phpMyAdmin 处理请求时出错 错误代码 : 500 Error text: Internal Server Error

php - 服务器的 Google API 身份验证

c# - 确定是否启用了 ASP.NET session

php - 在我的例子中,如何在 PHP 中阻止既不是管理员也不是工作人员的用户访问某些页面?

javascript - 防止多个 Ajax 请求(带 pushstate 的分页)

php - 如何从mysql表中获取空白或空值或0的列数