Задать вопрос
  • Как исправить проблему с созданием регистрации пользователей?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это всё просто ужасно. Начиная прямо с первой строчки, class Register extends Database
    Делать отдельный класс для регистрации глупо. Если уж делать класс, то для манипуляции юзером в целом, а не одной только регистрации. Плюс, регистрация пользователя - это не база данных. И не должна наследовать классу Database.
    По сути, вы хотите натянуть ООП на обычное процедурное программирование. Не надо этого делать, получится самолёт из соломы. Сделайте простую функцию.

    Но это ещё цветочки. Остальных проблем тут выше крыши:
    1. Никогда не используйте сокращённый синтаксис INSERT. Всегда надо явно перечислять поля. Это, скорее всего, и является причиной ошибки. Но даже если нет, то проблемы всё равно вылезут в будущем
    2. Собственно сообщение об ошибке нам и надо получить от базы данных, чтобы понять в чем проблема. для этого к коду соединения с БД надо добавить строчку
      mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
      и после этого смотреть сообщение об ошибке
    3. Самое главное - SQL инъекция. Какой смысл делать регистрацию вообще, если любой дурак узнает пароли всех остальных пользователей или сможет авторизоваться вообще без пароля? Запросы надо выполнять только через подготовленные выражения
    4. И по поводу паролей. Пароли надо хранить в фаршированном виде, обработанными функцией password_hash()
    Ответ написан
    Комментировать
  • Как сделать каскадный селект?

    0xD34F
    @0xD34F Куратор тега JavaScript
    <select id="event"></select>
    <select id="dates"></select>

    const events = [
      { name: '...', dates: [ ... ] },
      { name: '...', dates: [ ... ] },
      ...
    ];
    
    const eventEl = document.querySelector('#event');
    const datesEl = document.querySelector('#dates');
    
    eventEl.innerHTML = events
      .map((n, i) => `<option value="${i}">${n.name}</option>`)
      .join('');
    
    eventEl.addEventListener('change', function() {
      datesEl.innerHTML = events[this.value].dates
        .map(n => `<option>${n}</option>`)
        .join('');
    });
    
    eventEl.dispatchEvent(new Event('change'));
    Ответ написан
  • Как грамотно реализовать пагинацию через класс?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Еще раз: Тут нет никакого ооп, у вас получается какой-то процедурный код, засунутый внутрь класса. Это к ооп не имеет никакого отношения. Не пытайтесь сделать деревянную печку, ничего хорошего не получится.
    У вас:
    Код реализует (такой себе) пэйджинг для одного конкретного запроса (нахрена такой пейджинг засовывать в класс?)
    Код ничего не инкапсулирует, тупо выполняется как функция. По сути если мы уберем class Paginate extends Connection{ то ничего не поменяется.
    Внутри методов используются глобальные переменные (GET), что само по себе уже лютый говнокод.
    Много слов про солид и прочие вещи из ооп не пишу, в виду полного их отсутствия в коде, да и смысл?

    По этому решения для вашего случая в контексте ооп просто нет, так как:
    Пэйджинг работает с моделями на основе ОРМ, в пэйджинг в качестве аргумента передается модель, и далее уже пэйджинг работает с моделью, используя ее методы работы с хранилищем, а не просто тупо фигачит запросы. У вас моделей просто нет.
    Модели подразумевают конкретный интерфейс, который позволяет работать с пэйджингом адекватно. Ну и моделей нет ))
    Точкой взаимодействия между моделью и пэйджингом будет контроллер, про который тут вообще у вас никто не в курсе.
    Вывод (view) никогда не пересекается с кодом логики, в него просто передаются готовые данные, после чего они вставляются в нужные точки шаблона.
    Ответ написан
    6 комментариев
  • Видео попап. Почему неполучается сделать второе, третье всплывающее окно?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что плагин кривой и не предназначен для создания нескольких экземпляров одновременно. Если посмотрите его исходный код, то там создаются элементы с фиксированными id (id="opct" и id="closer_videopopup"), а по стандарту HTML на странице не должно быть элементов с одинаковыми id.
    Ответ написан
    Комментировать
  • Как определить при помощи JS браузер пользователя и его ip?

    SPART4K
    @SPART4K
    Middle Front-end Developer (Vue.js/Nuxt.js)
    navigator.userAgent
    Информацию о браузере - устройствe и тп

    fetch('https://api.ipify.org/').then(
      r => r.text()
    ).then(console.log);

    ip
    Ответ написан
    Комментировать
  • Как запретить писать в input?

    @AntVlad
    Надо на сервере проверять данные.
    И если у тебя всё время значение wazny.com, то зачем его вообще передавать? Если проверять, откуда прилетели данные, то смотри переменную $_SERVER['HTTP_REFERER']. Но, по идее, злоумышленник и это может подделать.
    Ответ написан
    Комментировать
  • Как правильно распарсить такой массив со строками?

    0xD34F
    @0xD34F Куратор тега JavaScript
    arr.reduce((acc, n) => (
      n = n.match(/(\S+) = (.*)/),
      n && (acc[n[1]] = n[2]),
      acc
    ), {})

    или

    Object.fromEntries(arr
      .map(n => n.split(': ').pop().split(' = '))
      .filter(n => n.length === 2)
    )
    Ответ написан
    2 комментария
  • Как запретить писать в input?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Никак не обезопаситься. Всегда можно посмотреть, что за запрос уходит из браузера и симмитировать его с любыми нужными полями/заголовками/куками.
    Данным, пришедшим от клиента, доверять нельзя никогда.

    P.S. Хотя для вашей ситуации можно на сервере подписать данные электронной подписью или зашифровать их и на сервере же проверять подпись/расшифровывать. Но если ключ будет один на всех, то можно будет подставить данные с другого клиента, а если ключ будет свой для каждой сессии, то проще хранить данные в сессии и не отдавать клиенту.
    Ответ написан
    2 комментария
  • Как с помощью php разбить html текст на теги "a" (ссылки) в массив?

    0xD34F
    @0xD34F Куратор тега Регулярные выражения
    Не нужны тут регулярные выражения, для разбора html есть специальные инструменты:

    $doc = new DOMDocument();
    $doc->loadHTML($html);
    $a = $doc->getElementsByTagName('a');
    $result = array_map([ $doc, 'saveHTML' ], iterator_to_array($a));

    Но, конечно, дурацкое дело нехитрое:

    $result = preg_split('/(?<=\/a>)(?=<a)/', $html);
    
    // или
    
    preg_match_all('/<a .*?>.*?<\/a>/', $html, $matches);
    $result = $matches[0];
    Ответ написан
    4 комментария
  • Как сделать опрос на сайте через html?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Если говорить в общем: это реализуется с помощью серверной части и базы данных.
    Подробное решение в рамках ответа невозможно описать. С одной стороны - мало вводных, с другой это ресурс для решения конкретных задач, а не фриланс-биржа и не онлайн-университет.
    Максимум, можно подсказать общее направление:
    1. Гуглите список языков, на которых пишут бекэнд
    2. Выбираете тот, который вам понравиться больше (важное замечание: написать можно на любом, но часть будет несколько избыточна)
    3. Изучаете его
    4. Изучаете принципы работы с Базами Данных (минимум три аспекта: sql, принципы проектирования и нормализации баз)
    5. Пишите

    Дополнение: если цель - сохранить статистику каждого юзера только для него и задачи "анализа" не стоит, то можно использовать local storage или куки.
    Ответ написан
    4 комментария
  • Как разбить текст на теги?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    можно создать временный элемент <template>, вставить в него этот HTML,
    и забрать из него DocumentFragment

    Фрагмент — это примерно как DOM-документ, его можно рекурсивно обойти через свойство children

    Например, в строке содержится такой HTML:
    <div>
      <p>Text</p>
      <ul>
        <li>Apple</li>
        <li>Banana</li>
      </ul>
    </div>
    И примерно такой код:
    const tmpl = document.createElement('template');
    tmpl.innerHTML = msg; // строка с HTML
    const df = tmpl.content; // DocumentFragment
    
    df.children // массив из одного элемента: наружний div
    df.children[0].children // массив с двумя эл.: параграфом и списком
    df.children[0].children[1].children[1].textContent // "Banana"
    Ответ написан
    2 комментария
  • Как продвигать свой проект?

    Adamos
    @Adamos
    Для начала - стоит подобрать эту кучу и... запихнуть ее в класс хотя бы, чтобы не засорять глобальное пространство имен.
    Далее, "куча" никому не впилась. Чтобы было легче писать код, используются библиотеки функций, решающих вполне конкретные задачи, типа moment.js
    А аналог вашей "кучи" найдется у каждого сколько-нибудь пописавшего программиста, и своим ему пользоваться тупо удобнее, чем искать ваше, а потом разбираться в том, что вы там накосорезили. Учитывая примитивность решенных задач и явное непонимание места вашего кода в чужом проекте, связываться с ним - себе дороже.
    Ответ написан
    2 комментария
  • Как продвигать свой проект?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    1. Создаем веб сайт посвященный вашей библиотеке. На нем должна быть подробная документация, и демо кода на все случаи.
    2. Создаем репозиторий на github, выкладываем туда код и документацию.
    3. Открываем соц. сети, пишем там о своем проекте заметку, статью.
    4. Можно записать ютуб видео небольшое, где крато и понятно объясняется что за библиотека, зачем она, как пользоваться и в чем выгода.
    5. А дальше уже время, если комьюнити понравится ваш проект и им начнут пользоватья - будет расти популярность и загрузки (а если нет, то нет).

    Лучше всего всё это сразу делать на английском языке. Иначе охват аудитории будет мизерный.

    Примеры подобных библиотек c хорошим описанием и документацией:
    - Howler.js
    - Fotorama
    - Ion.RangeSlider
    - и т.д.
    Ответ написан
    1 комментарий
  • Бот для публикации ремайндеров?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Вам надо подготовить техзадание (хотя бы как-то) и с ним обратиться на любую freelance-биржу, к примеру freelance.habr.com
    Ответ написан
    Комментировать
  • Как заменить каждый из символов подстроки на звездочку?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Если с минимумом изменений, то так:
    -        field = field.replace(badWords[i], '*');
    +        field = field.replaceAll(badWords[i], '*'.repeat(badWords[i].length));
    звёздочку повторить столько раз, сколько букв в заменяемом слове.
    Ответ написан
    6 комментариев
  • Как заменить каждый из символов подстроки на звездочку?

    0xD34F
    @0xD34F Куратор тега JavaScript
    out.innerText = badWords.reduce((str, n) => str.replaceAll(n, '*'.repeat(n.length)), field);

    или

    for (const n of badWords) {
      field = field.replace(RegExp(n, 'g'), Array(n.length + 1).join('*'));
    }
    
    out.textContent = field;

    или

    out.innerHTML = (function replace(str, i, word = badWords[i]) {
      return word
        ? replace(str.split(word).join(Array(word.length).fill`*`.join``), -~i)
        : str;
    })(field, 0);
    Ответ написан
    Комментировать
  • Как я могу избавиться от hardcode в CSS Grid layout?

    RAX7
    @RAX7
    .wrapper {
      display: grid;
      grid-auto-flow: dense;
      grid-template-columns: 1fr 1fr;
      grid-gap: 10px;
    }
    
    .box {
      background-color: #444;
      color: #fff;
      border-radius: 5px;
      padding: 20px;
      font-size: 150%;
    }
    
    .box:nth-child(6n + 1),
    .box:nth-child(6n + 6) {
      grid-row: span 2;
    }
    
    .box:nth-child(6n + 5) {
      grid-column: 1;
    }
    Ответ написан
    Комментировать
  • Можно ли использовать два свойства clip-path?

    RAX7
    @RAX7
    clip-path так использовать не получится, но можно сделать маску на svg
    Ответ написан
    Комментировать
  • Кто знает решение?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Вы умножаете на 2. А надо возводить в квадрат, т.е. в степень 2 ("power").
    Ответ написан
    2 комментария
  • Как получить понимание разработки игры?

    saboteur_kiev
    @saboteur_kiev Куратор тега Разработка игр
    software engineer
    Тебе же прямо сказали. Нужно изучить язык программирования.
    Не на уровне "почитал книжку". Не на уровне интерн/джуниор. А на уровне уверенного разработчика.

    То, что ты сейчас описываешь - это ты хочешь не программировать, а сюжет писать. Это совсем другое. Но в таком случае ты должен работать в команде, где есть разработчик, аниматор, художник, а ты будешь типа сценарист или гейм-дизайнер.
    Но понятно что тебя никто в команду без опыта не возьмет.

    Поэтому правильный путь - это потратить МНОГО времени и МНОГО усилий.
    Ты же сам сказал, что все что ты изучил - там давали базовое понимание что это такое.

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