Cita: $sql = "SELECT usuario,password FROM usuarios WHERE usuario='$_POST[user]'";
¡Jamás hagas algo así sin validar el contenido del campo!
Imaginate que en el campo "user" se me ocurra escribir algo como:
' OR 1=1
¿logras ver cómo quedaría la consulta?
"SELECT usuario,password FROM usuarios WHERE usuario='' OR 1=1"
Es decir, siempre devuelve resultados.
Por otro lado, creo que el problema del usuario vacío o de cualquiera es el siguiente:
Como no encuentra resultados, $row[password] no está definida. Se puede asumir entonces que está vacía. Y si $_POST[pass] está vacía, pues
vacía == vacía
y por eso entra en el if, en vez de saltar al else.
Soluciones:
1.- comprobá que haya un resultado (y solo 1)
2.- NO incluyas en la consulta SQL el valor que te pasan del formulario. Antes de eso revisalo con una expresión regular ( ereg() ), en las faq podés encontrar algo sobre eso. si no me equivoco lo que necesitás es algo como:
ereg("[^a-zA-Z0-9]", $_POST['user'])
que devuelve verdadero si encuentra un caracter que no sea número o letra.
Saludos.