Hello,
A mon avis c'est ta condition qui foire :
if(!empty($_POST) && !empty($_POST['username']) && !empty($_POST['password']))
Je pense que le empty($_POST) (sachant que post est un tableau) renvoi false. Donc si tu veux regarder si tu as des données en POST, préfère peut être
if(isset($_POST) && count($_POST) && !empty($_POST['username']) && !empty($_POST['password']))
Je me trompe peut être j'ai pas essayé !
Ensuite, quand tu bloques, essai de placer a certain endroit stratégique par exemple :
die('je rentre dans la condition');
//Ou alors
else{
die('je ne rentre pas, je suis dans le else');
}
Une dernière chose :
$req = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$req->execute(['username' => $_POST['username']]);
Ne devrait pas être plutôt :
$req = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$req->execute([':username' => $_POST['username']]);