2013-03-03 74 views
0

我使用SQLite創建一個簡單的PHP登錄系統,當用戶發佈HTML表單時,系統將他們引導至「僅限成員頁面」,而不管他們輸入了什麼內容。這裏是我的表單處理代碼:PHP/SQLite接受不正確的後值

<?php 
    $username = $_POST["username"]; 
    $password = $_POST["password"]; 

    $database = new PDO("sqlite:database.sqlite"); 

    $result = $database -> query("SELECT COUNT (*) FROM accounts WHERE username = '$username' AND password = '$password'"); 
    if ($result > 0) 
    { 
      setcookie("session", "Cool", time()+3600); 
      header("location:index.php"); 
    } 
    else 
    { 
      echo "Failure"; 
    } 
?> 

幫助!

+0

請,請不要告訴我你存儲明文密碼。 – Terry 2013-03-03 23:40:11

+0

我有PHP加密密碼和電子郵件地址在另一個頁面。 – 2013-03-03 23:47:05

+0

醃製您的密碼可能是一個更好的主意。 – Terry 2013-03-03 23:58:14

回答

1

我覺得應該是...

if ($result->rowCount() > 0) ... 

AND:使用準備好的語句,以避免SQL注入,不uncrypted密碼儲存在你的數據庫,這是一個巨大的安全問題。

+0

感謝您的提示,但rowCount無效。 – 2013-03-03 23:31:54

+0

我很困惑...它是'$ database-> rowCount()'然後呢? – michi 2013-03-03 23:45:54

0

試試這個(你不應該需要數,只是一個簡單的邏輯語句):

$query = "SELECT * FROM accounts WHERE username = :username AND password = :password"; 
$stmt = $database->prepare($query); 
$stmt->execute(array(":username"=>$username, "password"=>$password)); 
$result = $stmt->fetch(PDO::FETCH_ASSOC); 
if($result) 
{ 
    //Success 
    setcookie("session", "Cool", time()+3600); 
    header("location:index.php"); 
} 
// Not successful. 
return null;