2013-04-30 79 views
0

我似乎無法找到與我的代碼的錯誤,即使我交叉檢查與其他問題在stackoverflow。別人能看到我犯的一些愚蠢的錯誤嗎?這通常是一個愚蠢的錯誤。sqlite php登錄未運行

<?php 
session_start(); 

$user = $_REQUEST['myusername'] ; 
$pass = $_REQUEST['mypassword'] ; 
$salt = "TheSaltGoesHere"; 
$password = md5($salt.$pass); 

$db = new PDO("sqlite:/resources/database.db"); 
$result = $db->query("SELECT COUNT(*) AS count FROM clients WHERE user = '$user' AND pass = '$password'"); 
if ($result->fetchColumn() > 0) { 
$_SESSION['loggedin'] = true; 
echo "It worked"; 
}; 

if(!$_SESSION['loggedin']){ 
echo "It failed"; 
exit; 
}; 



?> 

我得到一個普通的500錯誤。但我的語法是正確的。

+1

您正在使用PDO,但未使用準備好的查詢。你正在做的事情是非常不安全的,如果你還沒有,你**將被黑客攻擊。使用準備好的查詢完全避免SQL注入攻擊。另外,不要使用MD5進行密碼散列。有更好的算法可用,如sha1。此外,由於您沒有發佈實際發生的錯誤,因此很難爲您提供幫助。去檢查你的錯誤日誌中的問題的細節。 – Brad 2013-04-30 03:30:39

回答

0

您有幾個問題,所以我發佈了一個小的重寫。這使用準備好的語句。至於MD5,那麼我想這取決於你的用戶基礎,無論如何都使用鹽。我放入一個調試開關,以便您可以看到一些信息,如果它不能立即與您的代碼一起使用。

<?php 
session_start(); 
$user = $_REQUEST['myusername'] ; 
$pass = $_REQUEST['mypassword'] ; 
$salt = "ysgf8o3w74gf"; 
$password = md5($salt.$pass); 
$debug = true; 

try { 
    $db = new PDO('sqlite:database.db'); 
    if($debug) $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 
catch(PDOException $e) { 
    if($debug) echo 'Connection failed: ' . $e->getMessage(); 
    die(); 
} 

if($debug) $db->query('CREATE TABLE IF NOT EXISTS clients (user TEXT, pass TEXT);'); 

$statement = $db->prepare(' 
SELECT COUNT(*) AS count FROM clients WHERE user = :user AND pass = :pass 
'); 
$statement->bindValue(':user', $user); 
$statement->bindValue(':pass', $pass); 
$statement->execute(); 

$_SESSION['loggedin'] = false; 

if ($statement->fetchColumn() > 0) { 
$_SESSION['loggedin'] = true; 
echo "It worked"; 
}; 

if(!$_SESSION['loggedin']){ 
echo "It failed"; 
exit; 
}; 

?>