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

    @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
    В ноутбуке используется тип памяти 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'];
    Ответ написан
  • Как сделать кроссбраузерное оформление для Select?

    @alexalexes
    select-ы, чекбоксы, полосы прокрутки - это самые некастомизируемые элементы веб интерфейса.
    В качестве альтернативы используют JQuery ui виджеты.
    Ответ написан
    Комментировать
  • Почему windows xp не видит андроид-смартфоны?

    @alexalexes
    https://www.asus.com/ru/support/FAQ/1011564/
    Попробуйте установить драйвер с сайта производителя гаджета.
    Ответ написан
    Комментировать
  • Нормально ли что бекенд отдает сырые данные на фронт?

    @alexalexes
    Работать с сырыми данными на клиенте накладно всем.
    Накладно клиенту, потому что приходится работать с сопоставлением справочников, что должна делать СУБД "одной левой пяткой" при правильно составленном запросе с помощью индексов и кэша.
    Накладно инфраструктуре связи - гоняем много данных по каналам и не один раз.
    Накладно бекэнду - постоянно создавать соединение с клиентом и СУБД, разрывать соединение.
    Накладно СУБД - делать серию мелких запросов с толстой процедурой подготовки соединения, проверки прав пользователя на объекты, выполнения запросов, вместо того, чтобы выполнить запрос в один/два присеста.
    Что делать?
    Организовывать на стороне сервера грамотный API - каждая функция API при запросе к серверу должна давать порцию данных, необходимую для отображения конкретного отчета. В ответе не должно быть переизбытка данных. Если это список товаров, то отображать данные не всего списка, а от такой-то позиции до такой-то. Если у товаров есть какие-то "тяжелые" подробности, скажем, посмотреть большую фотку его, то подгружаем ее только по запросу пользователя, скажем, при наведении мыши - то есть вызываем другую функцию API. То есть функции API должны соответствовать механике работы с отчетом, а не предоставлять несвязные клочки данных.
    Ответ написан
    Комментировать
  • Какие лучше сделать отношения между таблицами?

    @alexalexes
    Упражнение
    (# Id -- идент. упражнения
    * Grp_Id -- идент. группы мышц, внеш ключ
    * Name -- Название,
    * Descr -- Описание
    )

    Мышцы
    (# Id -- идент. мышцы,
    * Grp_Id -- идент. группы мышц, внеш. ключ,
    * Name -- Название
    )

    Группа мышц
    (# Id -- идент. группы мышц,
    * Name -- Название
    )

    Воздействие упражнения
    (# Id -- идент. воздействия,
    * Ex_Id -- идент. упражнения, внеш. ключ
    * Мus_Id -- идент. мышцы, внеш ключ
    * Power -- сила воздействия или просто целевой флаг
    )

    Если вы говорите про связь "много-много", то знайте, что за ней прячется еще одна табличка, реализующая ассоциативную связь между основными объектами, и по сути это две связи через таблицу. В вашем случае, это Воздействие упражнения. Если взять концепцию графа ("много-много" - это всегда граф, а точнее его ребрышки). То, упражнения и мышцы - это вершины графа, а ребра - это как раз пары [ex_id, mus_id], вес ребра - сила воздействия. В этой же табличке можно было бы хранить ребра воздействий на группы мышц [ex_id, grp_id], в этом случае mus_id будут заполнены null-значениями, но задание говорит, что нужно связать группы мышц с упражнениями.
    Ответ написан
  • Как сформировать запрос MySQL?

    @alexalexes
    Изучите для начала как использовать MAX(), SUM(), NUMBER() в mySQL.
    Потом попробуйте эмулировать конструкции:
    Max() over (partition by ... )
    Sum() over (partition by ... )
    Rank() over (partition by ... order by ... )
    Ощутите всю "прелесть" mySQL по сравнению с MS SQL, Oracle и прочими СУБД, которые умеют эти конструкции.
    select b.id, b.name, b.sum_value, b.max_date -- а в самом конечной выборке выбираем только первые номера нумерации строк от каждого человека
    from ( select a.id, a.name, a.sum_value, a.max_date,  -- в этом подзапросе нумеруем строки в пределах одного человека
                          @rank := IF(@name2 != a.name, 1, @rank + 1) as rnk,
                          @name2 := a.name
                  from (select t.id, t.name,  -- в этом подзапросе находим сумму очков и максимум даты
                              @sum := IF(@name != name, value, @sum + value) as sum_value,
                              @max := IF(@name != name, date, @max) as max_date,
                              @name := name
                      from   
                                 (select 1 id, 'Вася' Name, 7 value, STR_TO_DATE('01.01.2018', '%d.%m.%Y') date union all
                                  select 2 id, 'Вася' Name, 2 value, STR_TO_DATE('02.02.2018', '%d.%m.%Y') date union all
                                  select 3 id, 'Петя' Name, 2 value, STR_TO_DATE('01.01.2018', '%d.%m.%Y') date union all
                                   select 4 id, 'Вова' Name, 2 value, STR_TO_DATE('01.01.2018', '%d.%m.%Y') date ) t, --исходные данные в виде таблицы t
                                 (select @max := 0, @sum := 0, @name := '') p
                      order by t.name, date desc
                     ) a,
                      (select @rank := 1, @name2 := '') p2
                      order by a.name, a.sum_value desc
    ) b where b.rnk = 1
    order by b.id, b.name
    Ответ написан
  • Как правильно хранить аватарки пользователей на node.js?

    @alexalexes
    https://habrahabr.ru/post/37686/
    Тут для PHP, но для любого backend концепция от этого не поменяется.
    1) Перенаправляем все ссылки для получения картинок на скрипт для проверки прав доступа.
    2) Проверяем права доступа пользователя по сессионным данным;
    3) Все ОК, сессия пользователя жива, файл существует, пользователь является владельцем файла или каким-то образом относится к нему (хотя бы для чтения) - передаем команду nginx серверу отдать файл из защищенного каталога.
    4) Не ОК, отдаем пользователю 404.
    3.1) Нет nginx ? Читаем файл серверным скриптом (лучше небольшими порциями, для экономии оперативной памяти сервера), отдаем пользователю данные с соответствующим mime-тайпом. На стороне клиента отданные данные прорисуются в img теге или в background-e DOM-элемента, не принципиально, каким образом прилетели бинарные ресурсы от сервера.
    Ответ написан
    Комментировать
  • Как прочитать текст между тегами HTML на Node.js( cheerio)?

    @alexalexes
    Это текст не между тегами, это содержимое самого тега.
    links.eq(i).html() - не оно ли?

    Задаете вопросы, ответы на которые есть в документации.
    Ответ написан
    3 комментария
  • Как изменить значения в одной таблице, взяв значения из другой?

    @alexalexes
    А где первичные ключи в табличках?
    Вообще, если таблицы - некие копии друг друга, то обновления записей проворачивают как-то так.
    update tab1 t1, tab2 t2   // таблицы, участвующие в Update
    set  t1.key = ?                      // устанавливаем параметр key, только непонятно, что задаем
    where t1.id = t2.id          // соответствие записей по первичным ключам

    Если нужно сделать сложное обновление, сопоставив некую совокупность атрибутов, не привязываясь к ключам, то как-то так.
    update tab1 t1, tab2 t2   // таблицы, участвующие в Update
    set t1.key = ?                      // устанавливаем параметр key, только непонятно, что задаем
    where t1.SecondName = t2.SecondName // допустим, пусть будет обновление key у тех записей, у которых есть полное соответствие атрибутов.
       and t1.LastName = t2.LastName
      and t1.ThirdName = t2.ThirdName
    Ответ написан
    Комментировать
  • Как заставить срабатывать скрипт js, в самом подгружаемом файле?

    @alexalexes
    Ajax.php - серверный скрипт, он ни в коем образе не подгружается в браузер.
    Он просто отвечает на запросы. Ответ может содержать текст, html, json или любой формат потока данных, определяемый http-заголовком ответа.
    Если ответ приходит в виде текста скрипта, то его можно подключить так:
    var script_elem = document.createElement('script'); // создаем DOM-элемент
    script_elem.innerHTML = 'alert(123456)';                 // помещаем в него код скрипта
    document.body.appendChild(script_elem);               // добавляем в документ
    Ответ написан