Funziona cosi il protocollo http:
la funzione setcookie scrive nei header di risposta il cookie e il suo valore (per questo non puoi scrivere niente prima), i quali diventano disponibili solo dopo il refresh della pagina, quando il browser te li rimanda, chiaro?
detto questo, per risolvere il tuo problema puoi usare una variabile di appoggio, le sessioni, o quant'altro