• Как сгенерировать ошибку DNS_PROBE_FINISHED_NXDOMAIN с помощью php?

    @killedfriend
    Для начала стоит разобраться в том, что это за ошибка, и как работает dns.
    Допустим, вы владеете сайтом habr.com. Когда клиент вводит в адресной строке habr.com, браузер делает запрос к dns, чтобы получить ip-адрес вашего сервера.
    Соответственно, если браузер не может зарезолвить от dns имя вашего домена или айпишник сервака, то он возвращает клиенту эту ошибку. Где в этой связке ваш php? Нигде. Средствами php вы такое не провернёте.
    Ответ написан
    Комментировать
  • Как сделать ссылку на Viber?

    Middle_Pudge
    @Middle_Pudge
    Дело в том что десктопное и мобильное приложение Viber открывается по разным ссылкам, что создает определенные сложности при добавлении такой ссылки на сайт. Поэтому потратьте 2 минуты чтобы прочитать и понять текст ниже) Для мобильных устройств используется такой подход формирования ссылки:
    <a href="viber://add?number=380950000000">Написать в Viber</a>

    Для ПК – такой:
    <a title="Должен быть установлен Viber для ПК" href="viber://chat?number=+380950000000">Написать в Viber</a>


    Для того, чтобы определить устройство при помощи PHP, в самом простейшем случае можно воспользоваться простейшей функцией, которая определяет USER_AGENT устройства, а затем, в зависимости от того, опередила ли функция устройство как мобильное или нет, показывать ту или иную ссылку.
    <?php function check_mobile_device() { 
        $mobile_agent_array = array('ipad', 'iphone', 'android', 'pocket', 'palm', 'windows ce', 'windowsce', 'cellphone', 'opera mobi', 'ipod', 'small', 'sharp', 'sonyericsson', 'symbian', 'opera mini', 'nokia', 'htc_', 'samsung', 'motorola', 'smartphone', 'blackberry', 'playstation portable', 'tablet browser');
        $agent = strtolower($_SERVER['HTTP_USER_AGENT']);    
        foreach ($mobile_agent_array as $value) {    
            if (strpos($agent, $value) !== false) return true;   
        };     
        return false; 
    };?>

    Расположить функцию, можно, например в самом начале страницы, перед 'doctype' или вынести в отдельный файл и там же подключить его.

    После этого, в месте где будет выводиться ссылка на Viber используйте такую проверку:
    <? if(check_mobile_device()) :?>
    	<a title="Viber" href="viber://add?number=79851198793"></a>              
    <? else : ?>
    	<a title="Viber" href="viber://chat?number=+79851198793"></a>
    <? endif; ?>

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Всё. Вместо структуры массивов вы зачем-то формируете JSON-строку, причём неправильную, а затем снова пытаетесь преобразовать её в JSON.
    $kbd = [];
    foreach($ds->children() as $dt) {
        $kbd[] = [
            'text' => $dt->title,
            'callback_data' => $dt->id
        ];
    }
    $keyboard = [
        'inline_keyboard' => [$kbd]
    ];
    $buttons = json_encode($keyboard, true);
    Ответ написан
    2 комментария
  • Как заблокировать загрузку скрипта при определённом user-agent?

    @coderslang
    Попробуй перевести в lowercase строку перед сравнением.

    if(navigator.userAgent.toLowerCase().indexOf("lighthouse") < 0) {
    //Здесь код счётчиков метрики и аналитики
    }


    Подробнее
    Ответ написан
    Комментировать
  • Как выкачать весь сайт?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    https://eternallybored.org/misc/wget/

    Чтобы скачать сайт целиком с помощью wget нужно выполнить команду:
    wget -r -k -l 7 -p -E -nc http://site.com/

    После выполнения данной команды в директорию site.com будет загружена локальная копия сайта site.com. Чтобы открыть главную страницу сайта нужно открыть файл index.html.
    Рассмотрим используемые параметры:
    -r — указывает на то, что нужно рекурсивно переходить по ссылкам на сайте, чтобы скачивать страницы.
    -k — используется для того, чтобы wget преобразовал все ссылки в скаченных файлах таким образом, чтобы по ним можно было переходить на локальном компьютере (в автономном режиме).
    -p — указывает на то, что нужно загрузить все файлы, которые требуются для отображения страниц (изображения, css и т.д.).
    -l — определяет максимальную глубину вложенности страниц, которые wget должен скачать (по умолчанию значение равно 5, в примере мы установили 7). В большинстве случаев сайты имеют страницы с большой степенью вложенности и wget может просто «закопаться», скачивая новые страницы. Чтобы этого не произошло можно использовать параметр -l.
    -E — добавлять к загруженным файлам расширение .html.
    -nc — при использовании данного параметра существующие файлы не будут перезаписаны. Это удобно, когда нужно продолжить загрузку сайта, прерванную в предыдущий раз.
    Ответ написан
    Комментировать
  • Как написать регулярное выражение?

    Ну например вот так

    preg_match( /<li>Артикул: <span>(.{3,24})<\/span><\/li>/ , $string);


    https://regex101.com/r/mrygUO/1
    Ответ написан
    Комментировать
  • Откуда можно получать данные о городах и улицах?

    Chefranov
    @Chefranov
    Новичок
    Google Maps или Places API например https://developers.google.com/places/ или другой картографический сервис
    Еще варианты:
    Кладр https://dadata.ru/api/suggest/#about-address
    Фиас https://fias.nalog.ru/
    Basic Data basicdata.ru
    Ответ написан
    2 комментария
  • Как преобразовать строку php?

    @yourbatya
    Разрабатываю разработки
    Короче, Максим, я тебя спас и в благородство играть не буду: выполнишь для меня пару функций - и мы в расчёте. Заодно посмотрим, как быстро у тебя башка после изучения php прояснится. А по твоей теме я уже разузнал. Хрен его знает, на кой ляд тебе так данные хранить сдалось, но я в чужие дела не лезу. Хочешь так хранить - значит есть за что...
    В предыдущем вопросе ты говорил, что получаешь json от яндекс.телефонии, судя по всему ты ещё с ней мучаешься. Яндекс передаёт данные в формате "+79876543210", а в ответе господину Владимир @ ты упомянул, что получаешь телефоны с формы на сайте, и видимо с помощью плейсхолдера в виде "+7 (987) 654-32-10".
    А теперь ты пытаешься зачем-то сравнивать данные яндекса и с твоего сайта.
    Короче, если всё так, то сделай в файле, который у тебя пишет данные в бд из формы на сайте, следующее:
    $phone = preg_replace("/[^+0-9]/s", "", strip_tags(trim($_POST['phone'])));
    Где $phone - это, соответственно, переменная, которая принимает в себя данные из поля "телефон" в форме.
    Так ты получишь в твоей бд телефоны вида +79876543210. И затем уже сравнивай их сколько влезет,
    Это самый простой вариант :)
    Если тебе нужно пройтись по базе и видоизменить все телефоны, то сделай отдельный вопрос.
    Ответ написан
  • Как сохранить одно из значений json в mysql?

    fwlone
    @fwlone
    ^^
    <?php
    $obj = json_decode(вашJSON);
    // Внутри у вас будут обьекты called, calls, и т.д.,  
    var_dump($obj ->data );
    // Внутри у вас будет массив с обьектами внутри called
    var_dump($obj ->data ->called);
    // Достаем phoneи dateTimeUTC для первого элемента массива
    echo 'Phone: ' . $obj->data->called[0]->phone .' | dateTimeUTC: ' . $obj->data->called[0]->dateTimeUtc;
    // Достаем все элементы, через цикл
    foreach ($obj ->data ->called as $called)
    {
      echo 'Phone: ' . $called->phone .' | dateTimeUTC: ' . $called->dateTimeUTC . '<hr/>';
    }
    // А чтобы записать в базу, так же или сами обращаетесь к конкретному элементу или проходите циклом и сохраняете)
    mysqli_query("INSERT INTO `table` (`phone`, `dt_time`) VALUES ('" . $called->phone . "', '" . $called->dateTimeUTC . "')"); 
    // Точный запрос не покажу, тут уже какая у вас ORM или какая своя обертка лишь пример 
    // Не забывайте про фильтрацию перед записью, мало ли какие данные придут)
    Ответ написан
    3 комментария
  • Как правильно вывести результат выполнения php?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    return $users;
    Вы возвращаете результат, а потом хотите ещё какие то действия выполнять. Не надо так!
    Ответ написан
    22 комментария
  • Почему код не вносит запись в бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если немного отойти в сторону от насущных потребностей горе-кодеров исправить опечатку и бежать скорее такжекодить дальше, то вопрос довольно интересный.

    В частности, возникает закономерный вопрос - почему $result содержит true, а не false, как должно быть в случае ошибки? Ведь у запроса явно неверный синтаксис? И что означают загадочные слова автора (который не в ладах не только с РНР, но и с русским языком), "Два поля в ней редактируются и я пытаюсь их сохранить, не то, что хочу"?

    Ответ, для тех кто хочет научиться программировать на уровне чуть сложнее, чем складывание программ из десятка с трудом заученных операторов, довольно интересный.

    Начнем с запроса. Ошибка в нем действительно есть, но не синтаксическая. Дело в том, что оператор AND может использоваться не только в операторе WHERE. Это совершенно самостоятельный логический оператор: SELECT 1 AND 1; это совершенно легитимный запрос, который вернет единицу - результат операции 1 AND 1;.

    Точно так же результат этой операции можно присвоить и полю при запросе UPDATE:
    UPDATE Users SET logist=1 AND 1 WHERE id=100;
    А теперь посмотрим внимательно на исходный запрос. Для удобства я поставил скобки, чтобы показать, в каком порядке выполнятся операторы в запросе:
    UPDATE Users SET logist=('$log' AND (sum='$sum')) WHERE id='$form_id'

    Что здесь важно понимать?
    • - что в выражении sum='$sum' знак "равно" меняет свое значение и из оператора присваивания превращается в оператор сравнения.
    • - что существует такое явление, как приоритет выполнения операторов. И у оператора AND приоритет выше, чем у = как оператора присваивания, но ниже, чем у = как оператора сравнения!
    • - что существует такое явление, как приведение типов, и mysql по мере сил пытается привести операнды выражения AND ктакому типу, с которым оно может работать (числовому)

    таким образом мы
    1. сначала приводим выражение '$log' к числовому/булеву типу (и получаем скорее всего 0)
    2. потом получаем результат выражения sum='$sum' (1 или 0 в зависимости от того, равно ли содержимое поля sum значению переменной $sum или нет),
    3. затем выполняем операцию 0 AND 0
    4. и в итоге мы присваиваем этот 0 полю log

    Каковой ноль и объясняет загадочные слова автора "я пытаюсь сохранить не то, что хочу."

    Напоследок хочется рассказать о важности информирования программиста об ошибках.

    На самом деле ошибка в этом запросе все-таки есть. И звучит она как Truncated incorrect DOUBLE value: 'log'
    Просто в зависимости от настроек mysql она является либо фатальной, либо просто нотисом. В случае автора это был нотис, который в пхп без специальных средств заметить невозможно.
    Но если бы база данных была настроена в strict mode (и у автора вопроса было настроено правильное отображение ошибок mysqli),то ошибка бы стала фатальной, а поведение кода - более предсказуемым: значение поля не обновилось бы на непонятный нуль, а запрос бы выдал ошибку.
    Ответ написан
    3 комментария
  • Динамично менять информацию на сайте?

    @vardoLP
    Ват ю сэй эбаут май мама?!
    1. Устанавливаете wordpress
    2. Качаете чистую тему тут (название темы любое может быть)
    3. Устанавливаете тему. активируете
    4. В header.php - шапку лендоса, в footer.php - подвал
    5. Можно в index.php вставить весь контент, можно создать front-page.php (не так важно)
    6. В теме есть файл style.css - в него стили лендинга
    7. Скрипты js и доп css подключайте через functions.php (если не знаете как, подключайте просто в шапке или в футере)
    8. Если лендос не слишком заморочен, используйте раздел Записи и рубрики. К примеру. Создаете рубрику секция1, создаете запись и отмечаете что в этой рубрике. Потом в index.php выводите записи из нужной рубрики. И так для всех секций лендинга.
    9. Как вариант для более лучшей настройки можно использовать ACF, но он платный.
    10. Если что не понятно, спрашивайте :)
    Ответ написан
    3 комментария
  • Что за редактор на фото?

    DeLaVega
    @DeLaVega
    Верстаю, фронтэндю =)
    Ответ написан
    Комментировать
  • Как удобно принимать платежи со всего мира?

    KEugene
    @KEugene
    Пользовался PayPal, но с ним постоянно возникают проблемы (задержка платежей), так же нельзя оплатить с карты.

    Такое впечатление, что мы знаем разные Пейпелы.
    Вообще, функционал напрямую зависит от страны регистрации пользователя. Например, в Украине нельзя принимать платежи, но отправлять можно (как раз с привязанной карты). Скажем, принимать платежи можно там, где есть возможность сделать линк с банковским счетом. Если такой кнопки нет, то аккаунт работает только на оплату.
    Альтернативой Пейпелу может послужить https://www.payoneer.com/. Конечно, там есть свои заморочки (а где их нет?), но где не работает Пейпел, то это неплохая альтернатива.
    Ответ написан
    2 комментария
  • Стоит ли учить JS или Java если поступаешь на Software Engineering?

    @dimoff66
    Кратко о себе: Я есть
    Университет для овладения профессией бессмысленен с моей точки зрения. Я почти 20 лет работаю профессиональным программистом без знания всех тех алгоритмов, что дают в университете. Для работы программистом нужен просто живой ум, а для овладения инструментами онлайн пособия, на худой конец онлайн курсы полугодовые. Дальше только практика практика практика...

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

    Отвечая конкретно на вопрос - JS будет полегче и перспективнее. Вся разработка движется к упрощению, скоро js будет номер один не только на фронтенде, но и на бэкенде. Но и на Java спрос будет, поэтому лучше думать не о том, что перспективнее, а о том, что больше приносит вам удовольствие, потому что веяния меняются, и постоянно думая что перспективнее вы будете похожи на человека, мечущегося между очередями в кассы супермаркета и каждый раз наблюдающего, как очередь из которой он ушел вдруг начала двигаться быстрее. Расслабьтесь, получайте удовольствие. Лучшие программисты - те, кто умеет получать от профессии удовольствие. И это очень перспективно, пока искусственный интеллект еще не научился писать программы за нас.
    Ответ написан
    Комментировать
  • Как проверить форму на ввод телефона?

    Zoominger
    @Zoominger
    System Integrator
    function ValidPhone() {
        var re = /^\d[\d\(\)\ -]{4,14}\d$/;
        var myPhone = document.getElementById('phone').value;
        var valid = re.test(myPhone);
        if (valid) output = 'Номер телефона введен правильно!';
        else output = 'Номер телефона введен неправильно!';
        document.getElementById('message').innerHTML = document.getElementById('message').innerHTML+'<br />'+output;
        return valid;
    }
    Ответ написан
    Комментировать
  • Верстка. Какие у меня ошибки?

    FeST1VaL
    @FeST1VaL
    Тихий
    Бегло посмотрел код, по коду:
    1. Много мест где лишние пробелы, это конечно не ошибки, но просто как по мне не есть хорошо.
    2. Солянка разных стилей написание названий классов, Вы используете и БЭМ, snake-case, CamelCase, under_score
    3. Иногда походу клинит с названиями containerFuter, Process__imge
    4. Есть как минимум 1 описка, написал Landign
    5. Очень странно работает меню.
    6. Форма на баннере как будто прилипла
    7. Есть мелкие косяки с отображением, Я не залезал в стили, но то что бросилось в глаза.
    Под фото белое пространство, возможно конечно вырезал плохо
    5c9ce2489c510707408820.jpeg
    Кнопка поехала
    5c9ce26aa1515690373667.jpeg
    Двойные рамки
    5c9ce286d8192393862178.jpeg
    Поехали соц.иконки
    5c9ce29f89bb0258160055.jpeg
    Ответ написан
    2 комментария
  • Как сделать элементы резиновыми с использованием CSS Grid?

    HunteR-VRX
    @HunteR-VRX
    Помешанный на развитии
    Для достижения поведения responsive (резиновости) вашей верстки, достаточно соблюдать одно главное условие - Никаких фиксированных значений width! Иными словами исключайте единицы измерения "px" и напротив дружите с относительными величинами, такими как: %, vw, vh, em, rem, а также в вашем случае фракции fr в рамках Grid css layout
    Ответ написан
    1 комментарий