• Как изменить определенные строки по id в mysql?

    Immortal_pony
    @Immortal_pony Куратор тега MySQL
    ... вот ты прямо так на английском и пиши
    где = WHERE
    поле id = id
    от 1 до 10 000 = >=1 AND id <= 10000

    Теперь собирай всё вместе:
    WHERE id >=1 AND id <= 10000

    А теперь добавляй это условие к своему запросу:
    UPDATE table SET field=field*2 WHERE id >=1 AND id <= 10000
    Ответ написан
    4 комментария
  • Как принять телефонный звонок на сервере?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Twilio
    Ответ написан
    Комментировать
  • Вопрос по отправка формы без перезагрузки - AJAX?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Sendmail на сервере настроен? Если нет или не знаешь, что это такое, то явно пропиши параметры SMTP в своём php-файле

    $mail->isSMTP(); //Send using SMTP
    $mail->Host = 'smtp.example.com';  //Set the SMTP server to send through
    $mail->SMTPAuth = true;  //Enable SMTP authentication
    $mail->Username  = 'user@example.com'; //SMTP username
    $mail->Password  = 'secret';  //SMTP password
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;  //Enable implicit TLS encryption
    $mail->Port = 465; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`


    Если и этого будет недостаточно, то придётся пойти на страшные меры: обернуть код в try...catch, включить debug и смотреть какая ошибка возникает при отправке.
    Кстати, именно так и по умолчанию и было сделано в документации к библиотеке, который ты пользуешься в разделе Simple Example
    Ответ написан
    Комментировать
  • После переноса с моего на хост клиента в pdf перестала отображаться картинка,в чем может быть проблема?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Закодируй картинку в base64 и запихни это в src - тогда ни с какими файлами возиться не придётся.
    Ответ написан
    Комментировать
  • Почему wp_upload_dir обрезает названия папок с символами?

    Immortal_pony
    @Immortal_pony
    Первый параметр, который принимает wp_upload_dir() это $time, а возвращает он всегда массив.
    Что ты пытаешься сделать вообще?

    Пальцем в небо, тебе нужна папка для каждого чата? Ну тогда как-то так можно сделать:
    function findOrCreateChatDir(string $chatId): string {
        $uploadDir = wp_upload_dir();
        $chatDir = "{$uploadDir['path']}/chat/{$chatId}";
        if (!file_exists($chatDir)) {
            wp_mkdir_p($chatDir);
        }
    
        return $chatDir;
    }
    Ответ написан
    1 комментарий
  • Как регулярным выражением удалить все теги из строки вместе с содержимым?

    Immortal_pony
    @Immortal_pony Куратор тега JavaScript
    Так как я недолюбливаю регулярные выражения, публикую решение этой задачи без их использования :)
    function removeTagsWithContent(str) {
        let result = []
        let inOpeningTag = false
        let inClosingTag = false
        let inContent = false;
    
        str.split('').forEach((char, i) => {    
        	if (!inOpeningTag && !inContent && char === '<') {
                inOpeningTag = true
                return
            }
            
            if (inOpeningTag && char === '>') {
                inContent = true
                inOpeningTag = false
                return
            }
            
            if (inContent && char === '<') {
                inContent = false
                inClosingTag = true
                return
            }
            
            if (inClosingTag && char === '>') {
                inClosingTag = false
                return
            }
            
            if (!inOpeningTag && !inContent && !inClosingTag) {
                result.push(char)
            }
        })
        
        return result.join('')
    }
    Ответ написан
    Комментировать
  • Как распарсить такой JSON?

    Immortal_pony
    @Immortal_pony Куратор тега JavaScript
    но я никак не могу с ним работать, я пытался пропускать его через функции нормализации, но ни в какую

    А не надо бездумно совать свою строку какому-то левому коду и ожидать что он всё за тебя сделает.
    Надо проанализировать что ты получаешь и только потом начинать что-то делать.
    В данном случае видно две очевидные проблемы:
    1. В строке отсутствуют все закрывающие символы, которые должны быть в конце строки - кавычки, фигурные скобки, квадратные скобки - всё потеряли. В первую очередь надо найти того кто это написал, ткнуть его носом и громко и чётко произнести: "кто накодил? Кто накодил, а?", после чего посадить его исправлять серверную часть.
    2. Внутренний объект зачем-то закодирован в json второй раз. Тут уже можно не кричать, а дать лёгкого добродушного пинка backend-разработчику, но таким образом чтоб после этого его тело двинулось в сторону клавиатуры, используя которую, он исправит и этот косяк.

    const weirdString  = fetch() // здесь получаешь свою странную и  корявую строку
    const jsonEncoded = weirdString + '\\"}]}]"}' // для примера я вручную посчитал всё закрывающее барахло, но, возможно что для этого надо будет написать отдельную функцию. Ну, тут сам справишься, я думаю
    const decodedOnce = JSON.parse(jsonEncoded) // раскодируем первый раз
    const decodedTwice = JSON.parse(decodedOnce['21']); // раскодируем второй раз внутренний объект.
    Ответ написан
    Комментировать
  • Что я делаю не так в PHPmailer?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Авторизация не работает потому что ты вводишь неправильные данные
    1. $mail->Host = 'smtp.gamail.com';
    тут закралась лишняя буква "a" в имя хоста.

    2. Google не любит SMTP и работает в направлении полного его закрытия, рекомендует вместо этого использовать их API.
    https://developers.google.com/gmail/api/quickstart/php

    Можно включить включить Less Secure App, если такая настойка есть в твоём аккаунте.
    https://support.google.com/accounts/answer/6010255

    Также можно попробовать использовать App Passwords. Несмотря на то что в документации указано, что это только для варианта, когда включена двухфакторная авторизация, пользователи сталкивались с ситуацией, когда обычный пароль система не принимала при авторизации через SMTP, а вот App Password - принимала
    Общая информация: https://support.google.com/accounts/answer/185833
    Пример пользовательского отзыва о проблеме: https://support.google.com/mail/thread/5579215?hl=...
    Ответ написан
    Комментировать
  • Как распарсить json?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    В рамках бредопрограммирования я написал функцию, которая превращает твою строку в валидный json

    function repairUnqotedJsonValues(string $json) : string {
        $json = str_replace(": ", ":", $json);
        $json = str_replace("{ ", "{", $json);
        $json = str_replace(" }", "}", $json);
        $quotes = 0;
        $fixMode = false;
        $repaired = [];
        
        foreach (mb_str_split($json) as $char) {
            $add = [$char];
        
            if ($fixMode) {
                if ($char === ":") {
                    array_push($add, "\"");
                }
                
                if ($char === "," || $char === "}") {
                    array_unshift($add, "\"");
                }
                
                if ($char === "\"") {
                    $fixMode = false;
                }
            }
            
            $repaired = array_merge($repaired, $add);
            
            if ($char === "\"") {
                $quotes++;
            }
            
            if ($quotes === 2) {
                $fixMode = true;
                $quotes = 0;
            }
        }
        
        return implode("", $repaired);
    }


    Далее, после обработки строки с её помощью можно уже пользоваться json_decode:
    $weirdString = file_get_contents('application.json');
    $json = repairUnqotedJsonValues($weirdString);
    $user = json_decode($json);
    $name = $user->{'Имя'};
    print $name;


    Ну а правильным вариантом будет, конечно, хранение в application.json валидного json'а, а не строки в непонятном формате.
    Ответ написан
    1 комментарий
  • Как отправить данные с сайта пользователю по почте?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    В HTML заверни свой блок в тэг form, method укажи "POST", а action - адрес твоего скрипта
    Ну и поле с email'ом назови как-нибудь. Например, recipient.
    Далее, "Получить" c точки зрения HTML должно быть button'ом. Тогда нажатие на эту кнопку будет отправлять твою форму на твой обработчик.

    Далее, в коде надо научиться принимать данные из формы:
    $recipient  = filter_var($_POST['recipient'], FILTER_SANITIZE_EMAIL);
    $mail->addAddress($recipient);


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

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Либо file_get_contents убери, либо используй метод parseData вместо parse

    PS И вставляй код нормально, а не богомерзкой картинкой
    Ответ написан
    Комментировать
  • Как правильно создать маску ссылки для регулярного выражения?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Я не большой любитель регулярных выражений, но подскажу как решить задачу без них:
    function doesMatchMyFormat(string $url) : bool {
        if (filter_var($url, FILTER_VALIDATE_URL) === false) {
            return false;
        }
        
        $host = parse_url($url, PHP_URL_HOST);
        if ($host !== "www.site.ru") {
            return false;
        }
        
        $path = parse_url($url, PHP_URL_PATH);
        $parts = explode("/", $path);
        if ($parts[1] !== "news") {
            return false;
        }
        if (count($parts) !== 7) {
            return false;
        }
        
        return true;
    }
    Ответ написан
    Комментировать
  • Почему Tatum API не принимает запрос на создание файла?

    Immortal_pony
    @Immortal_pony Куратор тега JavaScript
    Первое
    У тебя поле называется "image"
    <input type="file" name="image">

    А в документации английским по белому написано что оно должно называться file

    Второе:
    В документации написано, что обязательно указывать header content-type:multipart/form-data, чего ты не делаешь.
    Даже код за тебя в документации написали уже ж:

    62169929b9bf9356824846.png

    PS A Google тут вообще каким боком?
    Ответ написан
    Комментировать
  • Как получить последнее значение поля при группировке по другому полю?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Конкретно в таком примере (если есть гарантия, что utm-значения идут по возрастающей) будет работать и так:
    SELECT 
        `uid`,
        MAX(`utm`) AS 'utm' 
    FROM 
        `table`
    GROUP BY 
        `uid`


    Чтобы получить честную сортировку по id, понадобится GROUP_CONCAT
    SELECT 
        `uid`,
        LEFT(GROUP_CONCAT(`utm` ORDER BY id DESC), LOCATE(',', GROUP_CONCAT(`utm` ORDER BY id))-1) AS 'utm'
    FROM 
        `table`
    GROUP BY 
        `uid`


    PS Если обновишься до 10.3.3, то и LIMIT заработает и можно уже будет писать так:
    SELECT 
        `uid`,
        GROUP_CONCAT(`utm` ORDER BY id DESC LIMIT 1) AS 'utm'
    FROM 
        `table`
    GROUP BY 
        `uid`
    Ответ написан
    Комментировать
  • Вывод товаров на сайте с сортировкой по удаленности от адреса покупателя?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Вариант 1:
    Считаем данные с помощью Distance Matrix, тупо скармливая ему два адреса: https://yandex.com/dev/routing/distance_matrix/

    Вариант 2:
    1. Вбиваем в систему помимо адреса склада, его широту и долготу
    2. Узнаём широту и долготу пользователя при вводе адреса (yandex autocomplete это умеет, хотя для подсказок адреса в РФ я бы выбрал Dadata, потому что он намного лучше распознаёт пользовательский ввод. Ну а широту с долготой и там и там получить можно)
    3. Считаем расстояние, зная широту и долготу двух объектов

    Первый вариант проще, но возможно будет дороже, особенно если у тебя реально много заказов.
    Ответ написан
    4 комментария
  • Как узнать какие файлы были загружены во время выполнения php скрипта (incluide/require/*_once)?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    get_included_files

    PS но можно было хотя бы попытаться погуглить, конечно...
    6216893ebb92e586853206.png
    Ответ написан
    Комментировать
  • Как ответить сразу и продолжить выполнять скрипт?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Не хочешь использовать rabbitmq, используй хотя бы крон.
    Если у тебя задачи выполняются дольше минуты, то надо принять это и реализовать функционал по-человечески:
    1. Принимаем запрос из внешней системы, складываем в очередь, отвечаем внешней системе
    2. В фоновом режиме находим все необработанные задачи и обрабатываем их, тратя на это столько времени, сколько потребуется.

    PS А если тебе важно предоставить результат работы твоего скрипта внешней системе, то надо разобраться что у тебя там целую минуту делается.
    Минута - это очень много. У меня ОС в 3 раза быстрее грузится, а там 100% больше функционала чем в твоём скрипте.
    Ответ написан
  • Как отрендерить Диаграмму при помощи mPDF?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    пытаюсь отрендерить круговую диаграмму при помощи mPDF.

    Не надо громких слов, показывай код.

    В двух словах как это сделать:
    1. Берём любую библиотеку для создания графиков на PHP или пишем соответствующий функционал сами
    2. Вставляем картинку в pdf штатными методами
    Ответ написан
    Комментировать
  • Как получить содержимое PHP файла?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    Это файл, зашифрованный Ioncube (https://github.com/zynksoftware/samples/blob/maste...)
    Обратитесь к разработчику чтобы купить его.
    Ответ написан
    1 комментарий
  • Как сделать правильный запрос на php?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    А это, простите, что вы пытаетесь сделать-то?
    $txt = '';
    foreach ($sPD as $key => $value) {
        $txt .= "<b>".$key."</b>".$value."%0A";
    }


    сейчас получается, что вы пытаетесь отправить серверу кусок какго-то невнятного текста, а он ожидает пар ключ+значение, закодированных в urlencode.
    Не знаю, каких конкретно переменных ожидает ваш хук, но подозреваю что должно быт так:

    'content' => http_build_query($sPD)

    ... а кусок с foreach'ем этим не нужен вовсе

    PS Ещё больше непонятно, зачем весь этот кусок на php, когда данные формы можно сразу отправить в CRM, прямо из JS.
    Ответ написан
    9 комментариев