• Как запретить перенос строки в textarea?

    @alexalexes
    Добавьте на textarea два обработчика события keydown, как на запрет перевода строки, так и на отправку контента.
    $(document).keydown(function (e) {
            if (e.which == 13) {
                document.getElementById("commentAdd").click();
                document.getElementById("messageArea").value = "";
                        }
        });
    
    $('textarea').on('keydown', function( el ) {
            if( el.keyCode === 13 ) {
                el.preventDefault();
                whenEnterPressed();
            }
        });
    Ответ написан
    1 комментарий
  • Как поменять мелодию Скайп?

    @alexalexes
    Если приложение купило MS или Mail group (в случае с ICQ), то будьте готовы к выходу урезанной версии приложения.
    https://answers.microsoft.com/ru-ru/skype/forum/al...
    Ответ написан
  • Переход сайта с http на https. Почему не работает getimagesize() по пути //site.ru?

    @alexalexes
    На стороне сервера нужно выявить места, где идет обращение к файлам сервера, где пути к файлам это не url в представлении клиента (браузера), а путь внутри файловой системы сервера, и переписать соответствие url и filepath.
    В вашем случае путь в файловой системе может выглядеть так:
    htdocs/TmpGif/tr_87754306592959_133380.gif
    Ответ написан
  • Как вывести данные в loadTpl?

    @alexalexes
    Скорее всего вызов шаблона при переборе строк будет такой:
    while ($news = $NewsQuery->fetch())
    {
       $lastNewsList .= loadTpl("/last_news/news.html", 
    [
      "created_at" => $news['created_at'],
      "title" => $news['title'],
      "content" => $news['content']
    ]);
    }

    ... или даже еще проще:
    while ($news = $NewsQuery->fetch())
    {
       $lastNewsList .= loadTpl("/last_news/news.html",  $news);
    }

    Как поведет себя шаблон в этой строчке -
    $pageData['lastNews'] = loadTpl("/last_news/parent.html", $data);

    Без кода parent.html - не ясно.
    Как обрабатывается $pageData при наличии ключа 'lastNews', тоже нужно поинтересоваться, а надо ли намерено где-то еще указывать 'lastNews', чтобы отрисовать этот контент.
    Ответ написан
  • Как можно автоматически поднимать объявление на сайтах?

    @alexalexes
    а) Если нажатие кнопки не сопровождено вводом каптчи или какой-то сложной функции проверки того, что это делал человек;
    б) плюс если авторизация в сервисе действует неограниченное время;
    в) плюс страница формы поднятия объявления находится на том же домене, что и сайт объявлений;
    г) и ее появление не отягощено работой сложной функции
    д) плюс кнопку поднятия можно выцепить css-селектором с фиксированными параметрами.
    .... то можно попробовать сделать JS вставку в консоль на страницу сервиса, в виде такой функции-костыля, которая будет запускаться раз в 12 часов.
    Вкладку в браузере не закрываем никогда, чтобы ожидание выполнения функции не прекращалось; комп не выключаем.
    function use_my_iframe()
          {
            var iframe = document.createElement('iframe'); // создаем фрейм
            iframe.onload = function() // добавляем обработчик по завершении загрузки содержимого фрейма
            {
              setTimeout(function()
              {
                var iframe_content = iframe.contentWindow.document; // получаем доступ к контенту фрейма
                var button = iframe_content.querySelector("input[type='button']"); // ищем интересуемую кнопку в контенте фрейма по селектору
                button.click(); // нажимает на кнопку
                setTimeout(function()
                {
                  document.body.removeChild(iframe);
                }, 30000); // удаление фрейма через некоторое время после активации кнопки
              }, 3000); // ждем некоторое время после загрузки фрейма (на случай, если интересуема кнопка не сразу появляется в контенте)
            };
            iframe.setAttribute('src', 'http://localhost/index2.html'); // добавляем адрес страницы, где находится интересуемая кнопка
            document.body.appendChild(iframe);
          }
          use_my_iframe(); //запускаем сейчас
          setInterval(use_my_iframe, 12 * 3600 * 1000 + 30000); // Запуск функции раз в 12 часов (+30 сек, чтобы сервис гарантировано посчитал истечение срока)
    Ответ написан
  • Как заставить WordPress использовать JSON_UNESCAPED_UNICODE?

    @alexalexes
    Это параметр для подключения к базе данных, в какой кодировке писать/читать из/в нее. К обмену сервера и клиента он не относится.
    define('DB_CHARSET', 'utf8');
    Попробуйте определить флаг JSON_UNESCAPED_UNICODE как значение по умолчанию в описании функции (предположительно, файл wp-includes/functions.php).
    Если при формировании интересуемого JSON ответа со стороны wp не используется этот параметр, то сработает то, что по умолчанию.
    function wp_json_encode( $data, $options = JSON_UNESCAPED_UNICODE, $depth = 512 ) 
    {
    ...

    PS: С WP не работал, пробуйте на свой риск.
    Ответ написан
    1 комментарий
  • Как разделить число на 100 и прибавить получившейся результат к сумме которую делим?

    @alexalexes
    Если округлять центы в пользу пользователя, то:
    UPDATE dle_users
    SET user_balance = user_balance + round(user_balance / 100.0, 2)

    Если округлять центы в пользу системы, то:
    UPDATE dle_users
    SET user_balance = user_balance + ceil(user_balance / 100.0 * 100) / 100.0
                                                                    ^       ^
                                              корректировка ceil по 2 знакам после запятой
    Ответ написан
    1 комментарий
  • Не получается добавить данные в поля через SQL?

    @alexalexes
    Посчитайте количество атрибутов тут:
    records(<тут>)
    и тут:
    VALUES(<тут>)
    Сравните кол-во.
    PS:
    Пропущена запятая:
    1, 'test', 'test' <тут> 'test',
    Ответ написан
  • Как сделать чтобы iframe подстраивался под адаптивный html внутри него?

    @alexalexes
    iframe - самый древний у дубовый тег по части адаптивности.
    Им можно управлять, задавая конкретные значения ширины и высоты, запрашивая состояние скроллбаров.
    var iframe = document.getElementById('fileUploadIframe');
     iframe.width = iframe.contentWindow.document.body.scrollWidh + "px";
     iframe.height = iframe.contentWindow.document.body.scrollHeight + "px";

    Когда корректировать эти параметры? Нужно смотреть случаи, когда контент Iframe меняется и вешать выполнение этих строк на соответствующие обработчики событий.
    Ответ написан
    Комментировать
  • Как реализовать создание файла xls на сайте из php sql запроса?

    @alexalexes
    Это называется кэширование файлов.
    Вы привели только заголовок, какой тип контента отдает скрипт.
    Типичный не оптимизированный скрипт (его поведение) под отдачу файла.
    // Запрос к БД, получающий ресурсы для формирования файла
    // Заголовком сообщаем имя файла клиенту
    // Формируем / получаем тело файла
    echo /*отдаем переменную с телом файла*/;

    Оптимизированное под кэширование поведение скрипта:
    // Запрос к БД на время обновления ресурсов из чего собирать файл
    // Получаем время изменения файла в каталоге files
    // Если файл не старее чем сведения в БД то формируем тело из него.
    // Если файл старее чем сведения в БД на установленную константу времени жизни кэша, то получаем новое тело файла и обновляем файл кэша.
    // Заголовком сообщаем имя файла клиенту
    echo /*отдаем переменную с телом файла*/;
    Ответ написан
    Комментировать
  • Как проще всего сделать выборку количества каждого типа?

    @alexalexes
    У вас практически готово решение, только отвязать привязку user_id в подзапросах, если вам нужно получить общее кол-во записей по типам из таблицы example.
    SELECT count(e.id) "кол-во записей example со статусом 1",
           (
               select count(type_id)
               from example e_1
               where type_id = 1
                  and e_1.status = 3
           ) "кол-во для типа 1",
           (
               select count(type_id)
               from example e_3
               where type_id = 3
                  and e_3.status = 3
           ) "кол-во для типа 3",
           (
               select count(type_id)
               from example e_4
               where type_id = 4 
                and e_4.status = 3
           ) "кол-во для типа 4"
    FROM example e
    WHERE e.status = 1
         and e.user_id = 53;

    Если получаемая статистика в пределах одного пользователя, то можно использовать такую конструкцию:
    SELECT count(e.id) "кол-во записей example со статусом 1",
                 count(case when e.type_id = 1
                  and e.status = 3 then 1 end)  "кол-во для типа 1",
           count(case when e.type_id = 3
                  and e.status = 3 then 1 end)  "кол-во для типа 3",
         count(case when e.type_id = 4
                  and e.status = 3 then 1 end)  "кол-во для типа 4"
    FROM example e
    WHERE e.status = 1
         and e.user_id = 53;

    Вариант 3.
    SELECT count(case when e.status = 1 then 1 end) "кол-во записей example со статусом 1",
                 count(case when e.type_id = 1
                  and e.status = 3 then 1 end)  "кол-во для типа 1",
           count(case when e.type_id = 3
                  and e.status = 3 then 1 end)  "кол-во для типа 3",
         count(case when e.type_id = 4
                  and e.status = 3 then 1 end)  "кол-во для типа 4"
    FROM example e
    where e.user_id = 53

    Вариант 4.
    -- Считаем статус 1, игнорируем типы
    SELECT 'with_status_1' type_query, null type_id, count(*) cnt
    FROM example e
    where e.status = 1
    and e.user_id = 53
    union all
    -- Считаем остальные типы со статусом 3
    SELECT 'with_another_types' type_query, e.type_id, count(*) cnt
    FROM example e
    where e.status = 3
    and e.user_id = 53
    group by e.type_id
    Ответ написан
    5 комментариев
  • Как обойти граф?

    @alexalexes
    Найдите путь по алгоритму Дейкстры между двумя интересуемыми вершинами.
    Все вершины и дуги, которые не входят в этот путь - зачистить.
    Ответ написан
    Комментировать
  • Как скрыть элементы между элементами с определённым классом?

    @alexalexes
    На чистом JS будет так.
    ....
       <tr class="Item-service" onclick="hide_trs(this)"></tr>
    ....

    function hide_trs(target)
      {
            var parent = target.parentNode;
            var tr_nodes = Array.prototype.slice.call(parent.getElementsByTagName('TR'));
            var tr_count = tr_nodes.length;
            var target_index = tr_nodes.indexOf(target);
            for(var i = target_index + 1; i < tr_count; i++)
            {
              var cur_tr = tr_nodes[i];
              if(cur_tr.className !== 'Item-service')
                cur_tr.style.display = 'none';
              else
                break;
            }
      }

    PS: Есть ограничения:
    1) В строках нельзя использовать вложенные таблицы ( tr_nodes - получит все строки вложенных таблиц в том числе);
    2) Кликабельному tr нельзя добавить еще класс (идентификация следующего кликабельного tr производится строго по содержимому свойства класса cur_tr.className !== 'Item-service')
    Ответ написан
    Комментировать
  • Поиск почты по user/ID?

    @alexalexes
    Если сайт - это форум, то в некоторых форумных фреймоврках (например, IPBoard) предусмотрен вывод страницы списка зарегистрированных пользователей, которая доступна авторизованным пользователям с определенным уровнем прав или стажем (числу написанных сообщений и т.д.). Выводить такой список или нет и в каком объеме предоставлять контакты профиля решает администрация сайта и сами пользователи, если предусмотрены настройки в профиле.
    Остальные способы доступа к списку пользователей сайта требует либо членства в администрации сайта, либо не легальны.
    Ответ написан
    Комментировать
  • Как применить INNER JOIN к результату запроса?

    @alexalexes
    Было бы с чем соединять...
    SET @var = 4;
    
    Select * from
    (
    -------------Ваш сложный подзапрос --------------------
    SELECT *
    FROM menu
    WHERE FIND_IN_SET(ID,(SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
    SELECT @pv:=(SELECT GROUP_CONCAT(ID SEPARATOR ',')
    FROM menu WHERE submenu IN (@pv)) AS lv FROM menu
    JOIN (SELECT @pv:=@var)tmp
    WHERE submenu IN (@pv)) a))
    
    UNION ALL
    SELECT *
    FROM menu
    WHERE ID = @var
    ORDER BY ID
    -------конец сложного подзапроса--------------
    ) complicated_menu
    inner join ваша_таблица vt on complicated_menu.id = vt.id
    Ответ написан
    1 комментарий
  • Как составить такой запрос с поиском по тегам?

    @alexalexes
    Решение 1 - с модификацией запроса под определенный набор параметров.
    Сколько одновременных тегов должно присутствовать на входе, столько и будет join-ов таблицы тегов.
    SELECT p.*, u.name FROM posts p
    JOIN users u ON u.id = p.user_id
    JOIN postTags pt1 ON pt1.post_id = p.id and pt1.tag_id = 3
    JOIN postTags pt2 ON pt2.post_id = p.id and pt2.tag_id = 5
    JOIN postTags pt3 ON pt3.post_id = p.id and pt3.tag_id = 7
    WHERE p.user_id = 4

    PS: Если в where указали конкретного пользователя, то users мы присоединяем полностью (без left), так будет работать быстрее.
    Решение 2 - контролируем число уникальных тегов на выходе.
    Select a.*
    from
    (
    SELECT p.*, u.name, count (distinct  pt1.tag_id) over (partition by p.id) unik_tag_count
     FROM posts p
    JOIN users u ON u.id = p.user_id
    JOIN postTags pt1 ON pt1.post_id = p.id
    WHERE p.user_id = 4
    and pt1.tag_id in (3, 5, 7)
    ) a
    where  a.unik_tag_count = 3 -- уникальное кол-во тегов на один пост
    Ответ написан
    6 комментариев
  • Как сделать SQL-запрос выбора по значениям метаданных?

    @alexalexes
    Если save_id - внешний ключ (некий идентификатор конфига), то полноту наличия всех параметров (и width_surface, и height_surface), а также отсутствие других параметров можно трактовать так:
    Select t1.save_id, t1.meta_key, t1.meta_value, t2.meta_key as t2_meta_key, t2.meta_value as t2_meta_value
    from cpl_save_meta t1
    join cpl_save_meta t2 on t1.save_id = t2.save_id
                    and t1.meta_key = 'width_surface'  and t1.meta_value = '2.6'
                    and t2.meta_key = 'height_surface' and t2.meta_value = '3.53'
    where (select count(*) from cpl_save_meta t3
            where t3.save_id = t1.save_id
              and t3.meta_key not in ('width_surface', 'height_surface')) = 0
    Ответ написан
  • Как найти дубли в массивах postgres?

    @alexalexes
    Если это можно декомпозировать до 3-ей нормальной формы базы данных, то лучше сделать это, иначе придется использовать костыль из 4 функций, чтобы выйти на значения в этих массивах и хоть как-то работать потом с ними в запросах.
    select a.* from
    (
      select b.id, b.split_value, count(b.id) over (partition by b.split_value) as v_count
      from
      (
        select c.id, cast(unnest(string_to_array(translate(c.value,'{}',''),',')) as INTEGER) as split_value
        from
        ( -- имитация данных таблицы
          (select 0 as id, '{1,2,3}' as value) union all
          (select 1, '{4, 5}') union all
          (select 2, '{3, 6}') 
        ) c
      ) b
    ) a
    where a.v_count > 1

    Решение Б (исходные данные - тип массив).
    select a.* from
    (
      select b.id, b.split_value, count(b.id) over (partition by b.split_value) as v_count
      from
      (
        select c.id, unnest(c.value) as split_value
        from
        ( -- имитация данных таблицы
          (select 0 as id, array[1,2,3] as value) union all
          (select 1, array[4,5]) union all
          (select 2, array[3,6]) 
        ) c
      ) b
    ) a
    where a.v_count > 1
    Ответ написан
    2 комментария
  • OpenWRT+PHP7 "Ошибка Call to undefined function mysqli_connect()" не понимаю что делать?

    @alexalexes
    Поиск по OpenWRT ресурсам говорит, что, возможно, проблема в конкретной сборке OpenWRT.
    Попробуйте воспользоваться советом:
    Try this. Check /etc/php7/

    Rename 20_mysqli.ini to 30_mysqli.ini, or delete 20_mysqli.ini if both exist. If you also have 20_openssl.ini there, rename that to 10_openssl.ini.
    Above change is needed to load the modules in the correct order.
    This should now be fixed in the latest builds, but you could be running older code, or suffering from the bug that was there earlier.
    Ответ написан
    1 комментарий
  • Зачем присваивать переменной результат readdir()?

    @alexalexes
    Функция readdir(), как правило, используется вместе с while.
    За один цикл нужно только один раз вызвать readdir, чтобы можно было поработать с дескриптором элемента каталога, не перейдя на другой элемент, поэтому появится такая неуклюжесть :
    while(true)
    {
      $f = readdir($d);
      if($f === fasle)
      {  break; }
      // Сделать что-то с $f в противном случае.
    }

    А если писать присваивание в одну строчку, там же, где хотим выйти из цикла, то получается очень компактно.
    Возможно, стиль кода по while плавно перешел в if.
    Ответ написан
    Комментировать