Задать вопрос
  • Обычный метод копируется для каждого объекта или PHP оптимизирует и не делает копию методов для объектов?

    @alexalexes
    Объекты - разные, метод - один и тот же.
    Когда вы второй раз вызываете new для уже определенной переменной, выделяется память под новый объект, объект создается заново. Адрес памяти, куда ссылалась до этого $a зачищается сборщиком мусора по мере его возможностей.
    PS: new буквально говорит "возьми ресурсы системы и построй мне объект по чертежу Foo!!!"
    Ответ написан
  • Взаимная замена в SQL?

    @alexalexes
    А почему нельзя использовать решение влоб?
    Проход по таблице всего лишь один раз происходит.
    UPDATE provodka p
     SET p.code = CASE
    when p.code = 20501 then 20502
    when p.code = 20502 then 20501
    else p.code
    END
    Ответ написан
    Комментировать
  • Как вывести на старый телевизор изображение с ноутбука?

    @alexalexes
    Вам нужен конвертер HDMI to RCA.
    Цена вопроса на Али ~500 руб.
    Ответ написан
    1 комментарий
  • Как сделать автофокусировку на поле ввода только на одной странице?

    @alexalexes
    На мобильнике, как правило, есть тачскрин.
    Я, обычно, проверяю наличие тач-обработчиков.
    И не важно, что за устройство: яблоко, андроид и тд.
    if ('ontouchstart' in document.documentElement) 
    {
    // есть сенсорный экран, значит, имеем дело с переносным гаджетом.
    }
    else
    {
      // desktop версия кода
     (элемент ввода).focus(); //устанавливаем фокус
    }
    Ответ написан
    Комментировать
  • Динамическое добавление ссылок на js скрипты в заголовок?

    @alexalexes
    Хватит и нативной составляющей, чтобы в документ добавить любой head.
    А вообще, смотрите скрипты счетчиков Яндекс или Гугл -метрики, там есть более компактные трюки с модификацией head.
    (function()
    {
      var src = 'https://cdn.jsdelivr.net/npm/suggestions-jquery@17.12.0/dist/css/suggestions.min.css';
      var link = document.createElement('link');
      link.setAttribute('src', src);
      link.setAttribute('type', 'text/css');
      link.setAttribute('rel', 'stylesheet');
     document.head.appendChild(link);
    
      src = 'https://cdn.jsdelivr.net/npm/suggestions-jquery@17.12.0/dist/js/jquery.suggestions.min.js';
      var scrt = document.createElement('script');
       scrt.setAttribute('src', src);
      document.head.appendChild(scrt);
    }
    )();
    Ответ написан
    Комментировать
  • Как обновить прошивку веб-камеры, имея доступ только по телнету?

    @alexalexes
    Как вариант, попросить у тех. поддержки конкретную прошивку и конкретный загрузчик.
    Прошивки вот:
    http://www.sunellsecurity.com/custom/download/#typ...
    Есть еще софт, если выбрать в выпадающем списке, возможно, там есть загрузчик.
    Обратите внимание на примечание к файлам прошивок:
    www.sunellsecurity.com/data/download/Firmware/Firm...
    Там есть коды вида 54/xx. Но 54/12 нет наименования - уточнить у тех. поддержки.
    Ответ написан
  • Javascript. Как вернуть несколько значений через запятую?

    @alexalexes
    scheduler.attachEvent("onEventSave",function(id,ev,is_new)
    {    
      var checked_users = ev.username.split(','); // переводим строку в список отмеченных id пользователей
      var new_text = ''; // сюда будем писать строку с именами пользователей
      var checked_users_count = checked_users.length; // кол-во отмеченных пользователей
      for (var i = 0; i < checked_users_count; i++)
      {
        var check_user_id = checked_users[i]; // текущий отмеченный id
        var ch_users = users.filter(usr => usr.key == check_user_id); // получаем человека из списка users по отмеченному id (на выходе тоже список, но не более 1 элемента)
        if (ch_users.length > 0)
          new_text += (new_text != '' ? ', ' : '') + ch_users[0].label; // вписываем в строку найденного пользователя
      }
      ev.text = new_text == '' ? 'Nobody' : new_text; // если никого не нашли, то как-то обозначаем эту ситуацию (Nobody)
      return true;
    })
    Ответ написан
    Комментировать
  • Как безопасно загрузить изображение на сервер?

    @alexalexes
    На стороне PHP пропустить полученный файл через GD библиотеку.
    При необходимости, уменьшить качество выходного файла, и попутно сгенерировать preview, отправив его обратно клиентку (+ подтвердив получение сервером).
    Учтите, придется увеличить доступный объем оперативной памяти для одного процесса PHP.
    На моем опыте, чтобы GD проглотила 16 Мпикс картинку, нужно 128 Мб ОЗУ.
    Перед скармливаем GD взвешиваем картинку с помощью getimagesize().
    Если это не сделать, и с превышением лимита отдать на обработку библиотеке, то скрипт тихо-мирно заглохнет, не сообщив клиенту ничего, а так можно сгенерировать сообщение, что файл большой.
    Ответ написан
  • Как защищится от sql инекции без ооп в php?

    @alexalexes
    А причем тут боязнь ООП?
    В документации описаны, как прикрепить параметры к запросу как в объектно-ориентированном стиле, так и в процедурном. Реализовать общение с СУБД можно и в том, и в другом стиле, если речь идет про MySQl.
    php.net/manual/ru/mysqli-stmt.bind-param.php

    PS: Вы просто боитесь усваивать документацию, пробовать различные примеры реализации. Вот и все.
    Ответ написан
    3 комментария
  • Правильный запрос к MySQL?

    @alexalexes
    Запрос выполнился. $res не хранит выборку.
    Выборку надо вытянуть fetch-функцией.
    Ответ написан
    Комментировать
  • Как сделать, чтобы все нечекнутые и чекнутые чекбоксы отправлялись на бэк?

    @alexalexes
    Сталкивался с такой особенностью, решал как раз через дополнительное поле hidden:
    <label>
    <input type="hidden" id="field_0_1" name ="param_list[0][field_1]" value="off"/>
    <input type="checkbox" onchange="set_hidden_checkbox(this, 'field_0_1')"/>
    </label>

    function set_hidden_checkbox(target, id)
    {
      var hidden = document.getElementById(id);
      if(hidden !== undefined)
         hidden.value = target.checked ? 'on' : 'off';
    }

    Атрибут value в hidden нужно инициализировать значением по умолчанию.
    Ответ написан
    Комментировать
  • Что не так в фильтре?

    @alexalexes
    В чекбоксах используется принудительное изменение window.location.href на onchange - это вызывает перезагрузку страницы с новыми параметрами. Построением классической формы и отправкой параметров по атрибутам name даже и не пахнет. (Вероятно, из-за "числовых" имен get-параметров).
    а) В select нужно аналогично на onchange событии проанализировать, какую опцию выбрали и сконструировать аналогичным методом url для перезагрузки страницы с новыми параметрами, подставив новый url в window.location.href.
    б) Другой вариант. Заменить тип кнопки "Показать" на button и добавить обработчик onclick, который все равно будет генерировать ссылку для window.location.href, а не отправлять форму классическим способом.
    PS: Честно, никогда не встречал, чтобы параметры get имели чисто числовое название, не считая тех случаев, где используется якорь #.
    Думаю, это плохая практика именования. Я бы использовал бы хоть один символ впереди названия, например,
    ?p1=1&p256=23
    Прокомментируйте, кто в теме таких тонкостей.
    Ответ написан
  • Стоит ли полностью изучать материал, если он не нужен?

    @alexalexes
    Если вы взялись писать только одну прогу, затрагивающую данный материал, то все что-то вам не по теме будет вредно.
    Если на регулярной основе будете в WinAPI зависать, то лучше не глотать целиком материал, а делать заметки, что где и как найти, если приспичит, написать еще какой-нибудь софт.
    В голову все не положишь. Жизнь коротка. И тд.
    Ответ написан
    Комментировать
  • Как организовать поиск в 5-и таблицах БД PostgreSQL?

    @alexalexes
    Обратите внимание на форму кавычек.
    Если используется " " - то переменные внутрь вставлять можно напрямую "text $search какой-то текст".
    Если ' ', то переменную можно только приклеить 'text ' . $search . ' какой-то текст'.
    Если текст - это текст запроса, то за вставку или приклеивание параметров напрямую разработчика надо ругать и бить.

    PS: Устаю напоминать, никогда не склеивайте параметры запроса с текстом запроса напрямую - это дверь для sql-инъекции!
    php.net/manual/ru/function.pg-query-params.php
    Ответ написан
    Комментировать
  • Какой способ получения IP лучше?

    @alexalexes
    Как договоритись с админом сети, или как принято на хостинге.

    https://habr.com/post/177113/

    //здесь не понятно зачем нужна собака @, и зачем фильтровать и обязательно ли это делать?

    Собака отключает логирование ошибки в вызове элемента массива.
    Например:

    $client = $_SERVER['HTTP_CLIENT_IP'];

    Если вдруг в массиве $_SERVER не окажется элемента с ключом 'HTTP_CLIENT_IP', то в лог-файл сервера запишется предупреждение об этом.
    Чтобы предупреждений не было можно поступить так:

    $client  = array_key_exists('HTTP_CLIENT_IP',  $_SERVER) ?  $_SERVER['HTTP_CLIENT_IP'] : '';


    или так, как в вопросе, с использованием собаки.
    Ответ написан
    Комментировать
  • Как сделать вывод на JS?

    @alexalexes
    Вот вам в div.
    В input-е используется свойство value для отображения значения.
    А div надо набивать содержимым.
    Вот и вся разница.
    Пример элемента вывода:
    <div id="i4"></div>
    Код вывода:
    document.getElementById('i4').innerHTML = Number(n1)*0.5;
    Ответ написан
    Комментировать
  • Почему возникает "неровная прокрутка"?

    @alexalexes
    Анимация прокрутки происходит всегда за фиксированное время (сейчас 500 мс).
    Если top получается 100 пикселей, то промотка будет казаться медленней, а если 1000 пикселей - то быстро.
    А нужно сделать так, чтобы время анимации было пропорционально длине "прыжка".
    var anim_speed = 300; // пикселей в секунду
    var anim_time = (top * 1000) / anim_speed; // 1000 - поправка на милисекунды
    //анимируем переход на расстояние 
    $('body,html').animate({scrollTop: top}, anim_time);

    PS: Обычная школьная формула по физике: время равно расстоянию деленное на скорость.
    Ответ написан
    Комментировать
  • Какая разница между public function и public static function?

    @alexalexes
    Если делать статику:
    class any_class
    {
      public static function add()
      {
      }
    }

    ... то, чтобы воспользоваться методом, не надо создавать объект, классу которого принадлежит этот метод, он доступен, если есть описание класса.
    any_class::add()
    А так лишний раз создавать объект по любому поводу, чтобы воспользоваться методом add().
    class any_class
    {
      public function add()
      {
      }
    }

    $any_class_object = new any_class;
    $any_class_object->add();

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