2012-12-20 116 views
0

這是我的代碼,由於某種原因,它總是返回密碼不正確。我不確定我是否在某個地方忘了支架,我怎樣才能讓它更安全,因爲現在我正在使用_post功能。登錄會話問題

<?php 
    include 'config.php'; 

    session_start(); 
    session_destroy(); 
    session_start(); 

    $UserName = $_POST['UserName']; 
    $PassWord = $_POST['PassWord']; 

    if ($UserName&&$PassWord) 
    { 
    mysql_select_db("SegmentMath") or die ("Couldn't find database sorry."); 
    $query = mysql_query("SELECT * FROM Users WHERE UserName='$UserName'");  
    $numrows = mysql_num_rows($query); 

    if ($numrows!=0) 
    { 
     // code to login 
     while ($row = mysql_fetch_assoc($query)) 
     { 
     $dbUserName = $row['UserName']; 
     $dbPassWord = $row['PassWord']; 
     } 

     //check to see if they match! 
     if ($UserName==$dbUsername&&$PassWord==$dbPassWord) 
     { 
     $_SESSION['UserName']=$dbUsername; 
     $_SESSION['PassWord']=$dbPassWord; 

     echo "<p>Finished Software</p>"; 
     } 
     else 
     { 
     echo "Incorrect Password"; 
     } 
    } 
    else die("Sorry username not found!"); 
    } 
    else die("Please Enter A Valid Username And Password!"); 
?> 

所以我幾乎是積極的我做了一些愚蠢的錯誤,它讓我陷入了將近30分鐘。這個文件只是login.php,所以基本上,如果用戶在login.html頁面上輸入用戶名和密碼,它會將該數據推送到此頁Login.Php

我很困惑,爲什麼它說不正確的密碼,即使登錄是正確的,並在數據庫中。

+1

您爲什麼這樣,毀滅和頂部開始會話? o.o – tradyblix

+0

['session_destroy'](http://php.net/session_destroy)**刪除所有'$ _SESSION'數據**。你爲什麼這樣做?這是你在某個地方拾起來的某種貨物邪教複製粘貼嗎? – Charles

+0

你可以逐步調試..從頂部打印主變量$? –

回答

-1

您需要先連接到數據庫。使用mysql_connect()

另請注意,此功能正在折舊,建議使用mysqli或PDO。在上面的鏈接中有鏈接。

+0

我應該已經連接,因爲包括config.php –

+0

啊。我看到......你是否嘗試回顯你的'$ numrows'來查看你是否從數據庫中得到任何結果? – SnareChops

0

您可能在存儲密碼時使用了一些加密。因爲如果你使用md5()例如(只是一個例子,MD5是不是最好的密碼),你應該檢查是這樣的:

if ($UserName == $dbUsername && md5($PassWord) == $dbPassWord) 
{ 
2

我會說,這是更好地利用這一點,我的意思是創建查詢其找到usernamepassword

$login = mysql_query("SELECT * FROM users WHERE ID='". $UserName ."' AND PASSWORD='". md5($PassWord) ."'); 
$row=mysql_fetch_array($login); // fetch row 
if($row!=null) // if found row 
{ 
$_SESSION['UserName'] = $row['UserName']; // store in session 
$_SESSION['PassWord'] = $row['PassWord']; 
} %> 

,而不是

if (($UserName==$dbUsername)&&($PassWord==$dbPassWord)) 
{ 

$_SESSION['UserName']=$dbUsername; 
$_SESSION['PassWord']=$dbPassWord; 

echo "<p>Finished Software</p>"; 

} 
+0

'=='先於'&&'任何方式 –

1

你在你的代碼中的錯字。 PHP中的變量是區分大小寫的...

19.  while ($row = mysql_fetch_assoc($query)) 
20.   { 
21.    $dbUserName = $row['UserName']; 
22.    $dbPassWord = $row['PassWord']; 
23.   } 
24.  
25.   //check to see if they match! 
26.   if ($UserName==$dbUsername&&$PassWord==$dbPassWord) 

變量上線不匹配就行。

$dbUserName是不一樣的$dbUsername

0
if ($UserName==$dbUsername <= capitalize $dbUserName) 
{ 
    //YOUR LOGIC 
} 
+0

這就是CamelCase。 –

0
if ($UserName==$dbUsername&&$PassWord==$dbPassWord) 
     { 
     $_SESSION['UserName']=$dbUsername; 
     $_SESSION['PassWord']=$dbPassWord; 

     echo "<p>Finished Software</p>"; 
     } 
     else 
     { 
     echo "Incorrect Password"; 
     } 

1)。它在其他條件去..所以你可以重複這四個$變量給我嗎?從$ _ POST

2)卸下襬臂空間與str_replace函數

0

我認爲你錯了代碼時。會話啓動後,您不應該將會話銷燬。首先,讓session_start()開始會話;

session_start(); 

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

$query = "SELECT * FROM table_name WHERE username = '$username'"; 
$result = mysql_query($query); 
$count = mysql_num_rows($query); 
$row = mysql_fetch_assoc($result); 

if($count == 0) 
{ 
//if there is no result 
} 
$dbpassword = $row['password']; 
if($dbpassword == $password) 
{ 
//put some session here 
} 
else 
{ 
//if the password is not match 
} 

我希望這可以幫助