Сабж. Домен и хостинг предлагаю так и оставить у сосича, что это не было каким-то перетягиванием аудитории и т.д. Предлагаю поднять его на субдомене, если вам понравится, дальше разговор к сосичу, если нет, то ладно, но хотел бы, чтобы вы попробовали.

Скриншот: https://imgur.com/a/avU1sv2

Что реализовал:

  1. Имена участников хешируются (8 символов из sha-1). Вы конечно быстро поймете кто есть кто, но в целом я не знаю, как объяснить эту фичу правильно. Это такая некоторая защита вас друг от друга, тут некоторые любят (особенно это остро ощущается на ЛОРе) обсирать по личным обидам, а не по контексту сообщения.

  2. Управление досками (подобно как здесь tdg, community, club)

  3. Приватность досок (подобно как здесь клуб)

  4. Регистрация по инвайтам (чтобы это было для своих, как тут)

  5. Треды и ответы в них (есть тред и ответы, не ветки, как здесь)

  6. Возможность удалять посты и редактировать их.

  7. Базовая разметка (курсив, жирный, цитирование, блок кода)

  8. Ссылки на соообщения вида >>123

  9. Предпросмотр при наведнении на такие ссылки

  10. Под постом на который сослались выводятся все такие сообщение, также с предпросмотром.

  11. Вордфильтр (на случай вайпа, например, можно банить и добавлять слова в ворд-фильтр)

Пока протестировал как смог, вроде минимально готово.

Чего нет:

  1. Аватарок (не нужно, детский сад), это часть пункта 0.
  2. Вставки всяких картинок, телеграмов и всего такого. Изначально думал взять полностью концепт имиджборды, но по сути картинку можно вставить обычной ссылкой, не вижу проблемы, как и ютуб, как и телегу. Но если все очень сильно скажут, что это нужно, то я сделаю.
  3. Нет какой-то страницы профиля, рейтинга, звезд, статистики пользователя и все такое. В целом это даже на ЛОРе неактуально, здесь темболее (у всех миллион звезд).

Что есть, но иначе:

  1. Страница новостей это по сути доска, которую можно читать, но в которую нельзя писать (одмены могут). Думаю в будущем там чуть напедалировать, чтобы можно было комментировать, предложка и все такое. В целом уже подготовил почву (роли), чтобы сделать корректоров и все такое.

То до:

  1. Ну вот это с новостями доделать
  2. Сделать возможность выбора способа просмотра (как на имиджбордах / как на форумах), пока только первое, но второе сделать нетрудно, просто хочу сделать это как настройку у пользователя.

