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.

Codice PHP:
if ($result && mysql_num_rows($result) > 0) {
    while ( 
$dati mysql_fetch_assoc($result) )  {
             [...] 
Metti sempre le parentesi graffe dopo gli if, che ti eviti tanti di quei mal di pancia...