首页 > 解决方案 > PHP 会话变量在同一页面上丢失

问题描述

我有要分配员工的团队。经理登录他/她分配团队编号的帐户。然后,他们单击一个链接(将团队 ID 作为变量传递)转到他们进行员工查找的分配页面;找到员工并单击链接以将此员工分配给他们的团队。

当他们第一次进入此分配页面时,团队编号已存在。然而,在他们进行搜索之后,团队编号被清除了。这一切都在同一页上。我不知道为什么搜索功能会清除会话变量值。谢谢你。

<?php 
session_start();
?>

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div class="container">
    <?php 
    $_SESSION["teamid"] = $_REQUEST["tid"];
    ?>

    <?php 
    $con = new mysqli($localhost, $username, $password, $dbname); 
    if( $con->connect_error){
       die('Error: ' . $con->connect_error);
    } 
    if( isset($_GET['search']) ){  
      $team = $_SESSION["teamid"];
      $memberid = mysqli_real_escape_string($con, htmlspecialchars($_GET['search'])); 
      $sql = "SELECT * FROM employees WHERE empid ='$memberid'"; 
    } 
    $result = $con->query($sql);
    ?>

    <label>Enter Employee You Wish To Add To Your Team (<?php echo $_SESSION["teamid"]; ?>)</label>
    <form action="" method="GET">
        <input type="text" placeholder="Enter Employee ID here" name="search">&nbsp;
        <input type="submit" value="Search" name="btn" class="btn btn-sm btn-primary">
    </form>
    <br />
    <table class="table table-striped table-responsive">
        <tr>
            <th>Employee ID</th>
            <th>Name</th>
            <th>Action</th>
        </tr>
        <?php 
        while($row = $result->fetch_assoc()){
            ?>
            <tr>
                <td><?php echo $row['empid']; ?></td>
                <td><?php echo $row['firstname']; ?> <?php echo $row['lastname']; ?></td>
                <td><a href="assignemployee.php?mid=<?php echo $row['empid']; ?>&tid=<?php echo $team; ?>">Assign Employee</a></td>
            </tr>
            <?php
        }

        ?>
    </table>
</div>

</body>
</html>

标签: phpsession-variables

解决方案


这是因为在您的代码的顶部,您有这部分:

<?php 
$_SESSION["teamid"] = $_REQUEST["tid"];
?>

因此,每次重新加载页面时,它都会将 teamid 设置为请求中的任何内容。您第二次访问该页面时,它很可能是空的,这导致会话也为空。

解决此问题的一种简单方法是检查是否$_REQUEST["tid"]已设置:

<?php
if (isset($_REQUEST["tid"])) {
    $_SESSION["teamid"] = $_REQUEST["tid"];
}
?>

推荐阅读