• Что не так в фильтре?

    @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();

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

    @alexalexes
    Измените структуру документа:
    <div class="info_block one">
    <div class="one_1"></div>
     <div class="one_2"></div>
    </div>
    <div class="info_block two">
    <div class="two_1"> </div>
    <div class="two_2"> </div>
     </div>
    <div class="info_block three"> 
    <div class="three_1"> </div>
    <div class="three_2"> </div>
    </div>
    <div class="info_block four">
    <div class="four_1"> </div>
    <div class="four_2"> </div>
     </div>

    Определите стили для инф. блоков.
    По умолчанию, все инф. блоки скрыты, нескрытым может быть блок, имеющий в себе класс active:
    <style>
    div.info_block
    {
      display: none;
    }
    div.info_block.active
    {
      display: block;
    }
    </style>

    Подключаете JQuery:
    <script src="https://code.jquery.com/jquery-3.3.1.js"></script>

    Определяете функцию, которая будет устанавливать убирать и устанавливать класс active на инф. блоках.
    <script>
    function display_div(class_name)
    {
      $('div.info_block').removeClass('active');
      $('div.info_block.' + class_name).addClass('active');
    }
    </script>

    Делаете видимым первый блок:
    <script>
    display_div('one');
    </script>

    Вставляете в пункты меню обработчик onclick для вызова функции отображения текущего инф. блока:
    <ul>
      <li onclick="display_div('one')">Первый блок</li>
      <li onclick="display_div('two')">Второй блок</li>
      <li onclick="display_div('three')">Третий блок</li>
      <li onclick="display_div('four')">Четвертый блок</li>
    </ul>
    Ответ написан
    1 комментарий
  • Загрузка файла в хранилище Postgres без прав суперпользователя на PHP?

    @alexalexes
    Если нельзя управлять пользователями, то нужно создать такое приложение, которое может подключиться от имени другого пользователя с нужным набором прав.
    Только это приложение должно быть запущено на сервере на постоянной основе и уметь обмениваться по http с PHP через curl.
    Ответ написан
    1 комментарий
  • Почему выводит кракозябры?

    @alexalexes
    Если у вас используется сервер PHP 5.6 и выше, то нужно отправлять браузеру http-заголовок, в какой кодировке скрипт будет отдавать данные, в независимости в какой кодировке сам файл скрипта, и даже в том случае, если вы нормально отдаете HTML-структуру документа.
    //установка кодировки вывода
      header('Content-Type: text/html; charset=utf-8');

    Если не знаете, в какой кодировке будут данные, то нужно идентифицировать кодировку, и вписать ее в header():
    echo mb_detect_encoding(implode("\n", $output));
    ----------------------------
    Кодировку подобрал для заголовка методом тыка, так как mb_detect_encoding() не вывел явного ответа.
    У меня оказалась CP866:
    header('Content-Type: text/html; charset=CP866');
    $data = 'help';
    exec(escapeshellcmd($data), $output, $return);
    echo implode("<br>", $output)."<br>Return Code: ".$return;
    Ответ написан
  • Как проверить, являются ли дата и время автоматическими?

    @alexalexes
    Простукивайте параметр Type в реестре Windows:
    HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters
    Значения: NoSync - не используется синхронизация, и NTP - используется.
    Ответ написан
    Комментировать
  • Что делать, если по разному отображается сайт в режиме адаптивного дизайну и на телефоне?

    @alexalexes
    Собственно, в режиме отладки браузера по F12 на компьютере с включенным режимом адаптивности Ctrl + Shift + M, просматривать в CSS медиа-запросы каждой ступени экрана (изменяя размер видимой части экрана), и смотреть, какой url-ресурс прицеплен к картинке в каждом случае.
    Если вы в телефоне видите старый вариант картинки, который вы выставляли в процессе отладки, то попробуйте в url картинки в CSS дописать get-параметр ?timestep=201804211800, чтобы принудительно сбросить закэшированное изображение в мобильном браузере.
    PS: На теге link, который подключает стили CSS, тоже полезно timestep задавать, и при обновлении стилей его не забывать менять по текущему времени. Такой метод будет работать при любой конфигурации кэширования на сервере, и можно быть уверенным, что посетители, которые заходили на сайт раньше, будут видеть актуальный контент по обновленным ресурсам с параметром timestep, где вы просто перезалили ресурс без смены названия файла.
    Ответ написан
  • Можно ли совместить распаянную и съемную ОЗУ?

    @alexalexes
    В ноутбуке используется тип памяти DDR3L, у которой напряжение питания 1,35 В (буква L как раз это обозначает), против вашей DDR3 (NT4GC64B8HG0NS-DI), у которой питание 1,5 В.
    Вместе такой тандем не запустится.
    Ответ написан
    3 комментария
  • Как из базы MySQL вывести данные в Android Studio?

    @alexalexes
    Между вашим клиентским приложением и MySQL должно быть серверное приложение, которое будет непосредственно выполнять запросы на MySQL и предоставлять данные и API вашему приложению.
    Легче всего поднять PHP или node.js сервер и связать его с MySQL, обмен данными с клиентом - в JSON формате.
    Ответ написан
    Комментировать
  • Можно ли картинку в Windows Forms преобразовать в кнопку или ссылку?

    @alexalexes
    Повесьте *Click обработчик на тот объект, который вы хотите использовать как кнопку.
    Не принципиально, как он выглядит, лишь бы имел геометрические размеры.
    Ответ написан
    Комментировать
  • Можно ли изменить внешний вид диалогового окна Windows Forms?

    @alexalexes
    По-моему, нужно просто выбрать другой тип проекта - WPF.
    Ответ написан
    Комментировать
  • Как вывести много вложений вместе с постами?

    @alexalexes
    Я обычно выгребаю всю вложенность одной портянкой (добиваемся уникальности имен полей, добавляя необходимые префиксы):
    Select p.id as post_id, p.create_date as p_create_date, p.title as p_title, p.text as p_text,
               img.id as img_id, img.name as img_name,
              v.id as v_id, v.name as v_name
    from posts p
    left join images img on img.post_id = p.id
    left join videos v on v.post_id = p.id

    А потом в PHP собираю ассоциативный массив с нужной глубиной вложенности:
    $out = [];
    foreach($rows as $row)
    {
      $post = &$out[$row['POST_ID']]; //ссылка на элемент массива первого уровня - пост
      $post['CREATE_DATE'] = $row['P_CREATE_DATE'];
      $post['TITLE'] = $row['P_TITLE'];
      $post['TEXT'] = $row['P_TEXT'];
       if(!is_null($row['IMG_ID']))  
      {
          $image = &$post['IMAGES'][$row['IMG_ID']]; //ссылка на элемент массива второго уровня - элемент массива изображений
          $image['NAME'] = $row['IMG_NAME'];
      }
       if(!is_null($row['V_ID']))  
      {
         $video = &$post['VIDEOS'][$row['V_ID']]; //ссылка на элемент массива второго уровня - элемент массива видео
          $video['NAME'] = $row['V_NAME'];
      }
    }

    На выходе получаем $out - вполне себе структуированный объект, пригодный для дальнейшей обработки и выдачи на фронтенд.
    PS: Использование ссылок ускоряет сборку таких структур.
    Например, чтобы заполнить несколько свойств элемента массива IMAGES, который вложен, быстрее будет отрабатывать конструкция:
    $post = &$out[$row['POST_ID']];
    $image = &$post['IMAGES'][$row['IMG_ID']];
    $image['NAME'] = $row['IMG_NAME'];
    $image['WIDTH'] = $row['IMG_WIDTH'];
    $image['HEIGHT'] = $row['IMG_HEIGHT'];


    Чем вот такое нагромождение для заполнения каждого свойства:
    $out[$row['POST_ID']]['IMAGES'][$row['IMG_ID']]['NAME'] = $row['IMG_NAME'];
    $out[$row['POST_ID']]['IMAGES'][$row['IMG_ID']]['WIDTH'] = $row['IMG_WIDTH'];
    $out[$row['POST_ID']]['IMAGES'][$row['IMG_ID']]['HEIGHT'] = $row['IMG_HEIGHT'];
    Ответ написан