• Как сделать так чтобы код был виден постоянно без скролинга?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо научиться писать код нормально и не городить огромные лестницы из условий.
    Во-первых, надо не ваять огромные простыни кода, а разбивать его на боле мелкие функции.
    Во-вторых, если какой-то код выполняется только при определенном условии, то надо сначала проверить условие, и если оно не выполнилось, то сразу завершить обработку. То есть
    if (something == false) {
        return
    }
    // дальнейший код
    if (something selse) {
    }

    вместо
    if (something == true) {
        // дальнейший код
        if (something selse) {
        }
    }


    А просто длинные строки - например SQL запросы - переносить средствами кода, разбивая на несколько. Через heredoc или конкатенацию.
    Ответ написан
    Комментировать
  • Есть ли сайт, на котором можно узнать разницу между двумя английскими словами?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Интересный вопрос.
    Как минимум есть неинтерактивный сервис, https://ell.stackexchange.com/, где можно задать этот вопрос в ручном режиме.

    А насчет автоматического ответа - ну, наверное, самый смешной вариант - это использовать всем известный сервис.

    То же самое касается и запроса
    ввести слово и приложение/сайт выдал контекст, в котором оно употребляется.
    Ответ написан
    Комментировать
  • Как добавить новую запись в существующую таблицу?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В целом направление верное, надо только соблюдать верный синтаксис. То есть выбирать сущевтвующие поля по отдельности, а не склеивать их зачем-то в одно через CONCAT

    Плюс вы выполняете не тот запрос, который показываете, а какой-то, в котором iNSERT написано с маленькой буквы, и перед ним еще зачем-то болтается `goods_categories`
    Ответ написан
    Комментировать
  • Когда стоит начинать учить фреймворки?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну, по-хорошему, ещё рановато.
    Всё-таки, фреймворки служат для ускорения разработки веб-приложений, а не одностраничных черновиков.
    При чем это очень важный момент.
    Не использовав в своей работе всё, что требуется при разработке веб-приложения (в том числе безопасность, следование рекомендациям протокола НТТР, валидация данных, и примрно ещё десяток нужных вещей) - то не сможешь реально понять, как много фреймворк делает за тебя.
    Ответ написан
    Комментировать
  • Какой максимальный диапазон чисел в for i in range?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Господи, ну нельзя заниматься программированием с такими представлениями о логике.
    Причем не о какой-то там хитрой математической логике, а о логике своих действий.

    Неужели так трудно проверить свое собственное утверждение?
    for i in range(200000, 500000):
        if (i < 200005):
            print(i)
        if (i == 200005):
            print('...')
        if (i > 499995):
            print(i)


    Где здесь 0? Где здесь 208?
    С чего вы взяли, что эти цифры вообще берутся из этого цикла, а не откуда-то еще?

    Программист всегда должен проверять свои догадки.
    И если они не подтвердились, то искать другое объяснение своим проблемам.
    Ответ написан
    1 комментарий
  • Как удалять файлы с сервера по условию, что они не используются в текущий момент?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    В таких условиях надо делать вытесняющий кэш.
    Если при запросе нового файла выясняется, что для него нет места, то удаляется самый старый файл.

    Хотя конечно непонятно, как это всё поможет в ситуации, когда заходят посмотреть сразу 20 разных событий.
    Ответ написан
    1 комментарий
  • Мощнее ли пароль, содержащий китайские иероглифы?

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

    Для непонятливых могу пояснить:

    Всем хуже
    У английского слова устойчивость так же, но при этом нет проблем с вводом пароля с любого устройства или интерфейса.
    Ответ написан
    Комментировать
  • Почему не работает php внутри html?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Причин может быть примерно миллион.
    Например, сервер смотрит на файлик .htaccess и в упор его не видит
    Для начала надо уточнить, что все это крутится под веб-сервером Апач и что в нем включена директива AllowOverride
    Ответ написан
  • Почему функция sort не сортирует, а выдает bool?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Наверное потому что она так устроена? И это поведение описано в документации?
    Ответ написан
    3 комментария
  • Как выполнить вызов метода в другом методе?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    call_user_func нинужна
    class A
    {
        function execute($function, $params = []) {
            return $function(...$params);
        }
        function payload($param) {
            return $param * $param;
        }
    }
    $a = new A;
    echo $a->execute([$a, 'payload'], [5]);


    а можно ещё так, если объект тот же самый

    class A
    {
        function execute($function, $params) {
            return [$this,$function](...$params);
        }
        function payload($param) {
            return $param * $param;
        }
    }
    $a = new A;
    echo $a->execute('payload', [5]);
    Ответ написан
  • Как можно охлаждать помещение?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Решение очевидное. Поскольку из этого всего толком шумит только нас, то поменять этот металлолом на SSD
    Ответ написан
  • Как понять что делает данный код php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Гадость.
    Тут даже смотреть не надо чтобы понять, что код делает гадость

    код ниже после __halt_compiler(); никак не интерпретируется языком PHP, что явно следует из названия этой функции.
    Ответ написан
    1 комментарий
  • Насчет экспорта таблицы MySQL в Excel средствами PHP?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну например можно генерить html

    Кстати, в этом примере просто попробуйте Content-Type: text/csv
    только вместо разделителя тогда лучше использовать точку с запятой.
    Ответ написан
    2 комментария
  • Как в mysql.connector отключить добавление одинарных кавычек?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Никак.
    Собирать запрос через f-word и выполнять без параметров.
    Ответ написан
    Комментировать
  • Как создать архитектуру БД для заказов продуктов и услуг в приложений?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    У вас какой-то странный магазин был изначально.
    Обычно делается две таблицы, orders и order_details, во вторую пишется состав заказа, в котором фиксируется цена, скидка и все такое прочее.
    Доставка - это не дополнительная услуга, а отдельная сущность, привязанная к заказу, со своими заморочками.
    Остальные доп. услуги - это обычные товары, которые кладутся в корзину.
    Вип статус - плюшка пользователя, а не покупки. При оформлении заказа она просто учитывается при подсчете стоимости.
    Ответ написан
  • Как вставить данные в две таблицы сразу?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    1. Вставить в первую
    2. Вставить во вторую.

    При возникновении ошибок - прочитать и исправить.
    Ответ написан
    5 комментариев
  • Как объединить поиск по тегам и названию поста в MySQL?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В запросе ничего сложного, всё так, как вы и описали
    Только, разумеется, в одном запросе.

    Для этого пора бы уже освоить джойны. Нормализацию БД вы освоили - это прекрасно.
    Джойны - тоже не бином ньютона, это основа SQL. Второй запрос не нужен, всё делается в одном
    Сначала выбираем фильмы по тегам
    select f.* from sakila.category c
    join sakila.film_category fc on fc.category_id = c.category_id
    join sakila.film f on f.film_id = fc.film_id
    where c.name in ('Action', 'Drama') 
    group by f.film_id;

    Если хотим добавить поиск по заголовку, то просто добавляем к этому же запросу еще условие во WHERE, and description like '%Drama%'
    https://sqlize.online/sql/mysql57/8d7c91ad5f6cf415...

    Правда на таких объемах LIKE делать не рекомендуется. Но если сейчас работает по всей базе, то по десятой части и подавно будет. Но в целом надо уже прикручивать внешний поисковый движок, ElasticSearch. Ну или хотя бы добавить полнотекстовый индекс по названию (и тексту тогда уж заодно) и искать в них через match...against
    Ответ написан
    2 комментария
  • Как оптимизировать базу данных?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Чтобы оптимизировать сайт по скорости загрузки, надо не читать разный мусор в интернете, а сначала разобраться, в каком именно месте тормозит.
    Потом с этим местом приходить на Хабр

    Бессмысленность хаотичных телодвижений на основании информации из интернета показывает уникальный индекс на id, который здесь нужен как корове седло.
    И полный АДЪ в виде ключа normal.
    Ответ написан
    2 комментария
  • Добрый день. Вопрос по Python связанный с вводом данных. Вводить число надо так чтобы программа принимала числа со знаками после запятой?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Давайте посмотрим на код вашей программы.
    a, b, c, d = map(int, input().split())

    Как вы думаете, что делает функция, выделенная жирным шрифтом?
    Ответ написан
    Комментировать
  • Какой лучше взять ORM?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это хороший вопрос, но ответ на него зависит от вашего уровня. Очень сильно зависит.
    Специалисты вам наверняка посоветуют Doctrine или Cycle. Но вы их явно не потянете.
    Для знакомства с ORM я бы порекомендовал Eloquent, при всех минусах этого выбора.

    Но если честно, то учитывая, что вы ищете замену RB, я бы порекомендовал начать с самого простого.
    spoiler
    Написать ORM руками. Причем даже не классический, поддерживающий связи и квери билдер, а совсем простой Table Gateway, типа такого:
    abstract class BasicTableGateway
    {
        protected $db;
        protected $table;
        protected $fields;
        protected $primary = 'id';
    
        public function __construct(\PDO $db)
        {
            $this->db = $db;
        }
        public function read($id): ?array
        {
            $stmt =$this->db->prepare("SELECT * FROM `$this->table` WHERE `$this->primary`=?");
            $stmt->execute([$id]);
            return $stmt->fetch();
        }
        public function insert($data): int
        {
            $this->validate($data);
    
            $fields = '`'.implode("`,`", array_keys($data)).'`';
            $placeholders = str_repeat('?,', count($data) - 1) . '?';
            $sql = "INSERT INTO `$this->table` ($fields) VALUES ($placeholders)";
            $this->db->prepare($sql)->execute(array_values($data));
            return $this->db->lastInsertId();
        }
        protected function validate($data)
        {
            $diff = array_diff(array_keys($data), $this->fields);
            if ($diff) {
                throw new \InvalidArgumentException("Unknown field(s): ". implode($diff));
            }
        }
    }

    И дальше применять его примерно так
    class UserGateway extends BasicTableGateway {
        protected $table = 'gw_users';
        protected $fields = ['email', 'password', 'name', 'birthday'];
    }
    $userGateway = new UserGateway($pdo);
    $data = [
        'email' => 'foo@bar.com',
        'password' => 123,
        'name' => 'Fooster',
    ];
    $id = $userGateway->insert($data);
    $user = $userGateway->read($id);
    echo json_encode($user),PHP_EOL;

    И никаких тебе "бинов" - обычный ПДО, обычные массивы, все просто и наглядно.


    Хотя пожалуй Dr. Bacon прав, вам и это будет сложновато. Возьмите лучше просто функцию:
    function pdo($pdo, $sql, $args = NULL)
    {
        if (!$args)
        {
             return $pdo->query($sql);
        }
        $stmt = $pdo->prepare($sql);
        $stmt->execute($args);
        return $stmt;
    }

    и дальше просто запросами

    // Create
    pdo($pdo, "INSERT INTO users VALUES (null, ?,?,?)", [$name, $email, $password]);
    // Read
    $user = pdo($pdo, "SELECT * FROM users WHERE email=?", [$email])->fetch();
    // Update
    pdo($pdo, "UPDATE users SET name=:name WHERE id=:id", ['id'=>$id, 'name'=>$name]);
    // Delete
    $deleted = pdo($pdo, "DELETE FROM users WHERE id=?", [$id])->rowCount();


    После того, как SQL будет отскакивать от зубов - можно будет посмотреть в сторону какого-нибудь ORM
    Ответ написан
    1 комментарий