2013-04-30 80 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; 
}; 

?>