codice:
$dati=mysql_db_query("$sql_db",$query_string);
while ($row = mysql_fetch_array ($dati)){
dovresti sempre inserire un controllo quando esegui delle query. Non è detto che vadano a buon fine.
Infatti "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource" significa che hai passato alla funzione mysql_fetch_array() una risorsa non valida. Nel tuo caso probabilmente si tratta di un false ritornato dalla funzione mysql_db_query() dopo aver fallito la query.

Ti do uno spunto per migliorare il codice e capire dove sta l'errore.

codice:
$dati=mysql_db_query("$sql_db",$query_string);
if($dati===false) trigger_error("Errore SQL
".mysql_error(),E_USER_ERROR);
Inoltre non ti serve invocare mysql_free_result a meno che tu non utilizzi un tipo particolare di query ed in particolari situazioni. Cmq in questo caso non serve.