Webdice ma rację. isset sprawdza istnienie zmiennej, którego empty nie zrobi. Innymi słowy empty na nieistniejącej zmiennej zwróci błąd, zaś isset jest na taką możliwość przygotowany. Zajrzyj dokładniej do manuala bo zapewne nie uwierzysz

EDIT:
@down: zależy od podejścia... Dla mnie notice to także błąd, ale małego kalibru. Tak czy inaczej powinien się go programista pozbyć, nie używając "małpowania"

Bo kto wie czy ten mały notice, którego się nie zauważy, nie spowoduje gdzieś indziej znacznie większego. Miałem ostatnio podobny motyw, bo programista zrobił @ w mysql_query i interpreter wywalał mi błąd w mysql_fetch_array dopiero, przez co szukałem w złym miejscu. Mysql_query zwróciło oczywiście brak rekordów, co nie jest błędem, tyle że nie było kontroli tego i poszło do mysql_fetch_array, tyle że ileś linii dalej i samo query było "zamałpowane". Dopiero po chwili załapałem, że błąd jest zupełnie gdzie indziej. Dlatego małpom mówię "nie", nawet jeśli to tylko notice, bo problemy to może w późniejszym etapie sprawiać takie, że trzeba cały kod analizować od tyłu, a nie tam gdzie interpreter błąd pokazuje. Jakby nie patrzeć, po to jest obsługa wyjątków z try-catch, czy choćby zwykłymi if by to wyłapywać.