Io eviteri una la query di select proposta.
Codice PHP:
SELECT * FROM users WHERE nick='$nick' AND mail='$mail'
In quanto, se nn hai precedentemente controllato il corretto escaping delle stringhe inserite, qualsiasi persona conosca sql injection potrebe ottenere dati oppure cancellarti in toto il database.
Ricorda sempre di controllare se le magic_quotes sono abilitate.
una cosa del tipo
Codice PHP:
$name = $_REQUEST[name] ;
if( get_magic_quotes_gpc() )
$name= stripslahes($name) ;
$conn = mysql_connect("server","user"ì,"pwd") ;
// OPPURE usa la tua funzione-classe di connessione al db
// senno la funziona usata sotto non puo' operare
$name = mysql_real_escape_string($name) ;
// E solo a questo punto inserisci la variabile nella stringa di querying sql.
Non credo ci sia molto altro da dire sul punto 2, la query e' assolutamente necessaria e va fatta con attenzione. Se fai questi controlli eliminerai tantissimi problemi su possibili iniezioni di codice sql.
Mi pare cmq di capire che trovi difficolta' al punto 4.
Credo che sia oppurtuno per te scrivere una funzione che generi un codice nuovo per la password e la salvi nel db.
Innanzi tutto dovrai fare un'update e nn una insert se la pwd e' salvata sulla stessa tabella/riga.
Puoi usare una timestamp con un piccolo random per generare la password poi magari passi tutto ad una funziona di hashing come md5 e ne estrapoli solo una porzione.
Sennò puoi lavorare con le funzioni char() ord() dei su valori generati dalla rand() per ottenere il codice che ti serve.
Le soluzioni sono le piu' svariate dipende tutto dal livello di sicurezza che vuoi tenere e da quanto vuoi smazzarti con il codice.
P.S.
La mia era una semplice osservazione sulla "pulizia del codice".
Oguno metta le parentesi come gli pare.
Ed effettivamente per chi e' poco esperto l'uso sovrabbondante di parentesi puo' essere di aiuto a capire come si suddividono le differenti istruzioni-controlli etc....