Моя проблема в том, что когда я пытаюсь войти в систему, мой скрипт переходит прямо в остальную часть моего цикла.Я попытался вставить операторы printf для отладки и обнаружил хэширование моих паролей в паролях со значениями в базе данных.
<?php
//include_once './bin/configDb.php';
//MySQL connection variables
$dbhost = 'localhost';
$dbname = 'ideabank';
$dbuser = 'xxx';
$dbpass = 'xxx';
$table = 'members';
// Connect to server and select databse.
//include_once './bin/connectDb.php';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname, $conn);
// username and password sent from form, cleanout, esacpe string against sqlinj.
$username = mysql_real_escape_string($_POST['username']);
$password = hash('sha512', $_POST['password']);
printf("$username \n");
printf("$password \n");
$sql = "SELECT * FROM $table WHERE username = '$username' AND password = '$password'
";
$result=mysql_query($sql);
//$result = mysql_query("SELECT * FROM $table WHERE username = '$username' AND password = '$password'
//");
// Replace counting function based on database you are using.
$count=mysql_num_rows($result);
// If result matched $username and $password, table row must be 1 row
if($count==1){
// Register $username, $password and redirect to file "login_success.php"
session_register("username");
session_register("password");
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
exit ()
?>
моя база данных MYSQL выглядит так:
CREATE TABLE IF NOT EXISTS `members` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) NOT NULL,
`password` varchar(256) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
Затем я добавил это, чтобы получить больше сообщений об ошибках
var_dump($count);
И также экспериментировал с моей строкой запроса
$sql = "SELECT * FROM $table WHERE username = '$username'";
, которая дала мне это значение
$ sqlint(0)
Таким образом, мой запрос ничего не возвращает.
Поэтому я изменил запрос sql, удалив переменную $ table с точным именем таблицы "members"
Иэто дало мне новую ошибку:
$sql Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in
/var/www/ideabank/checklogin.php on line 35 Call Stack: 0.0002 657184 1. {main}() /var/www/ideabank/checklogin.php:0 0.0006 660584 2. mysql_num_rows() /var/www/ideabank /checklogin.php:35 NULL
и строка 35 - это мой if ($ count == 1)
. Итак, я проверил простой запрос к базе данных
SELECT * From members
В результате были показаны строки 0 - 5 (всего 6, запрос занял 0,0004 секунды)
Хорошо, поэтому я изменил запрос снова
$sql = "SELECT * FROM members WHERE password = '$password'";
результат:
$ sqlint (2)
Это правильно, так как у меня две учетные записи с одним и тем же паролем.
Итак, я сделал еще один запрос
$sql = "SELECT * FROM members WHERE username = '$username'";
Что имело бы смысл, поскольку имя пользователя УНИКАЛЬНО
result:
$ sql Предупреждение: mysql_num_rows () ожидаетпараметр 1 будет ресурсом, логическое значение указано в /var/www/ideabank/checklogin.php в строке 35 Стек вызовов: 0.0002 653256 1. {main} () /var/www/ideabank/checklogin.php:0 0.0007 656528 2.mysql_num_rows () /var/www/ideabank/checklogin.php:35 NULL
Поскольку предупреждение указывает на наличие ошибки в строке 35, верните NULL!
Строка, которая создает предупреждение,мой счетчик, который служит для того, чтобы обеспечить отображение только одной записи.
Моя первоначальная идея была
, если результат соответствует $ username & $ password, тогда строка должна быть от == до 1
Но он выдает ту же ошибку SQL
Теперь я попытался изменить счетчик и использовать вместо него mysql_num_rows
if (
mysql_num_rows($result))
{
session_start();
...
eller
if (
mysql_num_rows($result) == 1)
{
session_start();
...
Но он все равно выдает предупреждение SQL.