• ORDER BY IF - сортировка по двум полям?

    erge
    @erge
    Примус починяю
    мне кажется что группировка только ради count ? тогда не должно быть price, а sum(price)
    а вообще проверку картинки надо делать другим образом.
    вы же делаете LEFT JOIN , соответственно из картинок присоединяются те что есть, а к тем записям с прайсами где нет картинок будут NULL записи картинок.
    соответственно проверять надо :
    IF((`mf`.`ID` IS NOT NULL AND `a`.`Price` > 0), 1, 0) DESC

    без группировок
    соответственно если есть запись в картинках (ID != null) и прайс > 0, то IF вернет 1 , в иных случаях 0
    и по этим 1 и 0 произведется обратная сортировка.
    т.е. сверху как раз должны быть записи с ценой и картинками.
    Ответ написан
    Комментировать
  • Как узнать IP адрес посетителя и ссылку сайта?

    erge
    @erge
    Примус починяю
    IP:
    <?php
     
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = @$_SERVER['REMOTE_ADDR'];
     
    if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client;
    elseif(filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward;
    else $ip = $remote;
     
    echo $ip;
     
    ?>


    Страница реферер:
    $_SERVER['HTTP_REFERER'] предоставит вам URL страницы реферера, если таковой существует.

    PS: пробуйте хоть иногда пользоваться поиском, все находится!
    Поиск: IP адрес посетителя
    Результат: Как в PHP узнать IP адрес сервера и посетителя

    Поиск: PHP URL referer
    Суперглобальный массив $_SERVER
    Элемент $_SERVER['HTTP_REFERER']
    В элементе $_SERVER['HTTP_REFERER'] приводится адрес страницы, с которой посетитель пришёл на данную страницу. Переход должен осуществляться по ссылке.
    Ответ написан
    Комментировать
  • Можно ли написать регулярку, которая будет проверять, закрыта ли кавычка (двойная и (или) одинарная) в случае, если вообще она (кавычка) есть?

    erge
    @erge
    Примус починяю
    я так понимаю что вопрос у вас поставлен неверно, если - "Моя задача - удалить переменные из кода."
    и судя по тексту -
    "которая будет проверять, закрыта ли кавычка (двойная и (или) одинарная)"
    "Точка с запятой может ведь быть частью значения переменной (если переменная хранит строку). "
    удалять вы собираетесь все строковые переменные?

    тогда вам необходимо матчить (находить) строковые переменные, а не проверять есть ли , нет кавычки и пр. Вопрос некорректно поставлен!?

    вот регулярка, матчит строковые переменные как начинающиеся, так и без модификаторов (можете добавить свои по вкусу), в данном случае это модификаторы JavaScript const, var, let:
    ((const|var|let)\s+)?([\w]+)\s*=\s*("[^"]+");?


    PS: работает в NotePad++
    то что попадает внутрь () запоминается в переменные \1 \2 \3 \4
    \3 - название переменной
    \4 - собственно сама строка

    Upd:
    выше написал пример с двойными кавычками "
    для апострофов проще сделать такую же регулярку заменив в регулярке выше двойные на апострофы и использовать два регулярных выражения, чем городить и пытаться все сделать на одной регулярке.
    ведь если строка в апострофах, то внутри свободно могут быть кавычки двойные, в этом случае...... думаю регулярку то можно написать, но уж сильно сложнее и запутаннее будет.

    Upd2:
    хотя нет, не сильно сложнее :)
    ((const|var|let)\s+)?([\w]+)\s*=\s*("[^"]+"|'[^']+');?


    Upd3:
    если в конце всегда будет ; и перенос строки
    то можно так:
    ((const|var|let)\s+)?([\w]+)\s*=\s*(".*"|'.*');$
    Ответ написан
    3 комментария
  • MySQL Как сделать Update и Insert на таблицы с LEFT JOIN?

    erge
    @erge
    Примус починяю
    т.к. БД нормализованна и данные хранятся в разных таблицах, то и обновлять и/или вставлять надо несколькими запросами в соответствующие таблицы в одной транзакции.
    в shedules у вас только : время, дата, номер рейса, цена эконом класса, подтвержден
    остальное в связанных таблицах, которые обновляются отдельными запросами.
    Ответ написан
    Комментировать
  • Где пригодятся побитовые операции в PHP?

    erge
    @erge
    Примус починяю
    например выставлять/сбрасывать/сравнивать состояния каких либо "флагов" и хранить их в одной переменной
    один флаг - один бит
    0 - сброшен
    1 - установлен

    как-то так.

    PS: и такой вопрос уже был, см. - Для чего нужны побитовые операции?
    Ответ написан
    Комментировать
  • Востребованный, "проверенный" стек технологий. Что выбрать, чтобы быстро найти работу?

    erge
    @erge
    Примус починяю
    Java: Spring Boot, Hybernate, Maven / Gradle
    + git (github)
    + SQL + желательно (что-то из: PL/SQL (Oracle) или T-SQL(Microsoft SQL Server) или pgSQL (PostgreSQL))
    Javascript: нативный DOM + хотя бы JQuery (да он еще используется много где и не собирается умирать :)) , далее можно React, Vue и т.п.

    как-то так +-
    Ответ написан
    3 комментария
  • Как передать значение переменной js php?

    erge
    @erge
    Примус починяю
    XMLHttpRequest (AJAX) - отправка и обработка ответ...

    в статье есть хорошие примеры.
    вам нужно в функции updateQty через AJAX запрос вызвать php скрипт и либо методом GET, либо методом POST передать в него данные.
    Ответ написан
    Комментировать
  • Стоит ли учить Delphi или VBA просто для себя?

    erge
    @erge
    Примус починяю
    Если вы знаете C++ C# и Python , то на фига вам Delphi и теме более Visual Basic, который ни разу не кроссплатформенный (хотя да, mono же?) ???
    все что угодно можно написать на вышеперечисленной тройке.
    а на C++ никто не мешает писать в процедурном стиле как на С :))
    Не понимаю вообще если честно ))
    У вас много лишнего времени наверно?
    Ответ написан
  • Как сделать облако, из старого компа, для своего сайта?

    erge
    @erge
    Примус починяю
    apache + php + mysql
    можно поставить и раздельно.
    можно конечно и openserver, но это монструозная смесь...

    с роутера пробрасываете 80й порт (предварительно смените на самом роутере порт для вебморды) на компьютер
    так же где-то домен надо будет запарковать и указать ваш IP, либо dyndns
    Ответ написан
  • Как на сайте сделать смену картинок и контента?

    erge
    @erge
    Примус починяю
    На чистом CSS Это вряд ли получится сделать, т.к. там нет функций даты и времени, а те что есть CSS 3 Timing Functions предназначены для анимации

    сделать разумеется можно на JavaScript
    Смотрите функции получения времени

    Пример - меняется фон страницы в зависимости от времени суток:
    function changeBackground(){
    	var h = (new Date()).getHours();
      var b = document.body; 
      if (h > 0 && h < 6) {
      	// ночь
      	img = 'https://images.wallpaperscraft.com/image/moon_branch_night_clouds_48105_1920x1080.jpg';
      } else if (h >=6 && h < 10) {
      	// утро
      	img = 'https://i.artfile.me/wallpaper/11-09-2012/1920x1080/priroda-voshody-zakaty-lug-voshod-utro-t-660656.jpg';
      } else if (h >= 10 && h < 19) {
      	// день
        img = 'https://get.wallhere.com/photo/sunlight-nature-grass-sky-field-horizon-cloud-grassland-meadow-plain-1920x1080-px-prairie-computer-wallpaper-cumulus-573793.jpg';
      } else if (h >= 19) {
      	// вечер
        img = 'https://www.bmwunstoppable.com/wp-content/uploads/2017/03/5nXkqs.jpg';
      }
      b.style = 'background-image: url('+img+')';
      setTimeout(changeBackground, 60000);
    }
    
    changeBackground();


    PS: Стили (например фон элемента) можно менять через свойство style элемента
    el.style = 'background-image: url('+img+')';

    контент через свойство .innerHTML
    и т.д., смострите свойства и методы DOM (Document Object Model)
    Ответ написан
    Комментировать
  • Установка Windows XP вместо UBUNTU?

    erge
    @erge
    Примус починяю
    посмотри в разделе Boot не Removable device , а HDD (как-то так), скорее всего флешка там!
    переставь ее на первое место.
    Ответ написан
    Комментировать
  • Как получить значение input в ячейке таблицы?

    erge
    @erge
    Примус починяю
    ну как же свойство children ?? которое в этом скрипте так же используется?
    см. Свойство children

    INPUT будет дочерним элементом TD поэтому все проще простого:
    вместо
    cell.textContent
    использовать
    cell.children[0].value

    Upd:
    <hmtl>
    <style>
    body {
      background: #20262E;
      padding: 20px;
      font-family: Helvetica;
    }
    
    #app {
      background: #fff;
      border-radius: 4px;
      padding: 20px;
      transition: all 0.2s;
      text-align: center;
    }
    </style>
    <body>
    <div id="app"></div>
    
    <table>
      <tr data-new="1" data-id="1">
        <td data-name="cell_11"><input type="text" value="11"></td>
        <td data-name="cell_12"><input type="text" value="12"></td>
      </tr>
      <tr data-new="2" data-id="2">
        <td data-name="cell_21"><input type="text" value="21"></td>
        <td data-name="cell_22"><input type="text" value="22"></td>
      </tr>
    </table>
    
    <script>
    var x = {};
    [].forEach.call(document.querySelectorAll("tr"), function(el) {
      if (+el.getAttribute("data-new") >= 0) {
        let inn = (x[el.getAttribute("data-id")] = {});
        [].forEach.call(el.children, function(cell) {
          inn[cell.getAttribute("data-name")] = cell.children[0].value;
        });
      }
    });
    var dataJSON = JSON.stringify(x)
    document.querySelector("#app").innerHTML = dataJSON;
    </script>
    </body>
    </hmtl>


    Все работает, а если ошибка, то у вас помимо инпута в ячейке есть еще элементы
    тогда если лень разбираться можно использовать:

    cell.getElementsByTagName("input")[0].value
    Ответ написан
    6 комментариев
  • Как организовать доступ к удаленной папке Linux?

    erge
    @erge
    Примус починяю
    Николай Савельев, а кто мешает примонтировать удаленную папку по sshfs в папку сервера самбы?
    разве это не будет работать, вы пробовали?

    чтобы автоматом монтировалось по fstab надо настроить публичные ssh ключи на удаленном и на самбе.
    либо монтировать например так:
    sh -c "sleep 5 && echo 'pass' | sshfs username@server:/home/user/folder /media/server -o password_stdin -o ServerAliveInterval=300 -o reconnect"


    ну, на крайний случай sftp (scp), под windows есть хороший клиент WinSCP

    PS: и да VPN + NFS тоже вариант
    Ответ написан
    Комментировать
  • Возможно ли изменить стили для другого элемента при условии?

    erge
    @erge
    Примус починяю
    меняются не стили в классе, а классы у элемента и/или непосредственно стили самого элемента.
    классы у элемента можно менять например так:
    document.getElementsByClassName("my-class1")[0].className="my-class2"


    стили так:
    document.getElementsByClassName("my-class1")[0].style="font-family: 'PT Sans';font-style: normal;"


    и т.п.

    PS: метод document.getElementsByClassName() возвращает коллекцию, а не один элемент!

    Upd:

    ок, перечитал еще несколько раз, вроде понял что хотите ))
    на JS возможно если у вас есть ссылка на объект с классом "my-class1"
    например так

    function checkMyFirstBlock(el){
    	if(el.className.indexOf("my-class1-2") == -1) {
    		// не найдено "my-class1-2"
    		document.getElementsByClassName("my-class2")[0].style = "background-color:red";
    	} else {
    		// найдено
    		document.getElementsByClassName("my-class2")[0].style = "background-color:white";
    	}
    }


    в функцию checkMyFirstBlock передаете ссылку на первый блок
    если у него в className нет класса my-class1-2, то выполняется условие и можно как угодно менять стили у my-class2

    Upd2:
    Но, проще наверно хранить "флаг" в глобальной переменной
    если в каком-то месте меняем классы первого элемента, то выставляем в переменной "флаг" (пусть 1)
    если сбрасываем, то в переменную = 0

    далее проверяем флаг, соответственно выставляем стили у второго элемента.

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

    erge
    @erge
    Примус починяю
    1) Поиск в яндекс: галерея слайдер на javascript - множество готовых решений.

    2) в функцию по onclick нужно передать ссылку на сам объект - this
    div onclick='img(this)'


    <html>
    <script>
    function img(el) {
    	el.style.backgroundImage = "url(https://img3.goodfon.ru/original/1920x1080/6/a4/krasivaya-devushka-amber-heard.jpg)"
    }
    </script>
    	<body>
    		<div onclick='img(this)' style='width:100%;height:100%;margin-bottom: 20px; background-image: url(https://vdudvdud.ru/wa-data/public/shop/products/30/00/30/images/296/296.970.jpg);'></div>
    	</body>
    </html>


    3) вот пример галереи БЕЗ обращения по ID и ClassName, но нужно четко представлять себе структуру документа, поэтому с Id и ClassName все же удобнее, по крайней мере находить блок где надо менять фон, потому что такая конструкция
    document.body.children[0].children[0].style.backgroundImage = document.body.children[0].children[1].children[0].style.backgroundImage;

    это , ну ппц....

    вот галлерея:
    <html>
    <style>
    .bigimage {
    	width:100%;
    	height:75%;
    	margin-bottom: 20px;
    	background-repeat: no-repeat;
        background-position: center;
        background-size: contain;
    }
    
    .thumbnail {
    	float:left;
    	width:19%;
    	height:20%;
    	border-style: solid;
    	border-width: 1px;
    	border-color: #333390;
    	background-repeat: no-repeat;
        background-position: center;
        background-size: contain;
    }
    </style>
    <script>
    window.onload = function () {
    	document.body.children[0].children[0].style.backgroundImage = document.body.children[0].children[1].children[0].style.backgroundImage;
    }
    
    function img(el) {
    	el.parentElement.parentElement.children[0].style.backgroundImage = el.style.backgroundImage;
    }
    </script>
    	<body>
    	<div>
    		<div class="bigimage"></div>
    		<div>
    			<div onclick="img(this)" class="thumbnail" style="background-image:url(https://hdqwalls.com/download/willa-holland-5k-2018-tc-1920x1080.jpg)"></div>
    			<div onclick="img(this)" class="thumbnail" style="background-image:url(https://img3.goodfon.ru/original/1920x1080/6/a4/krasivaya-devushka-amber-heard.jpg)"></div>
    			<div onclick="img(this)" class="thumbnail" style="background-image:url(https://img1.goodfon.com/original/1920x1080/3/9f/anastasiya-scheglova-devushka-4354.jpg)"></div>
    			<div onclick="img(this)" class="thumbnail" style="background-image:url(https://img3.goodfon.ru/wallpaper/original/a/86/kira-kristina-naytli-keira.jpg)"></div>
    			<div onclick="img(this)" class="thumbnail" style="background-image:url(https://wallbox.ru/wallpapers/main2/201731/1501485774597edace3af7c6.85452886.jpg)"></div>
    		</div>
    	</div>
    	</body>
    </html>


    PS: смотрите (изучайте) свойства и методы DOM и пр. пр.
    Ответ написан
    4 комментария
  • Как сделать чтобы бот отвечал только на определенного человека?

    erge
    @erge
    Примус починяю
    Prorokius, Sanasol намекает на неверный код, должно быть условие НЕравентсва, а не условие равенства на .... !msg.author.id
    что это вообще? подозреваю что результатом !msg.author.id будет всегда false (если есть КАКОЙ Либо Id)
    т.е. сравниваются false и значение справа
    а false уж точно не равен (А условие именно равентсва) любому значению в правой части условия, потому if и не отрабатывает!

    см. Операторы сравнения
    Ответ написан
    Комментировать
  • Как перебирать объект в node.js?

    erge
    @erge
    Примус починяю
    См. Объекты: перебор свойств
    for (key in obj) {
      /* ... делать что-то с obj[key] ... */
    }


    Далее ....
    var obj = {
    3223: {
    count: 112,
    popular: true,
    price: 2,
    id: 1,
    service: "Facebook",
    slug: "3223",
    image: "/assets/images/serv/3223.png"
    },
    vkcom: {
    count: 0,
    popular: true,
    price: 23,
    id: 0,
    service: "Вконтакте",
    slug: "VKcom",
    image: "/assets/images/serv/vkcom.png"
    },
    mailru: {
    count: 540,
    popular: true,
    price: 2,
    id: 2,
    service: "MailRu",
    slug: "MailRu",
    image: "/assets/images/serv/mailru.png"
    }
    }
    
    console.log(obj[3223]["count"])
    
    for (key in obj) {
      console.log("Для key="+key+" count="+obj[key]["count"])
    }


    upd:
    так же еще можно метод forEach использовать
    Object.keys(obj).forEach(function(key) {
      console.log(key, ':', this[key]["count"]);
    }, obj);


    PPS: учитесь пользоваться поиском... ya.ru
    Ответ написан
    Комментировать
  • Как сохранить grub при копировании дисков?

    erge
    @erge
    Примус починяю
    сохранить загрузчик:
    dd if=/dev/sda of=/path/mbr-boot-code bs=446 count=1


    записать на диск соответственно:
    dd if=/path/mbr-boot-code of=/dev/sda bs=446 count=1


    См. Master Boot Record

    но, имхо, лучше просто заново его переустанавливать grub-install
    тем более что menu.cfg он не затирает.
    Ответ написан
    Комментировать
  • Как выключить Windows через Linux?

    erge
    @erge
    Примус починяю
    1. Поставить на Windows либо OpenSSH либо FreeSSHD
      по первому есть некоторые проблемы в установке (с правами на файлы), смотрите доки
      PS: небольшой оффтоп: так же Far не работает под OpenSSH, под FreeSSHD работает, но есть mc (Midnight Commander) под Windows, правда ущербный, но для копирования файлов и редактирования текстовых файлов пойдет.
    2. установить telnet сервер в компонентах Windows, по умолчанию он отключен (ибо не секьюрно)


    Далее... подключаетесь на Windows PC по ssh, либо telnet пользователем с правами администратора и выполняете команду
    shutdown -s -f -t 0

    или посылаете команду по SSH
    ssh administrator@windowspchost shutdown -s -f -t 0


    PPS: и... да, пользователь windows скорее всего должен иметь логин из английских букв, чтобы не было проблем с кодировкой при передаче логина (а они скорее всего будут)
    Ответ написан
    Комментировать
  • Что сделать чтобы при печати из acrobat reader из wine печатался документ а не служебный набор символов?

    erge
    @erge Автор вопроса
    Примус починяю
    Проблема решилась...
    сменил драйвер с PCL3 на следующий из предлагаемых по списку версии 3.15.2 (без надписи PCL)
    в настройках печати в Acrobat Reader 6.02 в дополнительных настройках (из окна печати, кнопка "Дополнительно") стала доступна опция "печатать как изображение", отметил ее. Теперь из Acrobat Reader запускаемого из под Wine печать работает.
    Ответ написан
    Комментировать