为什么PHP第一个页面的Session数据无法传递到第二个页面?
问题原因
- Session1.php逻辑错误:你为每个表单字段单独写了判断跳转逻辑,代码执行到第一个满足条件的判断时就会直接跳转,剩余字段还没存入Session就已经结束了当前页面逻辑,导致绝大多数数据没有存储成功。同时跳转后没有加
exit终止代码执行,可能引发异常。 - Session2.php输出位置错误:所有Session数据的输出逻辑写在了
<html>标签之外,浏览器不会渲染HTML结构外的内容,哪怕Session有值也不会展示在页面上。
修正方案
1. 修改Session1.php逻辑
将所有字段的存储逻辑合并,全部字段处理完成后再跳转,跳转后添加exit终止执行,修正后代码如下:
<?php session_start(); // 表单提交后统一处理所有字段,全部存完再跳转 if (!empty($_POST)) { $_SESSION["employeeName"] = $_POST["employeeNameBox"] ?? ''; $_SESSION["employeeid"] = $_POST["employeeidBox"] ?? ''; $_SESSION["phoneNumber"] = $_POST["phoneNumberBox"] ?? ''; $_SESSION["email"] = $_POST["emailBox"] ?? ''; $_SESSION["position"] = $_POST["positionBox"] ?? ''; $_SESSION["ITProject"] = $_POST["ITProjectBox"] ?? ''; header("Location: Session2.php"); exit; // 跳转后终止执行,避免后续代码运行 } ?> <html> <body> <?php include('Header.php'); ?> <?php include('Menu.php'); ?> <div class="content"> <form method="POST"> <input type="text" name="employeeNameBox" value="Employee name"> <br> <input type="text" name="employeeidBox" value="Employee id"> <br> <input type="text" name="phoneNumberBox" value="Phone number"> <br> <input type="text" name="emailBox" value="Email"> <br> <input type="radio" id="Manager" name="positionBox" value="Manager"> <label for="Manager">Manager</label><br> <input type="radio" id="Team Lead" name="positionBox" value="Team Lead"> <label for="Team Lead">Team Lead</label><br> <input type="radio" id="IT Developer" name="positionBox" value="IT Developer"> <label for="IT Developer">IT Developer</label><br> <input type="radio" id="IT Analyst" name="positionBox" value="IT Analyst"> <label for="IT Analyst">IT Analyst</label><br><br> <select name="ITProjectBox"> <option value="Project A">Project A</option> <option value="Project B">Project B</option> <option value="Project C">Project C</option> <option value="Project D">Project D</option> </select> <br><br> <button type="submit">Submit Information</button> </form> </div> <?php include('Footer.php'); ?> </body> </html>
2. 修改Session2.php输出位置
将Session数据的输出逻辑移动到页面的<div class="content"></div>区域内,保证内容能被正常渲染,修正后代码如下:
<?php session_start(); ?> <html> <body> <?php include('Header.php'); ?> <?php include('Menu.php'); ?> <div class="content"> <?php if(isset($_SESSION["employeeName"])) { echo "<b>Employee name: </b>" .$_SESSION["employeeName"]; echo("<br><br>"); } if(isset($_SESSION["employeeid"])) { echo("<b>Employee id: </b>" .$_SESSION["employeeid"]); echo("<br><br>"); } if(isset($_SESSION["phoneNumber"])) { echo("<b>Phone number: </b>" .$_SESSION["phoneNumber"]); echo("<br><br>"); } if(isset($_SESSION["email"])) { echo("<b>Email: </b>" . $_SESSION["email"]); echo("<br><br>"); } if(isset($_SESSION["position"])) { echo("<b>Position: </b>" . $_SESSION["position"]); echo("<br><br>"); } if(isset($_SESSION["ITProject"])) { echo("<b>IT Project: </b>" . $_SESSION["ITProject"]); echo("<br><br>"); } ?> </div> <?php include('Footer.php'); ?> </body> </html>
修改完成后即可正常提交展示表单数据。
内容的提问来源于stack exchange,提问作者chessfordays
相关产品推荐
相关产品推荐

