2013-06-13 59 views
1

我爲用戶創建了一個數據庫和一個用戶名和密碼錶。我想用簡單的HTMLPHP創建一個登錄頁面,但是我找不到任何解決方案來解決我的PHP代碼問題。所以有一個登錄頁面(index.html)Chklogin.phplogin_success.php. 當我鍵入我的用戶名和密碼已插入到用戶表之前,它不會顯示login_success頁面。使用PHP和SESSION登錄頁面

這裏是我的代碼Chklogin.php:

<?php 

$host="localhost"; // Host name 
$username="root"; // username 
$password="root"; // password 
$db_name="TA"; // Database name 
$tbl_name="user"; // Table name 

mysql_connect("$host", "$username", "$password"); 
mysql_select_db("$db_name"); 


$myusername=mysql_real_escape_string($_POST['username']); 
$mypassword=mysql_real_escape_string($_POST['password']); 

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 
$count=mysql_num_rows($result); 
if($count==1){ 
    // Register $myusername, $mypassword and redirect to file "login_success.php" 
    session_start(); 
    $_SESSION['username'] = $myusername; 
    $_SESSION['password'] = $mypassword; 
    header("location: login_success.php"); 
} 
    else { 
     echo "Wrong Username or Password"; 
} 

?> 

與代碼login_success.php:

<?php 
session_start(); 

if(!$_SESSION['username']){ 
    header("Location: index.html"); 
    exit; 
} 
echo 'Welcome, '.$_SESSION['username']; 
header("Location: student-page.html"); 
?> 
+0

你是否在數據庫中存儲純文本。 –

+2

請不要使用'mysql_ *'功能。他們現在被棄用!相反,請使用http://php.net/manual/en/book.mysqli.php或http://php.net/manual/en/book.pdo.php –

+0

哪裏是數據放入數據庫,你的數據庫結構是什麼,在那裏有什麼數據 – Anigel

回答

3
  1. 添加AND username != '' AND username IS NOT NULL LIMIT 1到您的SQL語句。否則某些人在某些情況下可能無法使用正確的憑據登錄

  2. session_start()header()需要被之前的所有投入echoprint等輸出(也blankspaces)。爲什麼?會話通常以瀏覽器的Cookie開頭,Cookie在頭部發送。頭部需要在實際有效載荷之前去。

  3. 只檢查會話內是否存在用戶名,檢查整個登錄憑證是否正確。某些場次仍然保存在地址如果有人也許能操縱這些

  4. exit;header()之後 - 不是所有客戶端按照標題信息和你的腳本可能會繼續導致奇怪的效果在某些情況下

  5. 進行調試,把error_reporting(E_ALL);ini_set('display_errors', true);一切

1

東西的頂部,你需要檢查

1. 
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
echo $sql; // Because you have to be sure the query is correct 


2. 
$count=mysql_num_rows($result); 
echo $count; // Because the number can be > 1 
or add LIMIT 1 to the query 

3. 
if($count==1){ 
echo 'ok'; // to see if everything is okay 
} 

4. If all 3 of the above are True then check the path to this file 
header("location: login_success.php"); 
+0

我試着添加回顯函數,但是登錄的時候會顯示一個空白頁面。它不顯示「錯誤的用戶名或密碼」或NULL。 –

+0

顯示來自「echo $ sql;」的結果 – grape1