Задать вопрос
  • Как безопасно указать строковый параметр при формировании JS на PHP?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Знаете как я сам обычно делаю в таких случаях, чтобы не путаться во всей этой мешанине скобок? Все JavaScript функции сохраняю в отдельные файлы и при необходимости просто вставляю их через file_get_contents("function_name.js") и тогда не приходится парится с экранированием. По аналогии, можно все хранить в базе данных, если нужна скорость.
    Ответ написан
    Комментировать
  • Как решить проблему с focus()?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Если вам нужна плавная прокрутка до элемента используйте функцию scrollIntoView(), пример использования ниже:
    document.querySelector('#mobile-search').scrollIntoView({behavior: 'smooth'});

    Вместо #mobile-search можете прописать и использовать абсолютно любой CSS-селектор - например можете вписать селектор input[name="email"] и прокрутка все равно будет работать, так как она осуществляется через JavaScript.

    Код для прокрутки можно привязать к нужной вам кнопке следующим образом:
    <a onclick="document.querySelector('#mobile-search').scrollIntoView({behavior: 'smooth'});" href="#mobile-search">Прокрутить</a>

    Атрибут onclick запускает код внутри себя, при клике на сам элемент. Соответственно, можете вместо ссылок, спокойно использовать любые другие элементы в качестве кнопок, допустим li или button.

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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Для начала сверстайте само модальное окно - ведь нельзя вывести то, чего нет. В интернете полно примеров модальных окон. Функцию для вызова модального окна пихайте внутрь success, на этом все.

    P. S. Если вам лень верстать модальное окно, то тогда берите что-то готовое, например AlertifyJS здесь подойдёт.
    Ответ написан
    2 комментария
  • :invalid лишь после попытки отправить форму?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Просто используйте input:focus:invalid и будут загоратся только поля в фокусе.
    Ответ написан
    6 комментариев
  • Как сделать фоновую музыку во всех браузерах?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Музыка может просто не запустится, не смотря на ваши установки на автовоспроизведение - браузеры могут блокировать такое поведение. Наилучший вариант, который будет более-менее хорошо работать везде, это загрузить свою музыку на YouTube, а на сайте вывести невидимый фрейм со своим видео, в режиме автовоспроизведения. При запуске видео с YouTubue проблем с автовоспроизведением обычно нет.
    Ответ написан
    Комментировать
  • Какую бд стоит юзать для бота?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Если ваш бот браузерный, можете спокойно использовать localForage, это просто весчь, невероятно удобно хранить массивы, объекты и даже файлы (поддерживает типы Blob и File). Хоть про тип File в документации ничего и не сказано, но он реально может их сохранять и выдавать потом по запросу. Как таковых ограничений нет, работает все асинхронно в неблокирующем режиме.
    Ответ написан
    Комментировать
  • Как отправить файл через FormData + phpMailer?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Попробуйте отправить форму на чистом JS, возможно так заработает:
    <script type="text/javascript">
    
      // По готовности страницы, вешаем на форму обрабочтик onsubmit инлайново:
      document.addEventListener('DOMContentLoaded', function() {
        document.querySelector('form#FORM_ID').setAttribute('onsubmit', 'event.preventDefault(); form_send(this);');
      });
    
      // Фуцнкция для отправки формы на чистом JavaScript:
      function form_send(form) {
        var url = form.getAttribute('action') + '?time=' + new Date().getTime();
        var xhr = new XMLHttpRequest(); xhr.open('POST', url);
        xhr.onreadystatechange = function() {
          if (xhr.readyState === XMLHttpRequest.DONE) {
            if (xhr.status === 200) {
              form.setAttribute('onsubmit', 'event.preventDefault();');
              form.innerHTML = xhr.responseText;
            }
            else {
              alert('При отправке формы произошла ошбика, детали смотрите в консоли.');
              console.log('При отправке формы произошла ошбика, ниже объект с деталями ошибки:');
              console.dir(xhr);
            }
          }
        }
        xhr.send(new FormData(form));
      }
      
    </script>

    Замените FORM_ID на идентификатор вашей формы. Убедитесь, что у вашей формы прописан атрибут action.
    Ответ написан
    3 комментария
  • Обработка формы в php с неизвестными переменными?

    zkrvndm
    @zkrvndm
    Архитектор решений
    В массиве $_POST будут лежать все переданные переменные, вы можете спокойно их перебрать через foreach()
    Ответ написан
    Комментировать
  • Как создать браузер на основе Chromium?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Просто используйте Electron.
    Ответ написан
    5 комментариев
  • Как сделать функционал подтверждения номера телефона?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Для отправки sms используйте любое сторонее API, например вполне подойдёт sms.ru ну а все остальное легко программируется на php/javascript. Если конкретизируйте, что именно вызывает у вас затруднения, думаю смогу помочь советом.
    Ответ написан
    Комментировать
  • Как заблокировать input, если выбрано "нет" в radio button?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Выше вам предложили вариант на JavaScript, но но правде говоря существует еще решение на чистом CSS. Для блокировки вы можете использовать стиль pointer-events: none совместно с CSS селектором ~ и CSS пседо-классом :checked. Разумеется, это сработает только в том случае, если ваши радио-кнопки находятся на том же уровне вложенности, что и блокируемое поле ввода. Если вам нужно, чтобы ваша форма работала даже при отключенном JavaScript, то это хороший вариант.

    HTML-код с примером:
    <input type="radio" name="replenishment-deposit" value="1" checked>
    <input id="net" type="radio" name="replenishment-deposit" value="0">
    <input id="deposit-replenishment-amount" type="number" name="deposit-replenishment-amount" class="calculator-form__input">

    CSS-стили для блокирования по условию:
    #net:checked ~ #deposit-replenishment-amount {
        pointer-events: none;
    }
    Ответ написан
  • Как проверить, что некоторые элемента одного массива есть в другом?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Я не считаю себя знатоком JS, но что-то я не слышал про функцию .contains()
    Если вам нужен просто результат, вы можете банально перебрать свой массив в лоб:
    // Функция для сравнения массивов:
    function arrayCompare(arg1, arg2) {
    	var result = false;
    	for (var n = 0; n < arg1.length; n++) {
    		for (var i = 0; i < arg2.length; i++) {
    			if (arg1[n] === arg2[i]) { result = true; }
    		}
    	}
    	return result;
    }
    
    // Вернёт true, если есть хотя бы одно точное совпадение,
    // если совпадений совсем нет, то вернет false:
    console.log(arrayCompare(array, falsey));

    Я на 100% уверен, что существуют специальные хитрые алгоритмы перебора, которые могу дать результаты с меньшими затратами ресурсов, чем полный перебор, но для небольших массивов вам за глаза хватит.
    Ответ написан
    1 комментарий
  • Как сериализовать html форму?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Простого способа как вы хотите сделать нет, нужно писать парсер, который будет разбирать имена и создавать объекты.
    Ответ написан
    Комментировать
  • На каком файлообменнике можно сейчас заработать?

    zkrvndm
    @zkrvndm
    Архитектор решений
    На своем собственном. Вы можете просто показывать рекламу, пока идёт загрузка файла - сам файл грузить блобом, отображая индикацию процесса и по готовности сразу отдавать блоб на сохранение.
    Ответ написан
  • Как перезапустить OpenServer удаленно обычным GET-запросом?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Блин, надо было почитать сначала, как работает Basic Auth. Решение оказалось на удивление простым, если я хочу удаленно перезапустить сервер, то инициировать нужный запрос НЕ с родного домена можно вот так:
    open_server_restart_window = window.open('');
    open_server_restart_window.location.href = 'http://login:password@localhost:1515/restart';
    setTimeout(function() { open_server_restart_window.close(); }, 3000);

    По аналогичному принципу можно сгенерировать iframe и использовать внутри него форму для переадресации. Само с собой надо заменить логин, пароль и адрес сервера в ссылке на свои. При таком запросе CORS никак не мешает, а сигнал на перезапуск вполне себе доходит до сервака и прекрасно работает.
    Ответ написан
    Комментировать
  • Как правильно составить регулярное выражение?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Попробуйте так:
    $str = 'http://{РАНДОМНЫЙ-ДОМЕН}/';
    $url = preg_replace('/^[^\/]//', '', $str);
    $url = preg_replace('/\/.*$/', '', $str);
    echo str_replace($url, 'новый_домен', $str);
    Ответ написан
    Комментировать
  • Как с помощью js узнать на каком устройстве открыт сайт (комп или мобильник)?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Правильный вариант, через User-Agent. Неправильный, но тоже рабочий вариант, через измерение ширины текущего окна.
    Ответ написан
    Комментировать
  • Как реализовать загрузку файлов на сервер?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вы можете это легко сделать на чистом JavaScript. Пример кода конкретно для вашей формы:
    <script type="text/javascript">
    
    	// По готовности страницы, вешаем на форму обрабочтик onsubmit инлайново:
    	document.addEventListener('DOMContentLoaded', function() {
    		document.querySelector('form#FORM_ID').setAttribute('onsubmit', 'event.preventDefault(); form_send(this);');
    	});
    
    	// Фцнкция для отправки формы на чистом JavaScript:
    	function form_send(form) {
    		var url = form.getAttribute('action') + '?time=' + new Date().getTime();
    		var xhr = new XMLHttpRequest(); xhr.open('POST', url);
    		xhr.onreadystatechange = function() {
    			if (xhr.readyState === XMLHttpRequest.DONE) {
    				if (xhr.status === 200) {
    					form.setAttribute('onsubmit', 'event.preventDefault();');
    					form.innerHTML = xhr.responseText;
    				}
    				else {
    					alert('При отправке формы произошла ошбика, детали смотрите в консоли.');
    					console.log('При отправке формы произошла ошбика, ниже объект с деталями ошибки:');
    					console.dir(xhr);
    				}
    			}
    		}
    		xhr.send(new FormData(form));
    	}
      
    </script>

    Разместите этот html-код на странице с вашей формой и не забудьте заменить FORM_ID на ID вашей формы!

    P. S. Кстати, есть еще один вариант, без использования JS - можно просто разместить вашу форму внутри iframe.
    Ответ написан
  • Как скрыть jivosite в мобильной версии?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Разместите на своем сайте (в любом месте) следующий html-код:
    <script type="text/javascript">
    	document.addEventListener('DOMContentLoaded', function() {
    		if (window.innerWidth > 768) {
    			var jivo = 'Здесь разместите код от виджета JivoSite';
    			document.body.insertAdjacentHTML('beforeEnd', jivo);
    		}
    	});
    </script>

    Внутри одинарных скобок разместите код от виджета JivoSite, НО без переносов строк внутри!
    Удалите предварительно все переносы строк из кода виджета!!! Иначе будет ошибка и не заработает.
    Ответ написан
    Комментировать
  • Возможен ли парсинг на php через ssh tunnel?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вы можете использовать file_get_contents() для парсинга https сайтов. При этом, данная функция совершенно спокойно позволяет при запросе передавать любые заголовки от User -Agent и Cookie до так нужных вам POST-параметров. Можно легко имитировать нужный вам браузер и о обходить какие-то простые защиты.

    POST-запрос, инструкция.

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