Bonsoir.
Pour information, isset et empty ont quasiment la même fonctionnalité :
empty
Détermine si une variable est considérée comme vide.
Une variable est considérée comme vide si elle n'existe pas, ou si sa valeur équivaut à FALSE.
Sinon, à la place d'utiliser AND, tu devrais plutôt utiliser &&, voir Les opérateurs logiques, tu verras qu'il y a une différence entre les deux opérateurs.
Par contre, je ne vois pas l'intérêt d'utiliser des fonctions dans les fonctions alors que tu es dans des conditions, par exemple :
Au cas où tu ne le sache pas, ça ne modifies pas la valeur de $_POST['username'].
Il vaut mieux à la rigueur que tu fasses :