2015-10-20 47 views
0

我正面临一个问题,我的简单虚拟表单不会传递它的会话变量。有一个错误代码会话不会在选项卡内传递。 PHP会话

注意:未定义指数:用户名在...的login.php上线8

注意:未定义指数:密码... \ login.php中第9行

错误的用户名或密码

会话开始 的index.php

<html> 
    <head></head> 
<body> 
<?php session_start();?> 
<form action="login.php" method="POST"> 
    Username:<input type="text" name="username"> 
    Password:<input type="password" name="password"> 
    <input type="submit" value="Login"> 
</form> 
</body> 

</html> 
输入

确认将转嫁到 的login.php

<html> 
<head></head> 
<body> 
<?php 
    session_start(); 
    $user = "NULL"; 
    $password = "NULL"; 
    $user = $_REQUEST["username"]; 
    $password = $_REQUEST["password"]; 


    if($user == "ali" && $password == "123"){ 
    $_SESSION["$user"] = $user; 
    echo "Login Successful</br>"; 
    echo '<a href="logout.php">Logout</a>'; 
    } 
    else{ 
    echo "Wrong username or password</br>"; 
    echo '<a href="index.php">Back</a>'; 
    } 
    ?> 

    <p>Welcome <?php echo htmlspecialchars($user) ?></p> 


</body> 
</html> 

logout.php

<html> 
    <head></head> 
<body> 
<?php session_start();?> 
<form action="login.php" method="POST"> 
    Username:<input type="text" name="username"> 
    Password:<input type="password" name="password"> 
    <input type="submit" value="Login"> 
</form> 
</body> 

</html> 
+3

这似乎与会话没有多大关系,而是表单发布值在工作流的第二页上不可用。 – David

+1

$ _SESSION [“user”] = $ user;不是$ _SESSION [“$ user”] = $ user; – peter

+0

为什么你使用'$ _POST'而不是'$ _REQUEST'。 –

回答

1

- 您所面临的未定义指数错误,因为当你直接执行的login.php或重新加载login.php或在另一个选项卡中打开它,那时$_REQUEST是一个空数组。其实你login.php的编码是错误的,这就是为什么你越来越未定义的索引错误。

所有session_start()的 - 首先必须是前<!DOCTYPE html>

- $_SESSION["$user"]是错误的,使用$_SESSION['user']代替。

- 为什么你用$_REQUEST?你的表单方法是POST,所以使用$_POST。请参阅$_REQUEST vs $_GET and $_POST

-Session 必须在用户注销时销毁

,尤其是圆形是工作代码...

1的index.php

<html> 
    <head></head> 
<body> 
<form action="login.php" method="POST"> 
    Username:<input type="text" name="username"> 
    Password:<input type="password" name="password"> 
    <input type="submit" value="Login"> 
</form> 
</body> 

</html> 

2的login.php

<?php session_start(); ?> 

<!DOCTYPE html> 
<html> 

<head> 

</head> 

<body> 

<?php 

if(isset($_SESSION['user'])){ 
    echo 'User is already logged in.<br />'; 
    echo '<a href="logout.php">Logout</a>'; 
} 
else { 
    if(isset($_POST["username"]) && isset($_POST["password"])) { 
     if($_POST["username"] == "ali" && $_POST["password"] == "123"){ 
      $_SESSION["user"] = $_POST["username"]; 
      echo "Login Successful</br>"; 
      echo '<a href="logout.php">Logout</a>'; 
     } 
     else { 
      echo "Wrong username or password</br>"; 
      echo '<a href="index.php">Back</a>';  
     }  
    } 
} 

?> 
</body> 
</html> 

3.注销。 php

<?php 
session_start(); 
?> 
<!DOCTYPE html> 
<html> 
<body> 

<?php 
// remove all session variables 
session_unset(); 

// destroy the session 
session_destroy(); 
echo "All session variables are now removed, and the session is destroyed." 
?> 

</body> 
</html> 
+0

感谢您的反馈。在修改代码之后,会话仍然不会保存。我试过去另一个标签,它会提示错误 **注意:未定义的索引:用户名在C:\ xampp \ htdocs \ loginvalid \ login.php在第8行** **注意:未定义索引:密码在C:\ xampp \ htdocs \ loginvalid \ login.php第9行** – Ajaxcbcb

+0

@Ajaxcbcb:嗨,我正确理解你的问题。更新了答案。运行给定的代码,它的工作,让我知道您可以接受的解决方案或不... – WisdmLabs

+0

非常感谢你。它已经解决了。 – Ajaxcbcb