На 51 строке у вас уже что-то выводится. Может echo стоит или еще что-то. Куки устанавливаются при отправке хедера. А когда есть вывод на страницу - после него уже нельзя ставить setcookie, вот он и ругается.
Banny_Boom: если ты достал значение из БД - это еще не значит что в запросе будет то же самое значение)
У тебя запрос с именованными псевдопеременными, используй что-то вроде
$sth->bindValue(':sex', $sex, PDO::PARAM_BOOL);
как советовали ниже. Подробнее тут php.net/manual/ru/pdostatement.bindvalue.php
Да, ты все правильно понял.
Я не раздумывал как улучшить код, просто сделал работоспособным.
Если думать в сторону оптимизации - и так уже лишние переменные v и h удалятся, т.к. не нужны. Плюс я не увидел применения класса active, который присваивается. Если на деле он не нужен - можно убрать.
В остальном все неплохо на мой взгляд
Шелл могут залить в папки, доступные для записи.
Если нужно все-таки оставить доступ на запись для каких-либо папок, то можно через php_flag engine off в htaccess отключить выполнение php скриптов
Ошибки E_STRICT разве что для разработки нужны.
На 51 строке у вас уже что-то выводится. Может echo стоит или еще что-то. Куки устанавливаются при отправке хедера. А когда есть вывод на страницу - после него уже нельзя ставить setcookie, вот он и ругается.