前往另一个页面时,PHP会话无法识别变量

时间:2018-04-20 04:19:37

标签: php mysql session login get

所以我正在使用PHP和使用MySQL数据库进行登录 - 成功登录页面。我的代码成功检查了用户名和密码,只允许我在正确的情况下前往下一页。

但是,我无法在成功登录页面上打印出用户名。所以我不确定我的会话是否正常运行。

的login.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>

SuccessfulLogin.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>

3 个答案:

答案 0 :(得分:1)

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

更改

=IF(B1="","Blank",IF(B1<100,A1&"000"&B1,IF(B1<1000,A1&"00"&B1,IF(B1<10000,A1&"0"&B1,"Check"))))

使用

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

答案 1 :(得分:0)

您正在使用$ _GET [“Username”],在此示例中为空,然后将$ _SESSION [“Username”]设置为空变量。

这也是一种非常奇怪的用户身份验证方式。

答案 2 :(得分:0)

更改此行代码

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

分为:

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

Read more about PHP session here