// я форкнулся, не отключусь через 30 секунд, хотя технически был запущен из web сервера
// upd: но отрублюсь, когда завершит работу мой родитель потому что не был вызван posix_setsid();
function toCodePoint( $string, $encoding='utf-8' )
{
$utf32 = mb_convert_encoding( $string, 'UTF-32', $encoding );
$length = mb_strlen( $utf32, 'UTF-32' );
$result = [];
for( $i = 0; $i < $length; ++$i ){
$result[] = sprintf("%04d", hexdec( bin2hex( mb_substr( $utf32, $i, 1, 'UTF-32' ) ) ));
}
return '\\u'.implode('\\u',$result);
}
echo toCodePoint('W+I4zLZyeJDAhQMe33tYR');
//\u0087\u0043\u0073\u0052\u0122\u0076\u0090\u0121\u0101\u0074\u0068\u0065\u0104\u0081\u0077\u0101\u0051\u0051\u0116\u0089\u0082
Он местами ещё на PHP4. Так вот в нем мне было проще разбираться чем в вашем скрипте. понимаю, что вы ещё учитесь, но учитесь вы по совершенно неправильным материалам.
Основные недостатки вашего кода
1. винегрет из PHP/HTML
Есть множество способов отделить представление от бизнес-логики. Т.е. сначала вы прогоняете всю логику с выборками из БД, собираете, например, массив с данными, необходимыми для сборки страницы, и передаёте его в сборщик страницы. Самый простой сборщик просто напросто подключает шаблон phtml
Обратите внимание, что это не просто функция, а метод класса, если соберетесь использовать его логику.
2. Использование php_mysql/php_mysqli вместо PDO
На сегодняшний день расширение php_mysql/php_mysqli морально устарело и лично я рекомендую переходить на объектную модель взаимодействия с БД.
Код гораздо более уязвим, нежели вот такой
3. echo
На самом деле вам не нужен echo. PHP сам по себе является шаблонизатором. Для этого у него есть королкий тег <?= ?>
А также весьма удобная запись для циклов и условий
Сравните
и
Попробуйте реструктуризировать ваш код. Для этого не надо зразу гнаться за шаблонизаторами и MVC.
Просто вынесите всю сборку данных в начало вашего скрипта. А HTML с подстановкой данных изолируйте в конце.
И многие ошибки сразу станут заметнее.