Если это работает, когда вы не хешируете пароль, похоже, что ваши пароли хранятся в базе данных в виде открытого текста - вот где я бы проверил.
Другая вещь, которая может происходить, - этоСтрока mysql_real_escape должна использоваться на другой стороне sha1, чтобы она не мешала точному вводу.
Так должно быть: mysql_real_escape_string(sha1($_POST['password']));
Это может немного изменить ситуацию.
Примечание. Хотя у sha1 в настоящее время нет известных проблем безопасности, поэтому должен быть безопасным для непосредственного размещения в базе данных без выхода mysql, кто-то однажды сказал мне всегда проверять, все ли в базу данных должнобыть брошенным или сбежавшим на случай, если в чем-то вроде sha1 или md5 обнаружена уязвимость безопасности.