non entra nell'else perché non basta verificare se $result non ha prodotto errori (come fai tu) per sapere se sono stati restituiti dei risultati. Devi verificare il numero di righe contenute nel resultset.
Metti sempre le parentesi graffe dopo gli if, che ti eviti tanti di quei mal di pancia...Codice PHP:
if ($result && mysql_num_rows($result) > 0) {
while ( $dati = mysql_fetch_assoc($result) ) {
[...]
![]()