Задать вопрос
  • Как подключить на одной странице к одному phpmailer-файлу две формы?

    @alexalexes
    Можно. Самое главное, мы не подключаем php-скрипт, а отправляем данные этих форм на обработку этим php-скриптом. Так проще прийти к пониманию, как оно работает.
    Чтобы php-скрипт мог воспринимать данные первой формы, он должен уметь пренебрегать наличием параметра user_car.
    А делается это таким образом:
    строчка:
    $car = $_POST['user_car'];
    исправляется на:
    $car = array_key_exists('user_car', $_POST) ? $_POST['user_car'] : null;

    и другая строчка:
    $mail->Body    = '' .$name . ' хочет перегнать машину ' .$car. '  из ' .$from. ' в ' .$to. '. <br> Вот его номер телефона ' .$phone;

    исправляется на:
    $mail->Body    = $name . ' хочет перегнать '.(is_null($car) ? 'неуточненную машину' : 'машину ' .$car). '  из ' .$from. ' в ' .$to. '. <br> Вот его номер телефона ' .$phone;

    PS:
    Чтобы вам не прислали js-инъекцию на почту, все принимаемые параметры, из которых формируется текст письма, следует экранировать.
    $name = htmlspecialchars($_POST['user_name']);
    $phone = htmlspecialchars($_POST['user_phone']);
    $car = array_key_exists('user_car', $_POST) ?  htmlspecialchars($_POST['user_car']) : null;
    $from = htmlspecialchars($_POST['from']);
    $to = htmlspecialchars($_POST['to']);
    Ответ написан
    Комментировать
  • Как работает цикл while в моем примере?

    @alexalexes
    Сделайте подробную трассировку решения.
    Код объяснит себя сам как он работает.
    let j = 1;
      while (i > 0) {
        i--;
        out15.textContent += 'шаг цикла=' + j + '; ' + 'i='+ i + '; (10-i)='+(10-i)+'<br/>';
       j++;
      }
    Ответ написан
    Комментировать
  • Как удалить добавленный класс?

    @alexalexes
    Скорее всего код удаления класса будет выглядеть так:
    $('.close-popup').on('click', function(event){
        $('.clicked').removeClass('clicked');
        event.stopPropagation();
      });

    PS: Обратите внимание на наличие дескриптора event во входном параметре обработчика события.
    PPS: Справка по теме всплытие и погружение в JS.
    Ответ написан
    Комментировать
  • Как закодировать URL utf8 в cp1251?

    @alexalexes
    Если проанализировать сервис https://service.webboss.pro/urlencode-urldecode , то в нем используется файл https://webboss.pro/js/plugin/urlencode.js , в котором есть функция convert_to_cp1251(str).
    Возможно, этого вам будет достаточно.
    Ответ написан
    3 комментария
  • Несколько массивов вместо одного?

    @alexalexes
    $description1[] = array([..................])
    Обратите внимание сколько раз тут объявлен массив в массиве.
    array([]) - это аналогично [[]] или array(array())
    PS: Для того, чтобы не путаться впредь, перестаньте использовать один из способов.
    Либо array() если у вас php 5.6-
    либо [] если php 5.6+ (это предпочтительней - стильно, модно молодежно, похож на JS)
    Ответ написан
  • Не могу понять работу метода .map?

    @alexalexes
    **
    Пройдемся по массиву и вернем новый массив с такими элементами:
    Если шагнули на нулевой элемент (index == 0), то вернем слово как элемент в новый массив как есть (.... ? word : ....)
    Если шагнули на ненулевой элемент, то Меняем регистр у первой буквы (... : word[0].toUpperCase() + word.slice(1)...) и вернем результат как элемент в новый массив.
    Ответ написан
    Комментировать
  • Winwheel.js Как высчитать на каком сегменте остановится колесо?

    @alexalexes
    Читайте комментарий.
    // This formula always makes the wheel stop somewhere inside prize 3 at least
    // 1 degree away from the start and end edges of the segment.

    Сектор "Приз 3" находится за 90-ым градусом по часовой стрелке.
    Чтобы попадать туда, минимально число должно генериться чуть более 90, например, 91.
    Рандом генерирует веществ. числа в интервале 0...1.
    Нам нужно не выбежать из сектора за верхнюю границу.
    Секторов 8, на один сектор приходится 45 градусов.
    91 + 45 = 136 градусов, убежали в следующий сектор.
    Берем 44, оказываемся на границе секторов.
    Берем 43 - то, что надо, нашли верхний предел генерации параметра (134 градуса).
    PS:
    91 - это минимальный параметр;
    43 - макс. внутрисекторное смещение.
    Ответ написан
    2 комментария
  • Как определить переменную в зависимости от размера картинки?

    @alexalexes
    Определяете с помощью метрики - пропорции:
    $p = $imgwidth * 1.0 / $imgheight; // пропорция; умножение на 1.0 чтобы перевести число в float;
    $delta_q = 0.1; // Дельта ощущения "квадратности" изображения
    switch(true)
    {
      case $p > (1.0 +  $delta_q): echo 'альбомный формат изображения'; break;
      case $p < (1.0 - $delta_q): echo 'книжный формат изображения'; break;
      default: echo 'изображение, вероятно, квадратное'; 
    }

    Когда у вас пропорция $p == 1.0 , то изображение строго квадратное.
    Чтобы избавиться от строгости, вводится дельта $delta_q, дабы считать квадратными изображения, в пропорции "слегка" меньше единицы и "слегка" больше единицы.
    Ответ написан
    Комментировать
  • Как производить расчёты в процентах?

    @alexalexes
    1) Вычисление процентных долей - это вопрос к методу вычисления.
    2) Разделитель добавляется с помощью метода join при выводе массива:
    text.innerHTML = arr.join(', ');
    Дисконт лучше считать вне цикла, и завести под него отдельный массив:
    var dis = arr.map(function (item)
    {
      return Math.round(item - item * (5 / 100.0));
    });

    https://codepen.io/anon/pen/rgLBpd
    Ответ написан
    Комментировать
  • Учить PHP 5 или 7?

    @alexalexes
    Пока не появится реальная задача - вообще бесполезное метание.
    Читать про то и про другое, потом что-то пытаться накодить.
    Однако, по-настоящему вы освоите ту или иную версию, когда будете работать над реальным серверным приложением/сайтом.
    Ответ написан
    Комментировать
  • Как сделать выборку в сгруппированном формате?

    @alexalexes
    Я отвечал на подобный вопрос.
    Как произвести правельную выборку статей со всеми тегами?
    В вашем случае посты превращаются в группы, а теги - в занятия групп.
    Ответ написан
    Комментировать
  • Как отправить форму без перезагрузки страницы?

    @alexalexes
    xhr.send(file); // отправили файл аяксом, мы молодцы.
        document.getElementById('uploadDropForm').submit(); // зачем-то еще отправляем форму традиционным способом, наверное тут мы что-то делаем не так.???

    Еще нужно ответить на вопрос "А был ли мальчик?", то есть что вы передаете в метод send:
    ...
    console.log(file);
    xhr.send(file);
    ...
    Ответ написан
  • Как передать в string.match(???) переменную и как сделать автоклик?

    @alexalexes
    1)
    let regExpB = textContent.match(begin); // передаю. и на выходе null
        let regExpE = textContent.match(end );  //

    А вы получаете тот же самый результат, когда begin и end при отладке заменяете на статичные регулярки, по формату аналогичные тому, что формируется в begin и end. Может проблема в корректном формировании begin и end, а не в их выполнении?
    2) addE.dispatchEvent(ev); заменить на addE.click() - вроде самый простой поджигатель события, если на элементе есть обработчик или доступно какое-нибудь действие по умолчанию для клика, то должно работать.
    Ответ написан
    1 комментарий
  • Почему не работают функции mb_convert_encoding() и iconv()?

    @alexalexes
    Страница-источник на самом деле в кодировке utf8 отдается, а не в windows-1251, как это указано в html.
    Конвертировать не нужно, если вам нужен utf8 на выходе:
    header('Content-type: text/html; charset=utf8');
      echo file_get_contents('http://antiko22.info/vse_novosti/dolg-pered-mfo-ne-mozhet-prevyshat-telo-zajma-bolee-chem-v-3-raza/');
    Ответ написан
  • Как реализовать поиск элементов по критериям?

    @alexalexes
    Можно реализовать, но текст запроса нужно конструировать динамически отдельно для конкретного набора обязательных критериев:
    select item.idItem
      from item
     where
    count (SELECT details_item.idItem FROM details_item 
    JOIN detail ON detail.idDetail = details_item .idDetail 
    WHERE detail.title = "Железо"
      and details_item.idItem = item.idItem) > 0
      
      and 
      
      count (SELECT details_item.idItem FROM details_item 
    JOIN detail ON detail.idDetail = details_item .idDetail 
    WHERE detail.title = "Дерево"
      and details_item.idItem = item.idItem) > 0
    
      and 
      
    count (SELECT details_item.idItem FROM details_item 
    JOIN detail ON detail.idDetail = details_item .idDetail 
    WHERE detail.title = "Медь"
      and details_item.idItem = item.idItem) > 0
      
      .... и так далее, все обязательные критерии прописываем через подзапрос count()

    Вариант 2 с нечувствительностью к соответствию одному из параметров поиска:
    select idItem
    from (select item.idItem,
           count (SELECT details_item.idItem FROM details_item 
                    JOIN detail ON detail.idDetail = details_item .idDetail 
                   WHERE detail.title = "Железо"
                     and details_item.idItem = item.idItem) as count_1,
      
           count (SELECT details_item.idItem FROM details_item 
                    JOIN detail ON detail.idDetail = details_item .idDetail 
                   WHERE detail.title = "Дерево"
                     and details_item.idItem = item.idItem) as count_2,
           
           count (SELECT details_item.idItem FROM details_item 
                    JOIN detail ON detail.idDetail = details_item .idDetail 
                   WHERE detail.title = "Медь"
                     and details_item.idItem = item.idItem) as count_3
                     
                    .... и так далее все обязательные критерии через подзрапрос count(...) as count_n 
      from item)  
      where count_1 > 0 and count_2 > 0 and count_3 > 0 -- строгое соответствие параметрам поиска
         -- тут делаем логику нечувствительности к одному из параметров поиска
         or count_1 = 0 and count_2 > 0 and count_3 > 0
         or count_1 > 0 and count_2 = 0 and count_3 > 0
         or count_1 > 0 and count_2 > 0 and count_3 = 0
    Ответ написан
    Комментировать
  • Как правильно вывести записи из бд(MySql,PHP)?

    @alexalexes
    Накопите промежуточные строки в $out_arr, соедините элементы массива через разделитель join-ом и подайте на вывод.
    $out_arr = array(); 
    while($hero2 = mysqli_fetch_assoc($hero1))
        {
         
    $time_now = strtotime($hero2['cron1']);
    $time_need = strtotime($hero2['cron2']);
    if($time_need>=$time_now ){
    $t_s= date("H:i ",75600-($time_need-$time_now));
    }
    else
    $t_s= date("H:i ",75600-($time_now-$time_need));
           $out_arr[] = str_replace(":",".",$t_s);
     }
    echo "[".join(' ,',  $out_arr).']';
    Ответ написан
    Комментировать
  • Как сделать ссылки кириллицей в кнопке поделиться?

    @alexalexes
    Чтобы конструировать самостоятельно get-параметры в ссылке вам нужно полностью соблюдать стандарт кодирования символов RFC 3986.
    На стороне сервера это делается так:
    https://www.php.net/manual/ru/function.rawurlencode.php
    https://www.php.net/manual/ru/function.rawurldecode.php
    На стороне клиента так:
    https://developer.mozilla.org/ru/docs/Web/JavaScri...

    Чтобы строго соблюдать RFC 3986 (который резервирует !, ', (, ), и *), даже не смотря на то, что символы не используют сформированных URI разделителей, можно безопасно использовать следующее:

    function fixedEncodeURIComponent (str) {
    return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
    });
    }
    Ответ написан
    2 комментария
  • Как прекрутить редирект к Api Яндекс карт?

    @alexalexes
    Чтобы определить используемый язык клиентской стороны сайта достаточно проанализировать свойства window.navigator.
    Как определить язык браузера пользователя?
    PS:
    header('loacation ') - вы не можете использовать это в JS, это PHP.
    В JS то же поведение вызывается изменением свойства window.location.href
    Ответ написан
    Комментировать
  • Как реализовать такую выборку SQL?

    @alexalexes
    То есть, если у вас свойство count меньше 3, то выводить для таких позиций count = 0?
    SELECT shop_product.id, if(shop_product_skus.count >= 3, shop_product_skus.count, 0) as count
      FROM shop_product
        join shop_product_skus on shop_product.id = shop_product_skus.product_id 
    WHERE 
        shop_product.id IN (14770, 13287, 14160, 13906)
    Ответ написан
    1 комментарий
  • Как сделать ветвление подключения чанков в modx?

    @alexalexes
    С помощью сниппета if вы можете сделать условие, из какого ресурса подгружать контент в конкретном месте шаблона.
    Только вот для выявления мобильного клиента вам понадобиться написать еще один сниппет, в качестве проверяемого условия, чтобы проанализировать свойство user_agent.
    ЗЫ: Что-то наподобие такого www.about-cms.com/opredelit-mobilnoe-ustrojstvo-mo... хотя стоит критически относиться к таким реализациям по актуальности методики и по степени костыльности.
    function mobile_detect() { 
    $user_agent = $_SERVER['HTTP_USER_AGENT']; 
    $ipod = strpos($user_agent,"iPod");
    $iphone = strpos($user_agent,"iPhone");
    $android = strpos($user_agent,"Android");
    $symb = strpos($user_agent,"Symbian");
    $winphone = strpos($user_agent,"WindowsPhone");
    $wp7 = strpos($user_agent,"WP7");
    $wp8 = strpos($user_agent,"WP8");
    $operam = strpos($user_agent,"Opera M");
    $palm = strpos($user_agent,"webOS");
    $berry = strpos($user_agent,"BlackBerry");
    $mobile = strpos($user_agent,"Mobile");
    $htc = strpos($user_agent,"HTC_");
    $fennec = strpos($user_agent,"Fennec/");
    $nokia = strpos($user_agent,"Nokia");
    if ($ipod || $iphone || $android || $symb || $winphone || $wp7 || $wp8 || $operam || $palm || $berry || $mobile || $htc || $fennec || $nokia) 
    {
    echo "<link rel='stylesheet' media='all' href='mobile.css' type='text/css' />";
    } 
    else
    {
    echo "<link rel='stylesheet' media='all' href='desktop.css' type='text/css' />";
    }
    }
    mobile_detect();
    Ответ написан