Хэдеры отправляются до того, как хоть что-нибудь будет выведено на экран.
В данном случае, помимо многочисленных echo, это еще и перевод строк между
?>
<?php
Зачем оно, кстати так сделано?
А если быть кратким, то вместо
header ("Location: lk.php");
можно использовать для перехода что-то типа
print <<<HERE
<html><head><META HTTP-EQUIV='Refresh' content ='0; URL=lk.php'></head>
</html>
HERE;
Но вообще так лучше не делать, а прописать нормальную валидацию формы.