Задать вопрос
  • Как работает указанный код, удаляющий дубликаты в массиве?

    Dr_Elvis
    @Dr_Elvis
    В гугле забанен
    function removeDuplicates (arr){//функция, которая принимает на себе массив для удаления дублей
        let result = [];//создается новый пустой список, в который будут добавляться уникальные значения
        for (let n of arr) {//перебираем исходный массив по одному элементу
            let contains = false;//ставим флаг в статус false
            for (let m of result) {//перебираем наш новый массив(при первой итерации там пусто, но потом добавляются значения)
                if (m === n) {//сравниваем очередной элемент из исходного списка с каждым элементом нашего нового списка и, если такой элемент уже есть, то выполняем условия ниже
                    contains = true;//а именно ставим флаг что такой элемент есть
                    break;//выходим из цикла for (let m of result)
                }
            }
            if (!contains) result.push(n);//проверяем наш флаг. если там стоит false, то добавляем очередной элемент из исходного списка в наш новый, иначе просто пропускаем и идем к следующему элементу исходного списка
        }
        return result;//После того как все элементы перебрали - возвращаем наш новый список с уникальными значениями, которые далее выводятся в консоле
    }
    console.log(removeDuplicates([1,2,3,4,5,1,1,2,2,3,3,65,9,65,1,5,65, 117, 117, 118,118, 12333, 12333]))
    Ответ написан
    2 комментария
  • Как правильно связать php сайт с mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На частные вопросы ответили в комментариях, поэтому ответим на вопрос из заголовка.

    Чтобы соединить сайт с mysql, в РНР вообще-то есть два API - mysqli и PDO. Несколько лет назад с mysqli вообще невозможно было нормально работать, но на данный момент они выровнялись, хотя PDO все равно удобнее, по трем причинам
    1. Единый интерфейс при работе с различными СУБД (неактуально, если mysql для нас является синонимом слова база данных)
    2. Набор функций-хелперов для получения данных из БД в различных форматах (при желании легко воспроизводится вручную)
    3. Именованные плейсхолдеры (для некоторых это главная причина использовать PDO)

    Но в целом, как я говорил выше, сейчас можно использовать любое API. Главное - не использовать тот древний говнокод, который приведён в вопросе.

    1. Создаём файл`config.sample.php` куда кладем все настройки приложения, в том числе базы данных
    return [
    	'db' => [
    		'host' => '127.0.0.1',
    		'username' => '',
    		'password' => '',
    		'dbname' => '',
    		'port' => 3306,
    		'charset' => 'utf8mb4',
    	],
    ];

    2. В файле, который включается во все скрипты сайта, добавляем код
    if (!file_exists('config.php'))
    {
    	throw new \Exception('Create config.php based on config.sample.php');
    }
    $config = require 'config.php';

    3. И дальше в этом же файле пишем собственно нормальный код подключения к БД
    либо к mysqli
    // включаем режим информирования об ошибках
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    // подключаемся к серверу
    $dbc = $config['db'];
    $db = new \mysqli($dbc['host'], $dbc['username'], $dbc['password'], $dbc['dbname'], $dbc['port']);
    // не забываем установить кодировку, чтобы не было ошибок с кракозябрами
    $db->set_charset($dbc['charset']);

    либо к PDO
    $options = [
        \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        \PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $dbc = $config['db'];
    $dsn = "mysql:host=$dbc[host];dbname=$dbc[dbname];charset=$dbc[charset];port=$dbc[port]";
    $pdo = new \PDO($dsn, $dbc['username'], $dbc['password'], $options);

    После того как будет освоена работа с системой контроля версий (а по-хорошему это надо было сделать уже давно) добавляем config.php в файл .gitignore
    Таким образом на каждом хосте, где исполняется этот код, будет собственный файл с настройками, создаваемый по образцу из config.sample.php

    Да, и Очень Важное Дополнение:
    почему нельзя сделать 1 соединение для сайта и не тратить каждый раз время на коннект к БД?

    Никогда не следует переживать по поводу воображаемых проблем. Вот только когда создание коннекта каждый раз станет реальной проблемой, только тогда и начинать переживать по этому поводу и искать пути решения (спойлер: никогда).
    Ответ написан
    14 комментариев
  • Как работать с БЭМ и Sass в случае со вложенными элементами?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    & можно засунуть в переменную. пример https://codepen.io/colinlord/pen/KozWWP/
    Ответ написан
    1 комментарий
  • Как работать с БЭМ и Sass в случае со вложенными элементами?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    .block {
      &__element-2 {}
      &__element-1 {}
      &__element-1:hover &__element-2 {}
    }


    .block {
      $this: &;
      &__element-2 {}
      &__element-1 {
        &:hover #{$this}__element-2 {}
      }
    }


    и при повышении вложенности ситуация усугубляется


    Не нужно увеличивать вложенность. Это противоречит идеологии БЭМ.
    Ответ написан
    Комментировать
  • Как правильно набирать заказчиков на фрилансе?

    @Kvason
    Веб-разработчик
    А вот и жертва курсов. В каждом из них говорят что после него ты будешь зарабатывать по миллиону в день. Это так не работает. Заказчика первым делом интересует портфолио и опыт работы. Значит напиши какого-то не коммерческого, но интересногл бота, главное не клепать фигню по типу СКОЛЬКО ТЕБЕ ЛЕТ?
    Ответ написан
    Комментировать
  • Как обернуть элементы, между триггерных элементов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const wrapper = document.createElement('div');
    const start = block.querySelector('.start');
    for (let el; !(el = start.nextElementSibling).matches('.end'); wrapper.appendChild(el)) ;
    start.insertAdjacentElement('afterend', wrapper);

    или

    const wrapper = document.createElement('div');
    const children = [...block.children];
    const iStart = children.findIndex(n => n.classList.contains('start'));
    const iEnd = children.findIndex(n => n.classList.contains('end'));
    wrapper.append(...children.slice(iStart + 1, iEnd));
    children[iStart].after(wrapper);
    Ответ написан
    Комментировать
  • Хороший поиск на php по sqlite Базу?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    В таких случаях имхо вам стоит реализовать фонетический поиск. Вот статья на Хабре.

    Функция dmstring используя фонетический алгоритм Daitch – Mokotoff Soundex будет модифицировать поисковый запрос в код. Примеры из поста на Хабре:
    dmstring('Арнольд Шварцнеггер') == dmstring('Arnold Schwarzenegger') == 096830 479465
    dmstring('Орнольд Шворцнегир') == dmstring('Arnold Schwarzenegger') == 096830 479465


    Т.е. учитывая, что запросы написаны по-разному, фонетический код обоих совпадает. Вот будете искать и по данному коду.
    Ответ написан
    Комментировать
  • Как исправить проблему с кавычками?

    @Everybody_Lies
    // экранируешь кавычки одинарным обратным слешем
    $str = "<a href=\"javascript:void(0)\" onclick=\"hide('div_1')\">";
    $str = '<a href="javascript:void(0)" onclick="hide(\'div_1\')">';
    Ответ написан
    1 комментарий
  • Как можно ускорить работу Exception?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    "Если вас беспокоит скорость работы исключений, вы что-то делаете неправильно"

    Ускорить нельзя.
    В данном случае все проблемы не из-за исключений, а из-за говнокода.

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

    По результатам валидации исключение может кидаться ОДНО. В самом конце. По результатам валидации всего набора данных. Или не кидаться - зависит от конкретной бизнес-логики. Но если и кидать, то только одно, по результатам.
    Это будет правильное использование исключений, которое вообще никак не скажется на скорости работы кода.
    Ответ написан
  • Нормально ли хранить роли в jwt токене?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    Только надо учитывать, что если мы безоговорочно доверяем инфе из токена, то изменив роль юзера в БД мы будем получать старую роль, пока токен не протухнет.
    Ответ написан
    2 комментария
  • Guards vs Roles в laravel?

    Fragster
    @Fragster
    помогло? отметь решением!
    А как одно другому мешает? В общем случае guards и policies позволяют использовать кучу хелперов (в шаблонах, в контроллерах, в т.ч. ресурсных, в middleware) а откуда они там будут брать для этого данные (поле в модели пользователя, поле в отдельной таблице ролей, поле в таблице модели прикладного объекта, некая комбинация этого (например автор + модератор)) - это все описывается уже кодом.
    Ответ написан
    Комментировать
  • Присутствуют ли в TypeScript ООП-штуки, из тех что описываются в книжках по паттернам проектирования?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    Дизайн паттерны абстрагированы от языка и работают практически везде одинаково. Некоторый отпечаток может наложить на них динамическая типизация, как в JS, но даже тут сильно ничего не поменяется.
    Кроме того, в корне не верно приписывать паттерны к ООП. Они абсолютно одинаково работают во всех парадигмах, за некоторыми небольшими исключениями.
    Ну и наконец, ООП часть в TS прямо слизана с Java, так что многие примеры будут даже выглядеть похоже.
    Ответ написан
    3 комментария
  • Безопасность кода php -> mysql?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Какая вероятность того, что мой код безопасен
    Околонулевая
    как можно его еще обезопасить
    Как минимум, использовать подготовленные выражения.

    Ну и уйти от большой вложенности if'ов.
    Ответ написан
    Комментировать
  • Безопасно ли хранить .htaccess в корне сайта?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это очень смешной вопрос.

    Если читать только заголовок, то вопрос звучит очень смешно. Типа "опасно ли дышать?". файлик .htaccess как раз и предназначен для размещения в папках сайта, корневой или не корневой - без разницы.

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

    Во-первых, формулировка. Если вспомнить, что корнем сайта как раз и является публичная директория, то вопрос получится изначально бессмысленный, "почему файл лежит в публичной директории, а не в публичной директории?"
    То есть надо сначала понять, что речь в замечании на картинке идет про корень приложения, а не сайта. В котором корень сайта - это всего лишь одна из папок. Та самая, "публичная".

    И только после этого можно приступать к ответу на вопрос:
    В корне приложения - то есть папке, которая, по идее, вообще никакого отношения к веб-серверу не имеет, класть htaccess скорее бессмысленно. И в теории может так оказаться, что веб-сервер-апач его вообще не прочтёт. И, как следствие - некие секретные настройки могут не примениться.

    Но тут надо вспомнить, что завязывать какую бы то ни было безопасность на файлик .htaccess - это уже так себе идея. Поскольку доля веб-сервера-апач неуклонно снижается, и весьма велика вероятность того, что на реальном сервере файлик .htaccess будет просто болтаться мертвым грузом, и никто не обратит на него ни малейшего внимания.
    Ответ написан
    3 комментария
  • Как проверить значние по условию в ответе при тестировнии api?

    deadloop
    @deadloop Автор вопроса
    Активно осваиваю PHP
    Мне всегда говрят что-бы я читал документацию, ну я и прочитал и нашел вот такой способо решения.

    Но может есть другие способы, я был бы не против, спасибо.

    $response = $this->get('/api/works/show/1');
            $response
                ->assertJson(fn (AssertableJson $json) =>
                    $json->has('status')
                        ->has('message')
                        ->has('data.work', fn ($json) =>
                            $json->where('time_end', '19:59')
                                ->etc()
                        )
                );
    Ответ написан
    1 комментарий
  • На чем запустить интернет магазин, чтобы просто быстро и привлекательно?

    nki
    @nki
    bezkart.ru готовая система лояльности
    Посоветуйте ему торговать на маркетплейсах. Делать свой ИМ и конкурировать с монстрами интернет торговли он вряд ли готов.
    Ответ написан
    3 комментария
  • Как убрать в айфонах треугольник в input?

    GrinMorg
    @GrinMorg
    Если ответ помог, отметь решением
    Попробуйте
    .class {
      -webkit-appearance: none;
      -moz-appearance: none;
      appearance: none;
    }
    Ответ написан
    2 комментария
  • Как решить проблему с неймингом роутов при наличии поддоменов?

    dark_tke
    @dark_tke
    Помогли? Отметь решением!
    Не делать двойного ввода маршрутов. Это в корне неверно. Возможные варианты в вашем случае:
    1. На уровне мидлвары анализировать домен, и прокидывать поддомены, если таковые есть в запрос. А дальше рулить логикой. Разделение на субдомены и базовый с маршрутов убрать.
    2. Узнать что такое Tenant https://tenancyforlaravel.com/
    3. Сделать префиксы в маршрутах( что не комильфо в вашем случае)
    3 Еще раз подумать над логикой страниц, возможно, там именованные маршруты вам не нужны.

    Ну если дружите с английским: "Dynamic custom domain routing in Laravel" гугл в помощь
    Ответ написан
    2 комментария