Innanzi tutto, direi che la logica della query non mi sembra esatta.
Ma andiamo per gradi.
Come prima cosa, fatti restituire un eventuale errore da MySQL.
Codice PHP:
$rslt_login=mysql_query($query_login)
OR DIE("Errore Numero: ".mysql_errno()." - Descrizione: ".mysql_error());
echo "Query OK"; exit;
L'ultima riga del codice ti serve solo in questa fase di debug per bloccare lo script oppure per ricevere il messaggio di OK.
Se con questo barba-trucco lo script non va in loop, l'errore è successivo (come sospetto).
Passando poi alla logica, posso sollevarti un paio di quesiti.
Innanzi tutto di ottimizzazione della query.
Suppongo che per ogni utente registrato nel DB (quindi per ognuno di quelli per cui esiste una coppia nome utente/password) esista un solo rigo del DB.
Quindi non ti serve né fare il SELECT * né il fetching di risultati inutili ai fini del login.
Ti basta andare a contare quanti righi sono presenti nel DB per quella coppia di valori.
Se il valore è 0, vuol dire che quella coppia nome_utente/password non è inserita nel DB quindi che l'utente non esiste per il sistema.
Se il valore è 1, vuol dire che l'utente ha inserito correttamente le proprie credenziali, se maggiore di 1 vuol dire che ci sono più utenti con lo stesso nome e con la stessa password (quindi che c'è qualcosa che non va).
Non so come sia strutturata la tabella degli utenti, ma facendo l'ipotesi che sia del tipo, ID - UTENTE - PASSWORD, io farei una query del genere.
Codice PHP:
$sql = "SELECT id FROM uffici WHERE login = '$ufficio' AND password = '$passwd' ";
$query = mysql_query($sql)
OR DIE("Errore Numero: ".mysql_errno()." - Descrizione: ".mysql_error());
$num = mysql_num_rows($query);
switch($num) {
case 0:
echo "Nome utente o password errati o inesistenti";
break;
case 1:
echo "login ok";
break;
case ($num > 1):
echo "Ci deve essere qualche errore";
break;
}
Naturalmente, al posto delle echo che ho scritto io, metti il codice che serve a te.
Nel CASE 1 vai ad inserire il codice per inserire la variabile nella sessione e quindi per procedere al redirect.
Qui voglio aprire un'altra parentesi.
Codice PHP:
if(!strlen($row[0]))
{
//Effettuo il login
$_SESSION['auth'] = $row[0];
header('location:index.php');
}
//Libero la memoria
mysql_free_result($result);
Con questo codice istanzi una variabile di sessione.
Ma il session_start()????
Altre considerazioni, poi, si possono fare sul fatto che non ci sia alcun filtraggio degli input, né che la password sia salvata con un qualche sistema di crittazione.... ma come prima cosa, fai in modo che lo script funzioni così com'è, poi implementa tutti i controlli anti-hacking del caso!