1) select campo from tbl

recupera il valore di campo nella tabella tbl mentre

select 'campo' from tbl

recupera la stringa 'campo': devi usare i backticks (gli accenti), non gli apici singoli

2) se non esiste un nick associato a quella id, non esiste nemmeno una email nella stessa tabella, quindi è inutile rieseguire la stessa query sulla stessa tabella con la stesso id, avresti lo stesso risultato
nel caso nick sia NULL (che probabilmente è quello che intendi con nick non esistente), basta modificare la query così:

select ifnull(nick,email,nick) as value from iscritti

(questo lo esegui solo se $campo = 'nick', altrimenti fai la query normale)

3) prova il codice che ti ho postato io (più pulito), poi dimmi