0

即使我将代码与 stackoverflow 上的其他问题进行交叉检查,我似乎也找不到代码错误。其他人能看到我犯的一些愚蠢的错误吗?这通常是一个愚蠢的错误。

<?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 错误。但我的语法是正确的。

4

1 回答 1

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;
};

?>
于 2013-04-30T14:44:48.847 回答