Adesso che ho un po' di tempo rispondo anche a andr3a e a daniele.
Trovo le vostre considerazioni validissime e se ne potrebbero fare mille altre. Quello che volevo fare era semplicemente fornire le basi per l'upload dei file.

Quando ho detto una cosa più di cento volte, di solito scrivo una pillola così devo solo postare il link. In questo caso, quando qualcuno ha problemi con l'upload si tratta spesso di questioni che riguardano proprio i fondamenti, tipo:
- hanno impostato enctype su text
- cercano il file in POST
- non sanno dove viene scaricato il file e che bisogna spostarlo
- ecc...

Quello di cui parlate invece riguarda già un livello più avanzato

-------------------------------------------------------------------------------

adesso volevo fare una piccola aggiunta a questa pillola.

A volte arrivano sollecitazioni in merito all'upload di file e successivo inserimento dei file nel database. Non voglio scatenare una guerra di religione visto che per alcuni è una cosa da aborrire mentre per altri è il meglio che si può fare.

Comunque, se dopo l'upload vogliamo inserire il file nel database anzichè salvarlo in una cartella dobbiamo procedere come segue:

Creare una struttura del database che contenga:
- il nome del file (VARCHAR)
-il contenuto binario del file (LONGTEXT o MEDIUMTEXT)
- il type (VARCHAR) potrebbe servire se ad esempio si tratta di immagini. Qualora volessimo visualizzarle dovremo indicare il tipo di file nell'header.
- il size (INT) potrebbe servire sempre nella definizione degli header

In seguito:

1. Leggere il contenuto del file con una funzione binary safe ad esempio file_get_contents().
2. Passare il contenuto per addslashes() per evitare sorprese
3. Eliminare gli eventuali spazi nel nome del file (potrebbero causare problemi).
4. Salvare il tutto nel database.

Già che c'ero ho scritto un'estensione della classe upload

Codice PHP:
class UploadToDb extends Upload
{
    protected 
$conn;
    
        protected function 
DbConnectAnSelect()
        {
            
// includere file di configurazione db
            // o impostare i parametri manualmente
            
            
$host "localhost";
            
$db "uploads";
            
$user "root";
            
$password "password";
            
            
$this->conn mysql_connect($host$user$password) OR die("connessione non riuscita");
            
mysql_select_db($db$this->conn) OR die("impossibile selezionare il database");
        }
        
        protected function 
SaveUploadFile()
        {
            
$this->DbConnectAnSelect();
            
$filename str_replace(" ""_"$this->file['name']);
            
$content addslashes(file_get_contents($this->file['tmp_name']));
            
$type $this->file['type'];
            
$size $this->file['size'];
            
            
$sql "INSERT INTO upload_file (name,size,type,content) VALUES ('$filename','$size','$type','$content')";
            
mysql_query($sql$this->conn);
        }

Come vedete riscrivo il metodo SaveUploadFile() e aggiungo un semplice metodo per la connessione al database.

Unica cosa, prestate attenzione quando istanziate la classe agli argomenti.

il primo non ha più senso ma dobbima comunque mettere qualcosa

$upload = new UploadToDb ("", "upfile");