No es necesario usa ajax, aunque es mejor, ya que tendrías el código separado (el formulario del que valida al usuario), pero puedes juntar los códigos y mostrar el error donde es necesario, ejemplo...
Código PHP:
Ver original<?php
//ver si hay error, si no se envia el formulario, no hay obviamente error alguno
$error = false;
//verificamos que se envie el formulario
if (isset($_POST['user'])) { //si se envio verificamos el usuario o contraseña
if ($_POST['user'] != 'usuario' || $_POST['pass'] != 123) {
$error = true;
}
}
?>
<html>
<head>
<title>Prueba</title>
</head>
<body>
<?php
//Verificamos si hay algún error
if ($error) {
echo '<p>Error, el usuario o contraseña es erroneo</p>';
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELFT']; ?>">
<input type="text" name="user" />
<input type="password" name="pass" />
<input type="submit" value="Login" />
</form>
</body>
</html>
Como puedes ver, el error se muestra en el mismo formulario cuando se envia, por lo tanto no es necesario usar Ajax, ajax no es obligatorio, es solo "necesario" cuando no quieres hacer un "cambio" de página, o cargar datos dinamicamente...