Я должен предоставить пользователям возможность входа в систему для задания. Сначала мне показалось, что этот скрипт был достаточно прост для работы, но каждый раз, когда я пытаюсь войти в существующую учетную запись, он дает мне сообщение «с ошибкой входа». Я не знаю, где моя ошибка. Это база данных PostgreSQL, я приложу ее изображение ниже.PHP login script всегда возвращает «login failed»
<?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
. Кроме того, я уверен, что правильные переменные передаются из формы.
EDIT: после использования var_dump ($ result), как советовал Kingalligator, кажется, что $ result действительно является NULL, таким образом, пустым. Я попробую использовать fetch() вместо pg_query().
Обратите внимание, что 'ElseIf ($ Count = -1)' является назначение. Предназначено ли это для сравнения? Кроме того, 'stripslashes' и' mysql_real_escape_string' не нужны, поскольку они параметризуются. – Caramiriel
Увидит небольшой промах. Однако это ничего не меняет. Я также уже пробовал комментировать защиту sql, и это тоже не сработало. –
@Caramiriel опубликуйте его как ответ, который вы указали на главную ошибку. –