PHP在登录后不会重定向到页面


PHP does not redirect to a page after login

我遇到了一个问题,几天来我一直在努力解决这个问题。我有一个有很多页面的网站,但我遇到的问题是,我正在尝试运行一个会话,当用户登录时,导航栏会变为类似"嗨,用户"的内容,可以选择注销或查看只有用户登录时才能访问的页面。非常感谢任何帮助,因为我现在对此完全没有希望,因为我真的不知道错误在哪里

第1页:login.php-这是用户登录的地方。

<?php
include ('logon.php');
?>
<html>
<body>
    <?php
        include('navbar.php');
    ?>
    <form action="login.php" method="post" name="login" id="login">
                    Username:
                        <br>
                    <input type="text" name="Username" required>
                        <br><br>
                    Password:
                        <br>
                    <input type="password" name="Password" id="password" required>
                        <br><br>
                <input name="login" type="Submit" value="Login" id="Login">
            </form>
</body>
</html>

第2页:logon.php-这是从数据库获取信息并运行会话的页面。

    $Username = $_POST['Username']; 
    $Password = $_POST['Password'];
    $S_Username = $_POST['S_Username']; 
    $Pass = $_POST['Password'];
    $Management_Username = $_POST['Management_Username']; 
    $Passwd = $_POST['Password'];
$query = "SELECT COUNT(*) AS cnt FROM Clients WHERE Username='" . mysqli_real_escape_string($connection, $Username) . "' && Password='" . mysqli_real_escape_string($connection, $Password). "'";
$result = mysqli_query($connection, $query);
$row = mysqli_fetch_assoc($result);
$queryadmin = "SELECT COUNT(*) AS cnt FROM S_Organiser WHERE S_Username='" . mysqli_real_escape_string($connection, $S_Username) . "' && Password='" . mysqli_real_escape_string($connection, $Pass). "'";
$resultadmin = mysqli_query($connection, $queryadmin);
$rowadmin = mysqli_fetch_assoc($resultadmin);
$querymanagement = "SELECT COUNT(*) AS cnt FROM Management WHERE Username='" . mysqli_real_escape_string($connection, $Management_Username) . "' && Password='" . mysqli_real_escape_string($connection, $Passwd). "'";
$resultmanagement = mysqli_query($connection, $querymanagement);
$rowmanagement = mysqli_fetch_assoc($resultmanagement);
if ($row["cnt"] > 0) 
{
    $_SESSION["userlogged"] =  $Username;
    header("Location: sorganiser.php");
    die();
} 
else if ($rowadmin["cnt"] > 0 )
    {
        $_SESSION["adminlogged"] = $S_Username;
        header("Location: logon.php");
    }
else if ($rowmanagement["cnt"] > 0 )
    {
        $_SESSION["managementlogged"] = $Management_Username;
        header("Location: logon.php");
    }
else 
{
    echo 'Not a valid login, please check your username and password!';
}
}
?>

第3页:navbar.php-这是会话启动后应该更改的导航栏页面

if(isset($_SESSION['userlogged']))
{
    echo '<div id="nav">
            <ul>
                <li><a href="index.php">Home</a></li><li>
                <a href="register.php">Register</a></li><li>
                <a href="login.php">Log In</a></li><li>
                <a href="admin.php">Admin</a></li><li>
                <a href="">|</li>
                <li class="Username"> Hi '.$_SESSION['userlogged'].'</li>      
                    <li><a href="logout.php">Logout</a></li>
                </li>
            </ul>
        </div>';
}
else if(isset($_SESSION['adminlogged']))
{
    echo '<div id="nav">
            <ul>
                <li><a href="index.php">Home</a></li><li>
                <a href="register.php">Register</a></li><li>
                <a href="login.php">Log In</a></li><li>
                <a href="admin.php">Admin</a></li> 
                <a href="">|</li>
                <li class="S_Username"> Hi '.$_SESSION['adminlogged'].'</li>      
                    <li><a href="logout.php">Logout</a></li>
                    <li><a href="add.php">Products</a></li>
                </li>
            </ul>
        </div>';
}
else if(isset($_SESSION['managementlogged']))
{
    echo '<div id="nav">
            <ul>
                <li><a href="index.php">Home</a></li><li>
                <a href="register.php">Register</a></li><li>
                <a href="login.php">Log In</a></li><li>
                <a href="admin.php">Admin</a></li> 
                <a href="">|</li>
                <li class="Management_Username"> Hi '.$_SESSION['managementlogged'].'</li>      
                    <li><a href="logout.php">Logout</a></li>
                </li>
            </ul>
        </div>';
}
else
{
echo '<div id="nav">
            <ul>
                <li><a href="index.php">Home</a></li><li>
                <a href="register.php">Register</a></li><li>
                <a href="login.php">Log In</a></li><li>
                <a href="admin.php">Admin</a></li> 
            </ul>
        </div>';
}
?>

第4页:client.php-这是用户登录后可以看到的页面。

<?php
session_start();
if(!isset($_SESSION['userlogged'])) 
{
header('Location: logon.php?redirect=client.php');
exit;
}
include ('logon.php');
?>
<html>
<body>
    <?php
        include('navbar.php');
    ?>
    <?if(!isset($_SESSION['userlogged'])) 
      {
      echo "Welcome" .$_SESSION['userlogged'].", this is your login page!";
      }
      else
      echo "You must be logged in to view this page."?>
</body>

提前感谢您的帮助。

首先在login.php中启动会话:

 <?php
    // Start the session
    session_start();
 ?>

然后定义您的输入值:

<?php
// define variables and set to empty values
$username = $password = "";
?>

然后你的表单本身就有行动:

<html>
    <body>
        <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post" name="login" id="login">
                        Username:
                            <br>
                        <input type="text" name="Username" value="<?php echo $username;?>" required>
                            <br><br>
                        Password:
                            <br>
                        <input type="password" name="Password" id="password" value="<?php echo $password;?>"   required>
                        <br><br>
                <input name="login" type="Submit" value="Login" id="Login">
            </form>
</body>
</html>

之后,让你的用户控制这里像这样:

与在logon.php中控制用户是否存在于数据库中相同:

if($row["cnt"] > 0)
{
    $_SESSION['logged_in'] = true;
    $_SESSION["username"] = $name;
    $_SESSION["password"]    = $password;
    header( "Location: sorganiser.php" );
}
else if($row["cnt"] == 0 and $username!="" and $password!=""){
    header( "Location: fail.php" );
} 

在sororganizer.php中,只需在页面顶部启动会话,就可以像这样使用该用户的信息:

<?php
session_start();
?>
<?php
$username = $_SESSION["username"];
$password = $_SESSION["password"];
?>

希望它能有所帮助!

尝试一下:您需要在每个将使用会话的页面顶部都有一个会话。我在首页上没有看到。

if (!isset($_SESSION['id'])){
    //if there's no session present, display this.                  
    echo "<a href='#' class=' btn btn-primary'>Login</a>";
}else{ 
    //else theres a session so diplay this.                               
    echo "<a href='#' class='btn btn-warning'>Logout</a>";
}