Po pierwsze, mysql_real_escape_string() będzie tu lepsze od htmlspecialchars() jeśli nie bezpieczeńsze to przynajmniej czytelniejsze/poprawniejsze/adekwatniejsze.
Po drugie, nie ma sensu wrzucać hasła do zapytania a potem jeszcze raz sprawdzać czy jest identyczne, jeśli wynik nie bezie pusty, to oznacza że jest identyczne (duh).
Po trzecie, całym tym bałaganem zajmuje się (za mnie) query-builder.
Kod php:
<?php
$user = $_REQUEST['user'];
$pass = $_REQUEST['pass'];
$result = $db
->where('login', $user)
->where('password', $pass)
->limit(1)
->get('uzy')
->row_array();
if ( $result ){
$_SESSION['id'] = $result['ID'];
}
Po czwarte.
Garstka uwag do stylu Twojeg kodu:
1. Niepotrzebne nadpisujesz zmienne środowiskowe, zostaw je nienaruszone na specjalne okazje (np. zapisanie wszystkich zmiennych $_POST do pliku w celu debugowania).
2. Staraj się aby Twój kod nie ciągnał się w prawo tylko w dół. Taki kod łatwiej się czyta, bo tylko wbijasz wzrok w tuż przy lewej krawędzi ekranu i scrollujesz.
Dodatkowo taki kod dużo prościej się debubuje, bo jeśli np. tworzenie jakiegoś stringa składa sięz kilku etapów, to mając to podzielone na kilka wierszy możesz łatwo zatrzymać przetwarzanie w podejrzanym miejscu i wydrukować aktualną zawartośc strinka bez konieczności modyfikowania kodu.
Przykład:
Kod php:
<?php
$login = $_POST['login'];
$login = htmlspecialchars($login);
$passw = '';
$passw .= $_POST['password'];
$passw .= $_POST['login'];
$passw .= md5($_POST['password']);
// print_r($passw);exit;
$passw = sha1($passw);