Dopo aver eseguito la query devi verificare quanti risultati ha recuperato, se ha raccolto 1 risultato vuol dire che il login è andato a buon fine, in qualsiasi altro caso deve dare errore, username e/o password erano errate.
Tu al momento non fai questo controllo, cerchi direttamente di caricare i record trovati e comunque lo fai nel modo sbagliato
Un login perché sia da considerare riuscito, DEVE restituire un solo record, quindi il while non serve, perché appunto dovrà eseguire il fetch solo una volta.Codice PHP:
while ($row = $stmt->fetch ())
{
$_SESSION['name']=$row["name"];
$_SESSION['login']=true;
$_SESSION['ruolo'] = $row["isAdmin"];
}
Se trova più record, il tuo codice metterà in sessione l'ultimo.
Questa situazione non si dovrebbe verificare, perché la coppia username/password dovrebbe essere univoca, nello specifico, l'username dovrebbe essere unico, ma se hai fatto male il db e la registrazione potrebbe verificarsi tale situazione.
Se tale situazione è impossibile perché hai fatto bene le cose, allora il while è ancor di più inutile.
Quindi ricapitolando:
- esegui la query
- verifichi quanti risultati ha trovato
- se non ha trovato niente o più di 1 risultato, esegui il redirect a una pagina che dice "username e/o password errati"
- se trova un risultato, esegui il fetch ed esegui il codice che hai ora