php会话在指向另一个页面时无法识别变量

cgfeq70w  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(258)

所以我用php和mysql数据库做了一个登录成功的登录页面。我的代码成功地检查了用户名和密码,并且只允许我在正确后进入下一页。
但是,我无法在成功登录页面上打印用户名。所以我不确定我的会话是否正常运行。
登录.php

<!DOCTYPE HTML>
<html>
<?php 
session_start();
?>
<head>
<title>Login</title>
</head>
<body>

<!--<form action ="SuccessfulLogin.php" method = "get"> --> // If I put this in my code, the whole program stops checking Username and Password, and just put me to the next page
<?php
//define variables and set to empty values
 $nameErr = $loginErr = "";
 $Username = $website = $Password = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
     if (empty($_POST["Username"])) {
        $nameErr = "Name is required";
      } else {
        $Username = test_input($_POST["Username"]);  
      }

      if (empty($_POST["Password"])) {
        $passErr = "Password is required";
      } else {
        $Password = test_input($_POST["Password"]); 
      }
    //continues to target page if all validation is passed
    if ( $unameErr ==""&& $passErr ==""){
        // check if exists in database
        $dbc=mysqli_connect('localhost','testuser','password','Project')
        or die("Could not Connect!\n");
        $hashpass=hash('sha256',$Password);
        $sql="SELECT * from Members WHERE Username ='$Username' AND Password='$hashpass';";
        $result =mysqli_Query($dbc,$sql) or die (" Error querying database");
        $a=mysqli_num_rows($result);

        if ($a===0){
            $loginErr="Invalid username or password";
        }else{ 
            $_SESSION["Username"]=$Username;
            header('Location: /SuccessfulLogin.php');
        }
    }
}

   // clears spaces etc to prep data for testing
function test_input($data){
    $data=trim ($data); // gets rid of extra spaces befor and after
    $data=stripslashes($data); //gets rid of any slashes
    $data=htmlspecialchars($data); //converts any symbols usch as < and > to special characters
    return $data;
}

?>

<h2 style="color:yellow" align="center"> Login </h2>

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" align="center" style="color:#40ff00">

 User Name: <input type="text" name="Username" value="<?php echo $Username;?>"/>
<span class="error">* <?php echo $unameErr;?></span>
<br/><br/>
Password:
<input type="text" name="Password" value=""/>
<span class="error">* <?php echo $passErr;?></span>
<br/><br/>
<span class="error">* <?php echo $loginErr;?></span>

<input type="submit" name="submit" value="Login"/> 
</form>

<!--</form>--> // closing tag of form action SuccessfulLogin.php
</html>

成功登录.php

<!doctype html>
<html>
<?php
session_start();
$Username=$_GET['Username'];
$_SESSION['Username']=$Username;
?>
<head>

    <meta charset="utf-8">
    <title>Login Form</title>
    <link rel="stylesheet" href="RegisterLogin.css">
</head>

<body>

<!--<form action ="MemberMenu.php" method = "get">-->

    <h2><?php echo "User $Username LOGGED IN"; ?></h2> // Doesn't print out the $Username

    <p align="center"> <a href="MemberMenu.php"> Click here to be redirected to the menu page </a> </p>

<!--</form>-->
</footer>   
</body>
</html>
z0qdvdin

z0qdvdin1#

您需要检查会话是否已设置。
改变

<?php
session_start();
$Username=$_GET['Username'];
$_SESSION['Username']=$Username;
?>

具有

<?php
session_start();
if (isset($_SESSION['Username'])) {
    $Username=$_SESSION['Username'];
    echo $Username;
}
?>
brqmpdu1

brqmpdu12#

更改这行代码

<?php
session_start();
$Username=$_SESSION['Username'];
$_SESSION['Username']=$Username;
?>

分为:

<?php
session_start();
$Username=$_SESSION['Username'];
?>

在这里阅读更多关于php会话的信息

vsdwdz23

vsdwdz233#

在本例中,您使用的$\u get[“username”]为空,然后将$\u session[“username”]设置为空变量。
这也是一种非常奇怪的用户身份验证方法。

相关问题