Per cominciare dovresti proteggere la query da attacchi di SQL Injection. Vedi:
http://php.html.it/guide/lezione/2986/sql-injections/
In secondo luogo, dovresti verificare che la query contenuta in $sql sia corretta, magari eseguendola con phpMyAdmin od altra console MySQL.
Infine dovresti inserire un codice di controllo sul valore restituito da mysql_query() prima di utilizzarlo in altre funzioni. Vedi gli esempi di http://www.php.net/mysql_query