Allora ci sono diversi problemi.

Prima di tutto hai scritto 'or die ("Query non riuscita")' sulla riga sbagliata (quella in cui assegni la query ad una variabile e non quella in cui la esegui).

Poi la logica e' abbastanza incomprensibile. Quello script controlla che esistano login e password, ma non che siano abbinati. Una volta trovato un utente cerca per tutta la tabella la password, e la trova anche se e' assegnata ad un altro utente. Inoltre il nome utente e' unico, ma le password no, quindi potrebbero esserci piu' utenti con la stessa password. Non ha neanche senso usare un ciclo sul risultato della query: di utente "xxxx" ce n'e' uno solo, quindi la query ritornera' al massimo un risultato, non serve un while.

La query corretta e' "SELECT * FROM utente WHERE login = '$login' AND password = '$password'". Dopo questa query ti e' sufficiente controllare quanti risultati hai ottenuto (0 login fallito, 1 login corretto) con mysql_num_rows().

Il tutto tralasciando questioni di sicurezza come utilizzo di dati ricevuti in POST senza averli filtrati, e password salvate in chiaro.