PHP登录脚本始终返回"登录失败"

时间:2013-06-05 18:50:01

标签: php postgresql login pdo

我必须让用户能够登录进行分配。起初,在我看来这个脚本很简单,但每次我尝试使用现有帐户登录时,它都会给我“登录失败”消息。我不知道我的错误在哪里。它是一个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()。

3 个答案:

答案 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"

可能是造成问题。