• Отправка почты с формы?

    @MadridianFox
    Web-программист, многостаночник
    Важно не то, где код находится, а то, в какой последовательности данные отправляются/заносятся.
    Если это на одной странице, то старайтесь сделать это одной большой формой, либо собирайте данные с форм и отправляйте потом на сервер сразу все данные.

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

    @MadridianFox
    Web-программист, многостаночник
    Понимание ООП приходит с опытом. Сначала надо написать много кода, самому заметить его недостатки и тогда перечитывая те же самые статейки вы начнёте по новому понимать, что вот конкретно эту штуку можно было бы использовать в том моём коде, и было бы лучше.

    Я разделяю ООП на аутентичное и классическое. Аутентичное, это ООП как его представлял автор - объекты обмениваются сообщениями.
    Классическое - это то как оно реализовано в Java.
    И там и там есть инкапсуляция и полиморфизм. Наследование это приятная фишка классического ООП. Так же как и все пляски с типами. Вообще строгая типизация не является частью ООП. По крайней мере не является частью аутентичного ООП.

    Поэтому переход на typescript позволит только более точно воспроизводить классическое ООП. Ну и проверку типов добавит. Это само по себе полезно, но для ООП никакого значения не имеет.

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

    Заметьте, про js я почти ничего не сказал. Потому что дело не в нём. Дело только в понимании ООП. У языков программирования, конечно, есть различные возможности и ограничения что которые позволяют использовать ту или иную парадигму. Но ООП на js можно было делать и до es6, просто потому что в js можно инкапсулировать код в объект.

    И ещё, когда мы начинаем делить код на объекты, необходим механизм разделения кода на файлы и собирания его обратно. Т.е. нужна модульность. Лучше всего, конечно, использовать webpack, но вроде как в js есть и другие системы. Не сборки, а именно подключения модулей.
    Ответ написан
    1 комментарий
  • Как контролировать работу скриптов-воркеров? Что лучше Crontab?

    @MadridianFox
    Web-программист, многостаночник
    Когда у вас есть очередь сообщений, вам нужны программы, которые запускаются один раз и в цикле читают и обрабатывают сообщения из очереди. Ну и супервизор над ними, который будет их поднимать если они падают.

    Т.е. ваши сервисы не должны запускаться по крону, а должны постоянно работать.
    Ответ написан
    Комментировать
  • Как убрать из js файла, всё не нужное?

    @MadridianFox
    Web-программист, многостаночник
    Вообще некоторые сборщики js кода, такие как webpack и rollup умеют делать tree shaking, т.е. по цепочке импортов и вызовов понимают какой код используется, а какой можно в итоговый бандл не собирать.

    Вот вам в эту сторону копать надо.
    Ответ написан
    Комментировать
  • Прога мониторинга ресурсов linux из windows типа Диспетчера задач?

    @MadridianFox
    Web-программист, многостаночник
    ssh + htop
    а вообще мониторинг серверов это очень обширная тема
    Ответ написан
    Комментировать
  • Является ли данный код защищенным от SQL инъекций?

    @MadridianFox
    Web-программист, многостаночник
    От инъекции как таковой код защищён. По крайней мере в лоб передать кусок запроса уже не получится.
    Однако надо проверять что пользователь передаёт название существующего поля, чтобы код не падал.
    А ещё надо следить чтобы сервер автоматически не превращал параметры запроса в переменные, чтобы пользователь, случайно или умышленно, не затёр вам $fields собственным массивом.
    Хотя мне кажется это первое чему учат, когда говорят про безопасность в PHP)
    Ответ написан
    3 комментария
  • Возможно ли в PhpStorm открыть файл по ftp без синхронизации?

    @MadridianFox
    Web-программист, многостаночник
    Без создания проекта нельзя.
    Но создав проект, можно настроить deployment, не важно чего в куда, главное что в окошке просмотра remote host вы сможете видеть файлы на сервере.
    Двойной клик по файлу откроет его для редактирования.
    Это будет неудобно т.к. файл на сервер будет отправляться не по Ctrl+S а по нажатию отдельной кнопки.

    Ну и вы теряете все функции IDE - никакого индексирования и умных подсказок. С таким же успехом можно (и даже может быть удобнее) пользоваться WinSCP.
    Ответ написан
    Комментировать
  • Можно ли учиться программированию по небольшим проектам людей(боты,чаты)?

    @MadridianFox
    Web-программист, многостаночник
    Нужно.
    Ответ написан
    Комментировать
  • Почему не увеличивается значение в базе данных?

    @MadridianFox
    Web-программист, многостаночник
    У вас запросы неправильные.
    Должно быть
    UPDATE golosa SET var1 = '$row[1]' where id = 1

    А вообще лучше изменить логику работы всего скрипта.
    Вы можете в форме знfчением радиокнопок делать не название картинки, а их id.
    Тогда можно будет выполнить запрос вида:
    UPDATE golosa SET var1 = var1 + 1 where id = ?
    и с помощью prepared statements подставить id картинки в запрос.
    Ответ написан
  • Как обратиться к this конструктора?

    @MadridianFox
    Web-программист, многостаночник
    function Constr() {
        let self= this; // <<<<<<<<<<<<
        this.onStart = function () {
            console.log('start');
        };
        this.func = function () {
            navigator.getUserMedia({audio: true}, function (stream) {
                self.onStart()  // <<<<<<<<<<<
                },
                function (error) {
    
                });
        }
    }
    Ответ написан
    2 комментария
  • Как работает интеллектуальное автодополнение кода?

    @MadridianFox
    Web-программист, многостаночник
    В автодополнении есть две крайности.
    Вариант один - просто разбиваем текст на слова, добавляем в список ключевые слова текущего языка и как-нибудь подсказываем то что начал набирать программист.
    Вариант два - выполняем честный анализ кода, прям как это делает компилятор/интерпретатор, и в зависимости от контекста в котором набирается слово подсказываем только возможные варинты. Ну например, если мы набираем определение класса, то после названия может быть либо extends либо implements. Если набрали extends то дальше однозначно будет название класса, причём не финального.

    Каждый редактор кода использует свой подход, причём совсем не обязательно что точно один из двух, может быть смесь в любых пропорциях.
    Ответ написан
    1 комментарий
  • Как подружить Windows 10 + Docker + PhpStorm + Xdebug?

    @MadridianFox
    Web-программист, многостаночник
    Я для себя определил универсальный подход для отладки в любом сетевом окружении.
    В простейшем случае, когда разработчик один, а сервер за NAT, надо на сервер прокинуть порт через ssh.
    ssh user@host -R 9000 localhost:9000
    При этом в php.ini xdebug надо настроить чтобы он коннектился на localhost:9000.

    Когда разработчиков много, я использую модифицированный dbgp прокси.
    https://github.com/MadridianFox/php-xdebug-proxy
    Если он стоит на том же сервере что и php, настройки xdebug те же. Прокси слушает 9000 порт. Каждый разработчик выбирает себе уникальный порт и прокидывает его по ssh на сервер. Так же надо обратно прокинуть 9001 порт чтобы зарегистрировать свой idekey в прокси.
    ssh user@host -R 9002 localhost:9002 -L 9001 localhost:9001

    И самое главное - при регистрации своего idekey через шторм в поле idekey надо написать myidekey:9002
    В этом же окне порт прокси - 9001, хост прокси - localhost.

    В настройках шторма указываем что для отладки надо слушать 9002 порт.

    В браузере, не важно, используете вы расширение или прописываете XDEBUG_SESSION_START, надо указать myidekey без порта!

    В случае с докером вы можете либо добавить ssh сервер в контейнер с самим php, либо поднять дополнительный ssh контейнер. При единоличной разработке этого достаточно. Просто в зависимости от размещения ssh прописываете разные хосты в xdebug. Прокидывает туда порт.

    Если разработчиков больше одного - выделяете контейнер с ssh + dbgp прокси и каждый разработчик прокидывает туда свой порт.
    Ответ написан
    Комментировать
  • Как избежать удаления добавленных с помощью jQuery классов при ajax обновлении?

    @MadridianFox
    Web-программист, многостаночник
    Запоминайте какие классы куда добавили и при обновлении расставляйте их заново.
    Ответ написан
  • Почему функция возвращает данные последней итерации?

    @MadridianFox
    Web-программист, многостаночник
    Вы создаёте замыкание, которое ссылается на переменную i. Ключевое слово "ссылается", т.е. функция обработчик не запоминает значение i на момент своего создания, а просто "знает", что где-то есть i. В момент выполнения любого обработчика i равно последнему индексу.
    Ответ написан
    Комментировать
  • Как сделать автокоплит для объектов в цикле foreach?

    @MadridianFox
    Web-программист, многостаночник
    phpdoc для метода getRoutes напишите и укажите в нем тип возвращаемого значения.

    Или можно /** @var $route Type */ в теле цикла указать.
    Ответ написан
    Комментировать
  • Как создавать scorm курсы?

    @MadridianFox
    Web-программист, многостаночник
    Насколько я знаю, скорм-пакет это архив с манифестом и ресурсами. От страницы отличается тем, что скорм-пакет это средство передачи курсов. За хранение и воспроизведение отвечает уже система, куда этот пакет импортируется.
    Ответ написан
    2 комментария
  • Как ограничить количество записей для пользователя в таблице PostgreSQL?

    @MadridianFox
    Web-программист, многостаночник
    Засовывать бизнес-логику в бд имеет смысл в двух случаях: 1 - для повышения быстродействия в очень критичных к этому местах, 2 - когда бд используется разными системами, для которых нельзя выделить общий код.

    Ваш случай не такой, поэтому правильнее сделать проверку на JS.
    Ответ написан
    Комментировать
  • Как получить текст кнопки, выведенной из массива?

    @MadridianFox
    Web-программист, многостаночник
    Внимательно посмотрите на функцию test. Она принимает event, но печатаете вы btn. Откуда там btn? Информацию о кнопке вы должны брать из event, а переменная btn скорее всего содержит то, что в неё было записано на последней итерации цикла.
    Ответ написан
  • Почему input type="range" имеет такой вид?

    @MadridianFox
    Web-программист, многостаночник
    Потому что браузер игнорирует неизвестный ему тип инпута и считает его равным text
    Ответ написан
  • Как сохранить ключ кириллицей в config.ini?

    @MadridianFox
    Web-программист, многостаночник
    Попробуйте сначала конвертировать строку в utf-8, а потом использовать её как ключ.

    Как вариант - сменить кодировку конфига на cp1251 или koi8r, ну и ключи перед записью тоже конвертировать в соответствующую кодировку.
    Ответ написан
    4 комментария