Пароль никогда не работает в системе входа в PHP

Я пытаюсь создать область членов PHP на моем веб-сервере, который имеет хэшированные и соленые пароли. Я зарегистрировал учетную запись и проверил базу данных – пользователь создан, как и ожидалось, – все казалось прекрасным. Проблема заключается в том, что всякий раз, когда я пытаюсь войти в нее, говорит, что логин неверен (имя пользователя или пароль). Конечно, это делается в тестовой области, и имя пользователя и пароль, которые я зарегистрировал, должны работать, но это не так.

auth.php: должен аутентифицировать пользователя и создать сеанс, если данные действительны // логин никогда не работает

<?php session_start(); $username = $_POST['username']; $password = $_POST['password']; if (strlen($username)<3 || strlen($password)<3) { header('Location: log_in.php5?error=1'); die(); } $username = mysql_real_escape_string($username); function validateUser() { session_regenerate_id (); $_SESSION['valid'] = 1; $_SESSION['userid'] = $username; } include "../db_login.php5"; mysql_select_db("DB_NAME", $con); $query = "SELECT password, salt FROM users WHERE username = '" . $username . "';"; $result = mysql_query($query); $userData = mysql_fetch_assoc($result); $count = mysql_num_rows($userData); if ($count < 1) { header('Location: log_in.php5?error=1'); die(); } $salt = ""; $hashed_pass = ""; for ($x=0; $x<1; $x++) { $salt = $userData['salt']; $hashed_pass = $userData['password']; } $hash = hash('sha256', $salt . hash('sha256', $password)); mysql_close($con); if ($hash != $hashed_pass) { header('Location: log_in.php5?error=1'); die(); } else { validateUser(); } header('Location: members.php5'); ?> 

register.php: следует взять имя пользователя, хешировать пароль с солью, хранить все 3 в DB // работает

 <?php //retrieve our data from POST $username = $_POST['username']; $pass1 = $_POST['pass1']; $pass2 = $_POST['pass2']; if($pass1 != $pass2) header('Location: sign_up.php5'); if(strlen($username) > 30) header('Location: sign_up.php5'); $hash = hash('sha256', $pass1); function createSalt(){ $string = md5(uniqid(rand(), true)); return substr($string, 0, 3); } $salt = createSalt(); $hash = hash('sha256', $salt . $hash); include "../db_register.php5"; mysql_select_db("DB_NAME", $con); //sanitize username $username = mysql_real_escape_string($username); $query = "INSERT INTO users (username, password, salt) VALUES ( '$username' , '$hash' , '$salt' );"; mysql_query($query); mysql_close($con); header('Location: log_in.php5'); ?> 

Файл login.php представляет собой простую форму, которая помещает данные в auth.php; файл sign_up.php также является простой формой, которая помещает данные пользователя в register.php.

Что не так с моим кодом, что он не позволит мне войти?

РЕДАКТИРОВАТЬ:

Итак, я сузил проблему, поэтому переменную $ username, которая кажется пустым с самого начала?

вывод:

 Count: User: Query: SELECT * FROM `users` WHERE `username`=''; 

код для вывода:

 $query = "SELECT * FROM `users` WHERE `username`='".$username."';"; $result = mysql_query($query); $userData = mysql_fetch_assoc($result); $count = mysql_num_rows($userData); if ($count < 1) { echo "Count: ".$count."<BR/>" . "User: " .$username ."<BR/>" . "Query: " .$query; //header('Location: log_in.php5?error=1,count='.$count.'user='.$username); //die(); } 

$ count и $ username не печатаются ни в адресе, ни в sql-запросе

EDIT 2:

 *Jared* eventually found the problems which were two in number: 1) $username = mysql_real_escape_string($username); <-- required a db connection $con in my case 2) $count = mysql_num_rows($userData); <-- required to pass the $result instead. 

Всем спасибо!

Что с этой частью?

 for ($x=0; $x<1; $x++) { $salt = $userData['salt']; $hashed_pass = $userData['password']; } 

Сделайте var_dump $userData .

РЕДАКТИРОВАТЬ

 function validateUser($username) { session_regenerate_id (); $_SESSION['valid'] = 1; $_SESSION['userid'] = $username; } 

и около дна:

 if ($hash != $hashed_pass) { header('Location: log_in.php5?error=1'); die(); } else { validateUser($username); }