Allora, il timestamp è la cosa più facile di php, una volta capito il concetto.
Il timestamp è il valore in secondi del tempo passato dal 1 gennaio 1970.
Attualmente, nel momento in cui scrivo, il valore di timestamp è 1267080108 , il quale equivale alle 07:42 del 25.02.2010 (i secondi non li so )
Molto affascinante.
La cosa più affascinante è che esiste una funzione per visualizzare quel numero sotto forma di data!
date()
Con H:i ottieni l'ora 00 e i minuti 00, nel mio caso 07:42 (non 7:42, se metti maiuscolo o minuscolo cambia il formato!) mentre con d.m.Y si ottiene 25.02.2010. Se avessi messo la Y minuscola avremmo ottenuto 10, il formato ridotto dell'anno in questione.
L'unica cosa che devi fare tu è quella di pensare in secondi.
60=1 minuto (60*1)
3600=1 ora (60secondi*60 minuti in un'ora)
86400=1 giorno(60secondi*60minuti in un'ora*24 ore in un giorno)
e così via.
Ti fai i tuoi calcoli e ottieni quello che vuoi con precisione al secondo!

Per la vincita massima crei un campo in più nel premio dove metti il numero massimo di premi.
Se vuoi far vincere 3 ipod, metti 3 nel campo vincita_massima.
Dal campo di inserimento del codice (o quello che permette di fare vincere) rimandi alla pagina di controllo.
Nella pagina di controllo metti delle condizioni.
SE il premio è stato vinto allora continua, altrimenti aggiungi il tempo di adesso e diminuisci di 1 il campo vincita_massima
SE il premio è gia stato vinto, calcola il tempo di adesso (timestamp() ) meno il tempo dell'ultima vincita. Se il risultato è maggiore di 7200 (2 ore) allora fai vincere l'utente, aggiorna il campo timestamp con quello di quel momento e togli uno da vincita_massima.
Dall'ultimo punto ho tolto volontariamente un passaggio:
Devi controllare SE il numero vincita_massima è maggiore di 0 altrimenti vuol dire che è stato raggiunto il numero massimo disponibile di vincite per quel prodotto.

Facile no? più a farsi che a scriversi, fidati.

Se vuoi i premi random, aggiungi al campo vincita_massima il numero massimo dei premi che vuoi far vincere, così sei sicuro che non ti viene contato il frigorifero, in quanto quel giorno si vincono solo magliette, ipod e dvd.
Nella stessa query aggiungi RAND() dopo l'ORDER BY
"SELECT * FROM premi WHERE vincita_massima>'0' AND tempovincita>'(time()+7200)' ORDER BY RAND() LIMIT 1"
Così facendo selezioni tutti i premi con un numero di vincita massima superiore a 0, con il tempovincita superiore al tempo di adesso +7200 (ovvero due ore), ne scegli uno a caso tra quelli rimasti e ne estrai solo uno.
Quello sarà il premio.

Capito il concetto?