Ошибки программирования. Забыл про юникод
В коде повторяю одни и те же ошибки. Из-за них ничего не работает. Вот одна.
При сравнении строк без учета регистра забыл, что у меня юникод.
if (strtolower($input_name) == $name) { ... }
В результате функция strtolower вместо строчных русских букв выдала мусор. Сравнение не сработало. Процесс пошел по другой ветке. Пользователь в панике.
А правильно использовать mb_strtolower.
if (mb_strtolower($input_name) == $name) { ... }
То же самое относиться и к другим функциям работы со строками. При юникоде и других кодировках использовать функции с префиксом mb_.
Успехов.