• Как работать с большим количеством запросов?

    Использовать транзакцию и выполнять блокировку строки таблицы на запись перед увеличением значения
    Ответ написан
    2 комментария
  • Чем веб-парсеры отличаются от реальных пользователей?

    @deliro
    1. Количеством запросов
    2. Нехаотичностью запросов
    3. Отсутствием рантайма для JS
    4. Либо присутсвием рантайма, но отсутствием натурального движения мышью
    5. Списком IP из ренжа AWS/DO/Vultr и других хостингов. Пользователи не сидят с таких IP адресов или делают это очень редко (купили и настроили там VPN)
    6. Резкими всплесками активности из одного сегмента сети (следствие 1 и 5 пунктов)
    7. Капча
    8. Что угодно ещё, хоть fingerprintjs

    Какая конкретно детектилка ботов стоит — сложно сказать. Либо измерять эмпирически, либо подкупить разработчиков оттуда, либо терморектальный криптоанализ. Но в любом случае, это должно стоить дешевле, чем информация, которую ты пытаешься попарсить
    Ответ написан
    Комментировать
  • SQL инъекция в UPDATE возможна ли?

    AndyPike
    @AndyPike
    Программист, full-stack developer.
    Точку с запятой можно впендюрить и продолжать запрос.
    UPDATE table SET test WHERE id = 0; DELETE * FROM users;
    Ответ написан
    6 комментариев
  • SQL инъекция в UPDATE возможна ли?

    Fernus
    @Fernus
    Техник - Механик :)
    Смысл есть!

    UPD:
    Поясню...я тебе в $id передам 9999 or 1 = 1 и все записи нафиг потерпят изменения!
    Ответ написан
    2 комментария
  • SQL инъекция в UPDATE возможна ли?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Инъекция может быть через любой запрос.
    И защищать тоже надо любые запросы.
    Никогда не надо торговаться, "а можно я не буду защищать именно этот запрос? Ну мааааам!"
    Надо просто всегда следовать простым правилам - любая переменная попадает в запрос только через плейсхолдер

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

    Уязвимость — это сама возможность с помощью переданных в запрос данных изменить его код.
    Даже если ты не знаешь ни одного способа ей воспользоваться, уязвимость от этого никуда не девается.
    Даже если та возможность, про которую ты знаешь, в данном случае не прокатит - остаются ещё тысячи других.
    Если есть уязвимость, то способы ей воспользоваться всегда найдутся.

    То есть сама уязвимость никак не зависит ни от каких второстепенных факторов - типа запроса, передаваемых данных, способов их валидации, твоих знаний SQL. Это сам факт. Можно подставить свой код в запрос? Значит он уязвим. А как конкретно можно нагадить - это отдельная тема.

    Кроме того, любая уязвимость - это всегда ошибки. Если в $id будет пусто, то запрос вызовет ошибку. Если в $id будет слово select то запрос вызовет ошибку. Если будет слово "привет", то запрос вызовет ошибку. Оно тебе надо?

    При этом разных вариантов возможных ошибок и способов воспользоваться уязвимостью - тысячи, им посвящены целые учебники и статьи. Но для того чтобы защищаться, не надо знать ни одного. Потому что защищаться надо не от отдельных способов эксплуатации, а закрывать саму уязвимость. И сделать это очень просто:
    1. Любые данные должны добавляться в запрос только через плейсхолдеры
    2. Любые другие элементы запроса должны выбираться из белого списка - заранее прописанных в нашем коде значений.


    Если вопрос "а можно я не буду защищаться?" вызван ленью, то это тоже решаемо. В принципе, лень - это очень важное качество для программиста. Главное - направить её в нужное русло.

    Если каждый раз писать по три строчки долго
    $sql = "INSERT INTO users SET email = ?, password = ?"; // заменяем на знаки вопроса
    $stmt = $db->prepare($sql); // подготавливаем запрос, получаем stmt
    $stmt->bind_param("ss", $email, $hash); // два знака вопроса - две переменных - две буквы s
    $stmt->execute(); // выполняем запрос

    То надо воспользоваться такой вещью, как программирование. И написать функцию, которая возьмет на себя всю рутинную работу.
    function prepared_query($mysqli, $sql, $params, $types = "")
    {
        $types = $types ?: str_repeat("s", count($params));
        $stmt = $mysqli->prepare($sql);
        $stmt->bind_param($types, ...$params);
        $stmt->execute();
        return $stmt;
    }

    и в итоге предыдущие 4 строчки превратятся в одну:
    prepared_query($db, "INSERT INTO users SET email = ?, password = ?", [$email, $hash]);

    или твой запрос:
    prepared_query($db, "UPDATE table SET test WHERE id = ?", [$id]);

    - просто, быстро, удобно и безопасно
    Ответ написан
    26 комментариев
  • Как в миграция Laravel указать дефолтное значения поля, но уже для существующих значений записать другое?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    Просто прямо в миграции после создания колонки отдельным запросом обновите значение в существующих записях.
    Ответ написан
    Комментировать
  • Что происходит при создании объекта класса(при наследовании) в PHP?

    @rPman
    Боюсь у вас все как то переусложнено.

    Классы в php это набор функций и переменных, при наследовании создается копия класса, в котором заменяются методы из потомка в наследнике, это касается так же методы конструктор и деструктор. Т.е. автоматически будет вызван только последний одноименный метод в цепочке наследования.

    Соответственно виртуальных методов нет, точнее они работают так автоматически, т.е. можно считать все методы виртуальными.

    И да, все что касается методов и их наследования скорее всего сделано однократно, в момент компиляции, а в момент создания экземпляра объекта в него копируются методы и переменные из этого сохраненного.

    Деструктор будет вызван если закончится работа приложения, закончатся ссылки (это кстати не факт, висячие могут жить до конца приложения, и даже unset не вызовет деструктор если есть ссылки на объект) и закончится область видимости переменной в которую поместили объект.
    пример:
    class A
    {
    	public $a;
    	function __construct(){echo '{C}';}
    	function __destruct(){echo '[';unset($this->a);echo 'D]';}
    }
    
    echo 1;
    $a=new A();$b=new A();
    $b->a=$a;$a->a=$b; // закоментируй, тогда деструктор будет вызван до вывода 2 иначе после
    unset($a);unset($b);
    echo 2;

    если есть ссылки:1{C}{C}2[[D]D]
    если ссылок нет: 1{C}{C}[D][D]2
    Ответ написан
    Комментировать
  • Как перевести Mysql запрос в Laravel?

    New_Horizons
    @New_Horizons
    Бред:
    Вот вариант попроще чем raw:
    books.popularity - 150 < 100
    books.popularity < 100 + 150
    books.popularity < 250
    Эти три записи эквивалентны. Школьный курс математики)
    Ответ написан
    Комментировать
  • Имеет ли смысл начинать учить Kotlin, если вовсе не знаком с Java?

    deepblack
    @deepblack
    СтОит. Если нужна будет Java подучишь по ходу дела.
    Тут подобные вопросы раз в неделю задают, можно было поискать по сайту и посмотреть что там отвечали.
    Ответ написан
    3 комментария
  • Как спроектировать фреймворк?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Как спроектировать фреймворк так, чтобы в будущем не надо было лопатить весь код включая ядро чтобы внести новые элементы?

    Я понимаю про SOLID там...

    Не понимаешь, раз такие вопросы есть.
    Ответ написан
    Комментировать
  • Где можно посмотреть практики написания хороших тестов для laravel?

    agoalofalife
    @agoalofalife
    Team Lead
    В общем можно посмотреть у Jeffrey Way на https://laracasts.com
    Еще мне нравилась его книга правда наверное она не много устарела.

    Начал копаться и вот здесь не понимаю каким образом в шаблон эндпоинта подставляется конкретный id. https://github.com/austintoddj/canvas/blob/master/...к

    Покопался и открыл для себя тоже кое что новое..
    В ссылке есть ниже метод и у него сверху мета тэг @dataProvider
    Что это такое почитать об этом можно здесь

    Что касательно true way or laravel way - это все относительно.
    Например в этом проекте от тестирует отношения в моделях, это скажем прям такое..
    Потом он тестирует консольные команды..интересно зачем?
    Конечно можно все протестировать, но какой в этом собственно смысл?
    Организация папок - это тоже дело щепетильное, как и название методов и переменных.

    Мне больше нравиться подход DDD. Как правило в проекте чаще всего меняются бизнес требования а не инфраструктура.
    Что может произойти вероятнее - поменять базу данных или поменять алгоритм начисление денежных средств?
    Так вот тестирование доменной области намного оправдание чем тестирование отношений модели в Eloquent.
    Ладно, что - то я разошелся, короче говоря, пишите тесты -> набирайтесь опыта -> рефакторинг -> пишите тесты.
    Ответ написан
    2 комментария
  • Почему laravel не видит мой класс UserService?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Может быть потому, что namespace должны иметь обратный слэш...

    App\Services
    Ответ написан
    1 комментарий
  • Можно программировать на Kotlin без java?

    vabka
    @vabka
    Токсичный шарпист
    Если без JVM вообще, то нельзя - компилятор kotlin использует jvm
    Если без Java, как языка, то можно - просто не используете Java
    Если без Java, в смысле Java API, то можно - нужно использовать Kotlin native или Kotlin JavaScript
    Ответ написан
    9 комментариев
  • Можно программировать на Kotlin без java?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Можно. Разрешаю
    Ответ написан
    3 комментария
  • Насколько полное изучение Java c работой над реальными проектам поможет php программисту в его работе?

    @dimoff66
    Кратко о себе: Я есть
    Если появится возможность пройдите курс по scala вместо java, это будет действительно хорошим расширением кругозора и пониманием множества паттернов. Плюс удовольствие от самого креативного на сегодняшний день ЯП. Поможет ли это в работе с PHP? Боюсь что помешает. Потому что после знакомства со скала, работать с PHP может только конченый мазохист.
    Ответ написан
    7 комментариев
  • Насколько полное изучение Java c работой над реальными проектам поможет php программисту в его работе?

    DevMan
    @DevMan
    расширение кругозора и выход за рамки одного языка - это всегда польза для программиста.

    а становится программистом или быть формошлепом каждый решает сам.
    Ответ написан
    Комментировать
  • Что думаете о Livewire и Inertia.js?

    Insolita
    @Insolita
    Отчаянная домохозяйка
    Про inertia почти ничего не скажу. Про livewire - Для mvp, низкобюджетных стартапов, инди-проектов, того что по умолчанию для ограниченной аудитории и не должно быть слишком нагруженным, админок каких-то... вполне себе вариант.
    Для более серьёзных вещей и с расчетом на перспективу - я бы оставалась на проверенных технологиях.
    Из подводных камней - с технологической стороны - дикое смешение ответственностей. С практической - каждый чих изменения в интерфейсе - та же кнопочка счетчика, смена таба, или еще чего, реализованного без православных скриптов - это запросы на сервер. И еще - серьёзный локинг на этих технологиях, их апдейтах.
    А конкретно tailwind мне таки зашёл, если его с умом готовить и выносить наборы в scss. В компании с purgecss на выходе можно получить очень лёгкий css файлик. Но он обязательно в компании с компонентами - блейд, или js -фреймворков (И это, разумеется с позиции бекендера. Если на проекте есть заведующий фронтом - то ему и править балом).
    В любом случае я бы посоветовала не полагаться только на мнение других, а покрутить и пощупать всё самому. Как минимум - они на хайпе, и значит есть вероятность что все равно с ними столкнётесь рано или поздно
    Ответ написан
    Комментировать
  • Как наиболее рационально обновлять данные в моделях Laravel?

    Fernus
    @Fernus
    Техник - Механик :)
    1. Сделать функцию, которая будет на вход получать значение цены и тип валюты...а далее умножать на курс этой валюты при выводе...
    2. Сам курс можно обновлять раз в какое-то время (хоть раз в 10 минут) - не дорогостоящая операция;
    3. В том месте, где будет использоваться цена, использовать функцию из пункта 1.

    Операция умножения при выводе много ресурсов не потратит...
    Ответ написан
    Комментировать
  • Запрос MySQL с исключением нуля?

    @galaxy
    SELECT * FROM myTable WHERE val <> 0 ORDER BY myTable.num DESC LIMIT 1
    ?
    Ответ написан
    Комментировать
  • Запросить один запрос или много?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Три простых правила
    1. Забыть про вопросы производительности. Ничего умного все равно не придумаешь, а глупости делать тем более не нужно
    2. Не выдумывать несуществущие в природе явления как " Грузить проц. колекцией"
    3. Вместо всех этих дурацких фантазий учить SQL.

    Тогда вопросов "как получить данные для графика" вообще возникать не будет
    Ответ написан
    Комментировать