Код написан на пыхпыхе (скорее всего он крайне кривой, я не программист), планирую потом причесать и выложить на гитхаб или аналог.

    • Anoxemian
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      Бегло прочитал:

      1. Никогда не пхай куки без надобности, это просто неэтично.
      2. $user = $db->querySingle('SELECT * FROM users WHERE id = ' . intval($_SESSION['user_id']), true); - во-первых это шизофазия, во-вторых просто небезопасно. Это везде насквозь по всей простыне.
      3. Один запрос на топологию\конфигурацию для борды, а не 100500 функций для 100500 запросов на один чих. Зачем тебе sql? O_o
      4. if (isset($_GET['admin']) && $_GET['admin'] == 1) { === “1” либо ебаный intval
      5. function formatTime($timestamp) { - шиза. https://www.php.net/manual/ru/class.intldateformatter.php

      В целом заебок, но все надо переписать)))

      • MrSugoma
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        шизофазия

        Что это означает? И вообще, я бы хотел добавить, что БД надо делать из директорий и текстовый файлов в них (например, password.txt), каждый из которых содержит по одному параметру, а булевые параметры надо делать в виде файлов капсом, как, например, реализовано в Nocord: при наличии файла ANONYMOUS Nocord понимает, что на сервере разрешен анонимный постинг.

        Зачем тебе sql?

        Я и про это.

        • Anoxemian
          link
          fedilink
          arrow-up
          0
          ·
          1 year ago

          Этот код берет строковую переменную, кастует ее к int, после чего конкатенирует ее к строке, кастуя ее обратно к строке. Это шизофрения чистейшая. Если уж работать трактористом, то вот чистый код:

          $user = $db->querySingle("SELECT * FROM users WHERE id = {$_SESSION['user_id']}");
          

          И да, так делать не стоит уже по соображениям безопасности. Для этого у каждой dsl библиотеки есть соответствующий api в виде bind/prepare с проверкой на инъекции.

          • Anoxemian
            link
            fedilink
            arrow-up
            0
            ·
            1 year ago

            Ну и там по простыне такого много, при этом есть и правильное использование, видно, что не человек писал:

            $ip = $_GET['ip'];
            $db->exec("DELETE FROM bans WHERE ip = '" . SQLite3::escapeString($ip) . "'");
            

            Вместо:

            // prepare/bindValue _уже_ включает SQLite3::escapeString
            // Зачем лишнее выделение памяти и ненужное копирование $ip?
            
            $stmt = $db->prepare("DELETE FROM bans WHERE ip = :ip");
            $stmt->bindValue(":ip", $_GET['ip'], SQLITE3_TEXT);
            $res = $stmt->execute();
            
            • Anoxemian
              link
              fedilink
              arrow-up
              0
              ·
              1 year ago
              $parentIdDefault = isset($_GET['thread']) ? intval($_GET['thread']) : '';
              

              Тоже шиза, квантовое состояние переменной - хочешь знаковый инт, хочешь строка, и если строка, то набигают проверки на пустое значение root (ну что с головой-то), можно грабить корованы.

              Какую нейронку насиловал?

              • Anoxemian
                link
                fedilink
                arrow-up
                0
                ·
                1 year ago
                function getReplies($db, $parentId, $limit = 3) {
                

                Ты уж определись, $db, начиная с 22 строки имеет глобальную видимость.

              • Anoxemian
                link
                fedilink
                arrow-up
                0
                ·
                1 year ago

                Квантование никак не срастается, теперь еще и булево:

                $editId = isset($_GET['editmsg']) ? intval($_GET['editmsg']) : null;
                
                • Anoxemian
                  link
                  fedilink
                  arrow-up
                  0
                  ·
                  1 year ago
                  if ($parentCheck && $parentCheck != 0) {
                  

                  Ну это уже, видимо, автор дунул. Нейронка не может выдать такое совсем.

      • Holger
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        $user = $db->querySingle('SELECT * FROM users WHERE id = ’ . intval($_SESSION[‘user_id’]), true); - во-первых это шизофазия, во-вторых просто небезопасно. Это везде насквозь по всей простыне.

        а в чем собственно шизофазия? да вообще то рекомендуется prepare

        • Anoxemian
          link
          fedilink
          arrow-up
          0
          ·
          1 year ago

          в следующем посте написано)

          • Holger
            link
            fedilink
            arrow-up
            0
            ·
            1 year ago

            понял) вопросов больше нет

          • shikata_ga_naiOP
            link
            fedilink
            arrow-up
            0
            ·
            1 year ago

            Бжлад, ну у меня были сильные подозрения, что гопатыч мне хуй за щеку вместе с кодом дает, но я смотрю мол, вроде работает и задачи выполняет, ну в целом это ожидаемо было, я и не скрывал :)

            В общем парни, хочу сказать, что айтишники без работы точно не остануться тогда, ближайшие лет 20 судя по всему, как минимум. У гопатыча есть еще одна проблема: пока размер всего кода укладывается в максимум пару сотен строк, он еще как-то пытается думать и т.д., потом у него просто окно контекста схлопывается. Чтобы работать с этим кодом я использовал супер-дупер-новомодную идешку cursor-ai (в арче можно ебануть прямо из аура пакетом cursor-bin). Там есть режим агента, где гопатыч интегрирован в этот нотепад и там сильно проще давать контекст (выделил строки и сказал че хочешь, если ему надо, он шарится по всему проекту). Через обычный онлайн чат даже такого говна не добиться, он через пару сообщений забывает о чем ты с ним говорил, лол.

            • Anoxemian
              link
              fedilink
              arrow-up
              0
              ·
              1 year ago

              Нормуль, это называется vibe-driven кодинг. Типа, мамка, смотри, я заебательский кодер! бип-бип)))) Оно ж работает по факту)

            • MrSugoma
              link
              fedilink
              arrow-up
              0
              ·
              1 year ago

              У гопатыча есть еще одна проблема: пока размер всего кода укладывается в максимум пару сотен строк, он еще как-то пытается думать и т.д., потом у него просто окно контекста схлопывается. Чтобы работать с этим кодом я использовал супер-дупер-новомодную идешку cursor-ai (в арче можно ебануть прямо из аура пакетом cursor-bin). Там есть режим агента, где гопатыч интегрирован в этот нотепад и там сильно проще давать контекст (выделил строки и сказал че хочешь, если ему надо, он шарится по всему проекту). Через обычный онлайн чат даже такого говна не добиться, он через пару сообщений забывает о чем ты с ним говорил, лол.

              Завязывай с вайб-кодингом, пока не поздно.

              • shikata_ga_naiOP
                link
                fedilink
                arrow-up
                0
                ·
                1 year ago

                Хуйня этот ваш вайб кодинг, уже завязал, но опыт необычный, что интересно: движок то получился в итоге, лол.

                • MrSugoma
                  link
                  fedilink
                  arrow-up
                  0
                  ·
                  1 year ago

                  Этот движок написан нейронкой?