Un po' di cose sul codice
1)
Questo
$msg = "File troppo grande";
echo "$msg";
perché non lo scrivi semplicemente così?
echo "File troppo grande";
Stessa cosa per il messaggio seguente, che te ne fai di usare una variabile?
2)
if ($error == "false" or $nome_file=="")
E' veamente osceno, in caso non ci sia un file il codice ne controlla comunque la correttezza lavorando per niente... non c'è un file da controllare.
Prima di $MAX_FILE_SIZE metti
if($_FILES['file']['name'] != "") {
e chiudi l'if dove necessario, non avendo tutto il codice non lo so dove va chiuso, in questo modo puoi togliere il tuo controllo e risparmiare allo script di fare lavoro inutile, si farà tutto ciò che serve per l'upload, solo se c'è un file.
3)
Usa $_FILES e non $_HTTP_POST_FILES
4)
Le assegnazioni $nome_file = $_FILES['file']['...'] e seguenti non servono, puoi usare direttamente le variabili $_FILES, come fai tu è solo uno spreco di memoria.
5)
Controlla l'avvenuto upload con is_uploaded_file() e invece di copy() usa move_uploaded_file()
Per quanto riguarda il problema della query:
Verifica che mysql_query() ritorni true o false, se ritorna false metti un
echo mysql_error();
per quanto riguarda l'upload del file:
dopo aver verificato l'upload con is_uploaded_file() fatti stampare un messaggio d'errore se ritorna false, così si capisce se proprio non viene caricato o se il problme nasce dopo
A move_uploaded_file() non metterci la @ davanti, così se va in errore te lo dice.