我必须让用户能够登录进行分配。起初,在我看来这个脚本很简单,但每次我尝试使用现有帐户登录时,它都会给我“登录失败”消息。我不知道我的错误在哪里。它是一个PostgreSQL数据库,我将在下面附上它的图像。
<?php
require 'databaseaccess.php';
try {
$conn = new PDO('pgsql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USERNAME,DB_PASSWORD);
} catch (PDOException $e) {
print "Error: " . $e->getMessage() . "\n";
phpinfo();
die();
}
$username = $_POST['username'];
$password = $_POST['password'];
$tablename = "users";
// sql-injection counter
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$qry = $conn->prepare("SELECT * FROM $tablename WHERE userid = :username and userpass = :password");
$qry->bindParam(':username', $username, PDO::PARAM_STR, 16);
$qry->bindParam(':password', $password, PDO::PARAM_STR, 16);
$qry->execute();
$result = pg_query($qry);
$count = pg_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if ($count == 1) {
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $username;
header("location:logingelukt.php");
} elseif ($count = -1) {
echo "there has been an error";
} else{
print $count;
echo "login failed";
}
?>
我没有连接到数据库的问题,所以这不是问题,只是它始终将$count
视为零以外的其他内容。另一个奇怪的是print $count
命令不输出任何内容。我使用我在页面外部使用postgresql创建的帐户,这只是admin:admin
。此外,我确信正确的变量将从表单传递。
编辑:使用var_dump($ result)后,正如kingalligator所建议的那样,$ result的结果似乎是空的,因此是空的。我将尝试使用fetch()而不是pg_query()。
答案 0 :(得分:1)
我认为问题在于你正在混合PDO和pg_函数。
替换:
$result = pg_query($qry);
$count = pg_num_rows($result);
使用:
$result = $qry->fetchAll();
$count = count($result);
PDO函数参考可在此处找到:http://www.php.net/manual/en/class.pdostatement.php
答案 1 :(得分:0)
您确认自己确实从查询中返回了数据吗?试试这个:
var_dump($result);
确保从查询中返回数据。您仍然可以成功连接到数据库,但有一个不返回任何内容的查询。
答案 2 :(得分:0)
您可能应该在WHERE子句中检查列userid。我不知道表格列,但奇怪的是'userid'具有用户名:
"SELECT * FROM $tablename WHERE userid = :username and userpass = :password"
可能是造成问题。