Il fatto è che hai tutto nello stesso file.
Quando apri la pagina, tutto il codice viene eseguito, quindi ovviamente anche il controllo sul db, che viene effettuato con dati vuoti, non trova niente e ti dice che il login è andato male.
Devi mettere una struttura di controllo che verifichi se il form è stato inviato oppure se è la prima volta che accedi alla pagina.
Se è la prima volta che accedi deve mostrare il form, se invece è stata ricaricata dopo aver inviato il form deve tentare il login.
Codice PHP:
// se il form non è stato compilato
if ( ! isset( $_POST['username'] ) )
{
// mostra il form
}
else // il form è stato inviato
{
// tenta il login
}