Задать вопрос
  • Можно ли заменить кликанье мышью по веб-интерфейсу cli-командой?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Смотрите в консоли браузера, что передаётся со страницы в устройство. Потом делайте аналогичные запросы, например, через curl.
    Ответ написан
    2 комментария
  • Подключние к базе данных из класса - насколько правильно?

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

    и уже неправильное

    Учим основы:
    - на локальном сервере это вот try catch echo является бессмысленным: если убрать всю эту нелепую копипасту, РНР и сам выведет то же самое.
    - на боевом сервере этот код является вредным: внутренние ошибки РНР мы никогда не светим наружу. Пользователь их не поймёт, а для хакера они бесценны.
    Поэтому убираем бессмысленное try catch и оставляем только соединение
    $sql_connect = new PDO("mysql:host=". DB_HOST .";dbname=". DB_NAME. ";charset=utf8mb4", DB_USER, DB_PASS, $pdo_options);

    Опять же убрав из него нелепые кавычечьки.

    насколько правильный такой подход

    Этот подход практически идеальный

    Можно изменить подход так, что бы не использовать конструктор

    Можно, но не нужно.
    Сейчас всё чётко видно, откуда берётся соединение с БД, и где оно нужно. Одна переменная в конструкторе - это не то место, где надо лениться и изобретать способы её не писать. В будущем, когда освоите автоматический вызов классов - тогда оно будет подставляться само. Но всё равно через конструктор.
    Ответ написан
  • Как исправить ошибку "No connection could be made because the target machine actively refused it"?

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

    Вот я беру вашу ошибку, "No connection could be made because the target machine actively refused it" копирую в гуголь (если не понимаю по-английски, то добавляю слово "ошибка"), и оно мне человеческим голосом говорит,
    Ошибка «No connection could be made because the target machine actively refused it» означает, что сервер, к которому вы пытаетесь подключиться, либо не запущен, либо недоступен, либо не слушает соединение на указанном порту. Чаще всего эта проблема связана с тем, что целевой сервер не запущен или неправильно настроен, но также может указывать на переполненный резерв сервера или проблемы с брандмауэром.

    Что конкретно вам непонятно в этом объяснении?

    Добавляю к запросу слово openserver и получаю
    Ошибка «No connection could be made because the target machine actively refused it» при работе с Open Server означает, что сервер не запущен или недоступен, или же неправильно указан порт. Чтобы исправить это, нужно запустить Open Server из папки установки и убедиться, что серверные компоненты работают, или проверить правильность адреса и порта в настройках приложения, которое пытается подключиться.

    Что конкретно непонятно в этой инструкции?

    (а потом поколение снежинок удивляется, почему к ним такое отношение. сейчас уже даже по ссылкам ходить не надо, умная железка уж и разжёвывает, и в рот кладёт - а они всё "моя твоя не понимаю"!)
    Ответ написан
    1 комментарий
  • Почему Laravel 9 врет про ошибки?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    Blade в этом плане сложен - он "компилируется" в настоящий php и кэшируется, поэтому реальный стек сложно сопоставить с исходником.

    Поэтому надо писать в нём минимум логики, а всю работу производить в контроллере. В шаблоне у вас не должно быть никаких $_GET и уж конечно никаких
    $cats=$site->qa("select * from categories where catid=0  order by name asc");
    Тогда они будут простыми и ошибку будет сложнее совершить и гораздо легче найти. А если она случится в контроллере, то там уже трейс будет нормальный.
    Использовать нормальный фреймворк, но при этом писать в нём код так, как будто на дворе до сих пор PHP 5.2 - это странно.
    Ответ написан
    2 комментария
  • Как в выборке sql обратиться к предыдущей записи?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    ORDER BY date DESC 
    LIMIT 2

    Получите последнюю и предпоследнюю записи.
    Ответ написан
    Комментировать
  • Как в выборке sql обратиться к предыдущей записи?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Я просто вставляю order by date (поле даты) и забираю последнюю строчку.

    Глупо.

    Используй ORDER BY date DESC - и тогда можно, во-первых, брать первую строку, а не мотать вниз до последней, во-вторых, нужная "предыдущая" строка при обратной сортировке будет "следующая" - ну то есть вторая.

    PS. Дата - ненадёжный критерий сортировки. За один день комп могут сдать на склад и выдать другому товарищу - и будешь ты гадать, какая из двух записей актуальная, а какая для неё предыдущая. Я уж не говорю о вводах и корректировках "задним числом".
    Ответ написан
    1 комментарий
  • Как работает регистрация и аутентификация с помощью ЭЦП?

    Есть два стандарта:
    1. Международный FIDO2 (работает из коробки в большинстве браузеров)
    2. Российский ГОСТ Р 34.10 (требует специальный плагин в браузер и установленный csp)

    Работают они по схожей схеме, различается только момент с выпуском сертификатов.

    1. Клиент каким-то образом генерирует ключевую пару (закрытый ключ шифрует, открытый расшифровывает).
    Тут используется одно из двух: RSA или Эллиптические кривые.
    2. Клиент передаёт свой публичный ключ на сервер

    При аутентификации:
    1. Клиент сообщает, кто он есть
    2. Сервер генерирует челендж (просто длинное случайное число, которое определенным критериям отвечает)
    3. Клиент шифрует этот челендж своим закрытым ключом
    4. Сервер расшифровывает его открытым ключом и сравнивает, что результат получился такой, какой он и сгенерировал изначально.

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    У вас файл создан под Уиндоуз, в которой в качестве разделителя строк используется последовательность \r\n
    Разбивая по \n, вы в конце каждой строки оставляете висеть символ \r, и в итоге при сравнении совпадает только последний элемент файла, после которого нет перевода строки

    Для чтения файлов в РНР есть специальная функция. Которая понимает любые переводы строк, и умеет их автоматически удалять.
    $array = file(JPATH_SITE.'/list.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

    И всё сразу начнёт находиться.
    Ответ написан
    Комментировать
  • Почему не срабатывает удаление класса?

    dmitryfx
    @dmitryfx
    1) нет такого метода getElementbyId, есть getElementById
    2) Если не обернуть скрипт в window.addEventListener( 'load', () => { //script }); то на этапе выполнения скрипта getElementById вернут null, т.к. эти дом-элементы еще не созданы.

    Учитесь пользоваться devtools и средой разработки, вроде VS Code с плагинами, они вам не дадут ошибаться в названиях методов (метод querySelectorALL тоже не существует)
    Ответ написан
    Комментировать
  • Разбивка на страницы?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Чтобы ограничить количество выводимых страниц требуется знание арифметики в пределах начальной школы.
    Чтобы вместо 1 и $num_pages использовать заранее рассчитанные значения, укладывающиеся в определённый интервал. Например 10 страниц.
    То есть надо всего лишь определить начальную и конечную цифры, которые подставлять в for вместо 1 и $num_pages.
    Например, если мы хотим выводить только 10 страниц, а текущую выводить посередине то для получения первой цифры надо отнять от текущей 4. Затем к ней надо прибавить 9 - так мы получим второе число.
    При этом, разумеется, надо проверить, чтобы первое не было меньше 1, а последнее - больше $num_pages.
    А дальше просто подставить их в for. Вот и всё.
    Ответ написан
    2 комментария
  • Как в верстке сделать уши у контейнера?

    delphinpro
    @delphinpro Куратор тега Вёрстка
    frontend developer
    Проще всего не запихивать все блоки в один общий контейнер, а прописывать каждому блоку внутри свой отдельный.
    И тут появляется много вариантов. вот один из них. https://codepen.io/delphinpro/pen/bNGPwyN



    или так https://codepen.io/delphinpro/pen/dPyBpEq

    Ответ написан
    Комментировать
  • Как вернуть коммиты после rebase?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Почему «пропали» коммиты?

    Главная ошибка — использование --amend во время rebase.
    Команда git commit --amend не создает новый коммит, а перезаписывает предыдущий.

    Когда вы время интерактивного rebase на каждом шаге делаете --amend, вы по сути всё время заменяете один и тот же коммит. Остальные коммиты, которые Git должен был «применить» в процессе ребейза, просто исчезают, потому что их заменили.

    Как делать правильно?

    Во время rebase -i вместо amend нужно:

    git add <файлы> #  главное проиндексировать правки файлов
    git rebase --continue # тут гит уже сам сделает git commit --no-edit
    Вручную делать git commit перед continue имеет смысл только если вы хотите поменять ещё и сообщение коммита.

    Как восстановить утерянные коммиты

    Git не удаляет коммиты сразу. Они остаются в репозитории и доступны в reflog — журнале ссылок.

    Их можно найти так: git reflog

    Затем восстановить ветку: git reset --hard <хеш_из_reflog>

    Вывод

    Это не баг Git, а ожидаемое поведение. Просто rebase + amend — взрывоопасная смесь, особенно если не до конца понимать, что происходит.
    Ответ написан
    Комментировать
  • Возможно ли восстановить данные с нерабочего смартфона?

    15432
    @15432
    Системный программист ^_^
    Да, для этого процессор и память перепаивают на полностью рабочий донорский телефон, запускают и извлекают данные. Обычно стоит дорого, но данные важнее
    Ответ написан
    5 комментариев
  • На сайте очень много видео. Какие есть идеи в оптимизации?

    @alexalexes
    Отображать превью видео, вместо видео. Когда пользователь наведет мышью на превью (окажется в области просмотра в мобильной версии сайта), то заменять превью на видео или на облегченную версию видео.
    Ответ написан
    1 комментарий
  • Бест практис разработки регистрации с подтверждением по email?

    @alexalexes
    1. Активные пользователи хранятся там же, где неактивные пользователи - в нормальной реляционной СУБД, а не редис.
    Активный пользователь отличается от неактивного, наличием даты-время подтверждения эл. почты. В этой же записи пользователя в отдельном атрибуте храните сгенерированный хеш-код для подтверждения, который используете в ссылке.
    2. В неавторизованном состоянии предусматриваете возможность повторной высылки кода подтверждения на указанный эл. адрес. (Прямо отдельная форма).
    3. Любые действия, связанные с высылкой письма должно подтверждаться проверкой пользователя, что он человек (капча, или использование сторонних сервисов проверки).
    4. Скрипт, который обрабатывает ссылку подтверждения почты тоже должен иметь защиту от ддоса.
    Все.
    Ответ написан
    7 комментариев
  • Кривая работа функции date php?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Неделя начинается с понедельника и идентифицируется своим порядковым номером в году. Первой календарной неделей года считают первую неделю, содержащую первый четверг текущего года. Последней календарной неделей календарного года считают неделю, которая предшествует первой календарной неделе следующего года. ISO 8601.
    Соответственно, 2024-12-29 - воскресенье, последний день последней, 52-й недели года.
    2024-12-30 - понедельник, входящий в неделю, где четвергом является 2025-01-02, то есть в первую неделю 2025 года.
    Ответ написан
    6 комментариев
  • Почему не могу зайти в phpmyadmin, 404 Not Found?

    @dodo512
    location ~ ^/phpmyadmin/(.+\.php)$ {
        root /usr/share/phpmyadmin;

    Путь к файлу формируется путём простого добавления URI к значению директивы root.

    URI = /phpmyadmin/index.php
    root = /usr/share/phpmyadmin

    В итоге nginx будет искать файл /usr/share/phpmyadmin/phpmyadmin/index.php

    Если в root убрать лишний /phpmyadmin.

    location ~ ^/phpmyadmin/(.+\.php)$ {
        root /usr/share;

    nginx будет искать файл /usr/share/phpmyadmin/index.php
    Ответ написан
    Комментировать
  • Стоит ли использовать Django для создания многофункционального сайта?

    @Belvarm
    Java TeamLead, интеграционные решения
    Стоит использовать те фреймворки, которые вы знаете, а то будет мало пользы
    Ответ написан
    Комментировать
  • Почему PHP выполняет математические операции неправильно?

    Коротко - потому что IEEE 754

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

    Точно также, как мы не можем записать все цифры числа 1/3 в десятичной системе, точно также и компьютер иногда не может записать все цифры в двоичной.

    Если ты работаешь с деньгами, то тогда используй то, что делают все банки - представляй суммы денег не как дробные числа, а как целые. Например место 1.5 рублей записывай как 150 копеек. Запятую добавишь при выводе человеку.
    btw тут в комментах пишут, что для денег тоже есть паттерн по-лучше конкретно для php.

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

    Если ты делаешь какие-то математические вычисления - возможно тебе нужны рациональные числа.
    Не знаю, что обычно для этого в пхп используют, но нагуглил https://github.com/webgriffe/rational
    https://github.com/markrogoyski/math-php

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

    Если тебе критически важна скорость, а точность - не так важна, то оставайся на IEEE754 и просто округляй то N значимых цифр (обычно больше 5 цифр мало кому нужно)
    Ответ написан
    13 комментариев
  • Почему PHP выполняет математические операции неправильно?

    Vamp
    @Vamp
    Потому что типом данных double нет возможности представить число 0.58. Поэтому компьютер берёт наиболее близкое к 0.58 число, которое double может выразить.

    Если вам нужны точные вычисления, то следует воспользоваться специальными функциями:

    $format = bcdiv("580000000", "1000000000", 2); // "0.58"
    
    var_dump(bcmul($format, "100")); // string(2) "58"


    Существует даже специальный сайт, рассказывающий о данной особенности математики чисел с плавающей запятой: https://0.30000000000000004.com/
    Ответ написан
    Комментировать