Во-первых: вспомните про область видимости переменных! У вас функция auth() никгда не найдет пользователя, так как не знает что искать (к слову интересных уход от SQL-инъекций). Вот пример из которого все будет ясно:

PHP код:
function f1() {
$a = 5;
echo "In f1(): \$a=$a<br>\n";
}
function f2() {
global $a;
$a = 3;
echo "In f2(): \$a=$a<br>\n";
}
$a = 10;
echo "Begin: \$a=$a<br>\n";
f1();
echo "After f1(): \$a=$a<br>\n";
f2();
echo "After f2(): \$a=$a<br>\n";
Во-вторых: как уже было подмечено при ошибках стоит помимо вывода сообщения, что-то делать например завершать работу скрипта.
В-трерьих: функции
setcookie() и
header() должны указываться
ДО любого вывода в браузер, иначе будет выведено сообщение о том что нельзя отправить заголовки, и соответственно ни куки не будут установлены, ни перехода не будет.