2013-08-27 43 views
0

我爲一個學校作業寫了一些簡單的登錄腳本。我需要讓用戶登錄將他們重定向到主頁面,並在主頁面上顯示他們的用戶名。我一直在按照我在網上找到的說明進行操作,但用戶登錄後,用戶名並未顯示在主頁面中。有人可以看看我的PHP代碼,並告訴我如何解決這個問題?謝謝!用戶名怎麼沒有顯示?

這裏是我的主要PHP:

<?php 
    session_start(); 
    echo "You are logged in as " .$_SESSION['username']; 
    echo "<p><a href=\"logout.php\">Click here to logout</a></p>"; 


    //Turn on error reporting 
    ini_set('display_errors', 'On'); 
    //Connects to the database 
    $mysqli = new mysqli("abc", "edf","xyz", "123"); 
    if($mysqli->connect_errno){ 
     echo "Connection error: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
    } 
?> 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head> 
    <title>Test</title> 
    <meta charset="UTF-8"> 
    <style type="text/css"> 
     body {font-family:sans-serif;} 
     h1 {color: #0000FF;text-align: center;} 
     .fieldset-auto-width {display: inline-block;} 
    </style> 
</head> 
<body> 
    <div id="header" style="background-color:#FFA500;"> 
     <h1>Restaurant Review</h1> 
    </div> 
     //DO SOMETHING HERE 
    <div id="content"> 
    <form method="post" action="addreview.php">  
    </div> 
    </form> 
</body> 
</html> 

這裏是我的登錄PHP

<?php 
    ob_start(); 

    $username = $_POST['username']; 
    $password = $_POST['password']; 


    //Turn on error reporting 
    ini_set('display_errors', 'On'); 
    //Connects to the database 
    $mysqli = new mysqli("abc", "edf","xyz", "123"); 
    if($mysqli->connect_errno){ 
     echo "Connection error " . $mysqli->connect_errno . " " . $mysqli->connect_error; 
    } 

    $username = mysqli_real_escape_string($mysqli, $username); 
    $query = "SELECT password, salt FROM member WHERE username = '$username';"; 

    $result = mysqli_query($mysqli, $query); 

    // User not found. So, redirect to login_form again. 
    if (mysqli_num_rows($result) == 0) 
    { 
     header('Location: login.html'); 
    } 

    $userData = mysqli_fetch_array($result, MYSQL_ASSOC); 
    $hash = hash('cs494', $userData['salt'] . hash('cs494', $password)); 

    //Incorrect password. Redirect to login form again 
    if ($hash != $userData['password']) 
    { 
     header('Location: login.html'); 
    }else { 
    //redirect to main page after successful login 
     session_start(); 
     $_SESSION['username'] = $username; 
     header('Location: main.php'); 
    } 


?> 
+0

這需要基本調試。你沒有捕獲查詢錯誤,使用'mysql_error()'來查看是否有失敗。有關詳細信息,請參閱mysql_query()上的手冊:http://php.net/mysql_query還注意到mysql庫已被棄用 –

回答

1

您是echo -ing的HTML文檔之外,它可能是在頁面上,你不能看見。如果您單擊視圖>來源,您可能會看到它在<!DOCTYPE>聲明之前打印在文檔的頂部。

相反的:

echo "You are logged in as " .$_SESSION['username']; 
echo "<p><a href=\"logout.php\">Click here to logout</a></p>"; 
<!DOCTYPE html> 
<html>...</html> 

你應該將回聲裏面的文件,如:

<!DOCTYPE html> 
<html> 
<head>...</head> 
<body> 
<?php 
    echo "You are logged in as " .$_SESSION['username']; 
    echo "<p><a href=\"logout.php\">Click here to logout</a></p>"; 
?> 
... 
</body> 
</html> 
+0

感謝您的提示。我改變了這一點,但我收到了以下消息:「未定義變量:_SESSION在.../main.php第41行」。 – user2203774

+0

然後你需要檢查你的條件語句:'if($ hash!= $ userData ['password'])''因爲它可能一直失敗,所以'$ _SESSION ['username']'變量沒有得到組。 – Ozzy

+0

謝謝。你是對的。我不認爲我的條件聲明工作正常。我不知道哪裏出了問題。這是我的第一個PHP項目,但我會研究它。 – user2203774