2015-10-20 66 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