Я думаю, что проблема в том, что в первом случае вы каждый раз посылаете 401 статус, независимо от того, ввёл ли уже пользователь правильные данные или нет. Попробуйте обернуть это во что-то вроде:
$authenticated = false;
if (isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
// ищем пользователя в базе
// выставляем $authenticated в true/false в зависимости от того, нашёлся ли пользователь.
}
if ($authenticated) {
// показываем страницу аутентифицированному пользователю
} else {
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate:Basic realm="petrocks"');
echo 'Представься, мразь', PHP_EOL;
}