Sono le 4:30 di mattina quindi non fidarti di me ma a occhio il problema è che tu fai un controllo sulle variabili GET e poi passi al POST.. anche se sull'action del form metti PHP_SELF le variabili in GET non verranno lette in quanto fai il submit di un form che ha impostato il method su "POST"..

la soluzione è inserire un campo hidden nel form chiamato 'azione' (come il parametro GET per capirci) dove gli darai il valore 'login'
codice:
<input type="hidden" value="login" name="azione">
e sostituire
codice:
if(isset($_GET['azione']) && ($_GET['azione'] == 'login')){
con
codice:
if(isset($_REQUEST['azione']) && ($_REQUEST['azione'] == 'login')){
e così dovrebbe funzionare.. sinceramente questa soluzione non mi fa impazzire, è che è "sbagliato" il concetto di base e andrebbe rivisto per migliorare il codice.. ma dato che stai imparando il php lascio a te il compito di migliorare il codice