ok, ora sono domande a cui si può rispondere

Le immagini puoi gestirle in moltissimi modi ma ti sconsiglio di metterle sul database, è molto più comodo tenerle su DISCO

Personalmente, quello che faccio, è:
- verifico che il file sia stato uploadato tramite php (www.php.net/is_uploaded_file);
- verifico che l'estensione del nome del file sia di un tipo supportato (jpeg, jpg, png, bmp, gif);
- sposto il file in una cartella temporanea del sito (dipende dalla configurazione dell'hoster, però spesso i file uploadati non sono direttamente accessibili per svolgere i dovuti controlli) ed uso la funzione www.php.net/move_uploaded_file ;
- verifico che il file sia realmente un'immagine (apro il file, leggo i primi 10 byte, e verifico che contengano un'intestazione di un formato file di un'immagine, generalmente jpg, png, gif, bmp, l'instazione è chiamata anche "magic header");
- se tutto va bene, creo un nome del file unico usando un hash md5;
- sposto il file in una cartella che uso per le immagini;
- se necessario faccio una thumb (img. ridotta);
- salvo sul db le informazioni relative all'immagine (nome originale, formato, dimensioni e altre cose utili).

Ora, a parte il check sul tipo di file che magari potrebbe risultare al quanto complesso da fare come lo faccio io, direi che puoi seguire una procedura esemplificata!

1) Dopo che usi la funzione is_uploaded_file su $_FILES['upload']['tmp_name'] (ove il campo upload corrisponde all'attributo name del tag input type="file" dell'html) verifichi che $_FILES['upload']['tmp_name'] abbia un'estensione supportata

codice:
$nameParts = explode('.', $_FILES['upload']['name']);
$extension = strtolower(array_pop($nameParts));

if (in_array($extension, array('jpeg', 'jpg', 'png', 'bmp', 'gif')) == false)
{
    echo 'Formato file non supportato!';
    die();
}
www.php.net/explode
www.php.net/strtolower
www.php.net/in_array
www.php.net/die

2) Visto che non serve accedere al contenuto del file, non è necessario spostarlo in una cartella temporanea puoi direttamente spostarlo nella sua destinazione finale, quindi puoi fare, mettendo che $uploadedImagesDir contiene il percorso dove salvare le immagini

codice:
do
{
    $uploadedImageName = md5(uniqid(microtime(), true)) '.' . $extension;
    $uploadedImagePath = $uploadedImagesDir . '/' . $uploadedImageName;
}
while(file_exists($uploadedImagePath) == true);
www.php.net/md5
www.php.net/microtime
www.php.net/uniqid
www.php.net/file_exists
www.php.net/while


questo codice ti genera nomi casuali in modo continuo fin quando non trova una path unica, il nome del file unico sta in $uploadedImageName mentre la path unica sta dentro $uploadedImagePath, quindi poi fai

codice:
if (move_uploaded_file($_FILES['upload']['tmp_name'], $uploadedImagePath) == false)
{
    echo 'Impossibile spostare il file!';
    die();
}
www.php.net/move_uploaded_file

La variabile $uploadedImageName la devi usare dopo, quando inserisci le informazioni nel database, così da avere il nome del file e NON TUTTA LA PATH così che se domani sposti il tutto non devi cambiarti tutte le path sul database!

3) Una volta effettuate le operazioni indicate sopra, il file è già stato spostato ed è in posizione, quindi puoi caricare sul database le informazioni relative all'immagine caricata ricordandoti di usare $uploadedImageName e non $uploadedImagePath (che contiene il percorso per intero)

Inoltre, se tu usassi $uploadedImagePath dovresti fare un sacco di operazioni per far vedere le immagini all'utente nel browser perché, per intenderci, mentre la variabile
$uploadedImageName
contiene qualcosa tipo
2fe90c3460b6b7903e41c9b0acb09f0.gif

la variabile
$uploadedImagePath
contiene qualcosa tipo
c:\\percorso\\al\\sito\\web\\htdocs\\immagini\\2fe 90c3460b6b7903e41c9b0acb09f0.gif
oppure contiene qualcosa tipo
/var/web/path/to/website/htdocs/immagini/2fe90c3460b6b7903e41c9b0acb09f0.gif

percorsi che non puoi usare nell'html perché a te serve soltanto
/immagini/2fe90c3460b6b7903e41c9b0acb09f0.gif