Ответы пользователя по тегу PHP
  • Как сохранить js blob как файл на сервере?

    Delgus
    @Delgus Автор вопроса
    надо mimeType указывать. тогда все норм
    img.cropper("getCroppedCanvas").toBlob((blob) => {
                blob.name = file.name;
                uploadImg = blob;
     }, mimeType);
    Ответ написан
    Комментировать
  • Оптимизация кода php?

    Delgus
    @Delgus
    Оптимизация кода php? ДА!
    Это можно как то сократить или сделать более читабельно? МОЖНО!

    Вложенные ифы - зло, непонятные названия переменных - зло! Вы забудете, что там происходит уже через неделю, а через полгода и подавно.
    Есть такая модная движуха - сначала подумать, нарисовать схемку-алгоритм, а потом кодить. Это свежо и молодежно) Код это не все, он просто реализует нужную логику. В данном случае по коду даже не понять что вы хотели реализовать
    Ответ написан
  • Что за мистика с условием при дробных числах?

    Delgus
    @Delgus
    float и double так работают. читать официальную доку например - https://www.php.net/manual/ru/language.types.float.php
    там написано следующее

    Так что никогда не доверяйте точности чисел с плавающей запятой до последней цифры и не проверяйте напрямую их равенство. Если вам действительно необходима высокая точность, используйте математические функции произвольной точности и gmp-функции.
    Ответ написан
    Комментировать
  • Как убрать php-врезки из html?

    Delgus
    @Delgus
    В простом случае, когда используется mvc во views создается что то типа этого

    <?php if (isset($login)): ?>
        <div class='col-xs-6' id='login_text'>
            <p class='login_text'>Здравствуйте, <?= $login ?>!</p>
        </div>
    <?php else: ?>
        <div class='col-xs-6' id='login_text'>
            <form action='' method='post' class='login' id='login'>
                <label>Логин</label>
                <input type='text' name='login'
                       value='<?= $_COOKIE[' gyppi_login'] ?? $_COOKIE['gyppi_login'] ?>' required>
                <label>Пароль</label>
                <input type='password' name='password'
                       value='<?= $_COOKIE[' gyppi_password'] ?? $_COOKIE['gyppi_password']?>'
                       required>
                <input name='button' type='submit' value='Войти'>
            </form>
            <button onclick='window.location="registration.php"' class='registration' id='regbutton'>Регистрация</button>
            <?php if (isset($error_message)): ?>'
                <div>
                    <p class="error_message"><?=$error_message?></p>
                </div>
            <?php endif; ?>
        </div>
    <?php endif; ?>



    onclick='window.location="registration.php"'

    Такие вещи надо тоже в js код выносить.

    Также можно использованить щаблонизаторы - Twig, Smarty
    Ответ написан
    Комментировать
  • Как увидеть сформированный xml php?

    Delgus
    @Delgus
    Вы документацию открывать пробовали?

    https://www.php.net/manual/ru/soapclient.getlastre...
    Последний SOAP-запрос в виде строки с XML.

    https://www.php.net/manual/ru/soapclient.dorequest.php
    __doRequest можно переопределить и внтури отлавливать уже готовый xml
    Ответ написан
  • Почему Singleton не сохраняет записанные в свойство объекта параметры?

    Delgus
    @Delgus
    PHP рождается, поднимает все окружение, но после запроса умирает. Когда вы делаете новый запрос вы получаете новый объект...

    Синглтон в PHP только в рамках одного запроса (если речь не о асинхронном PHP конечно)
    Ответ написан
    Комментировать
  • Как создать переменную или массив в котором будут элементы которые можно занести в бд?

    Delgus
    @Delgus
    Нужен сервер и соответственно на нем
    1. веб-сервер(Apache или NGINX, лучше nginx) - установить, настроить
    2. php или php-fpm - установить, настроить
    3. mysql - установить, настроить

    Когда все готово и сервер готов слушать клиента, отправляем по протоколу HTTP запрос, в современном мире это делается используя чудную технологию ajax. Ну вы про фронтенд, про HTML и JS ничего не спросили, так что по-любому вы знаете что такое ajax, так ведь?

    Так вот при клике на кнопку добавить в корзину отправляется запрос на сервер, на сервере скрипт написанный на php обрабатывает параметры запроса, открывает соединение с mysql, сохраняет полученные данные, отдает клиенту ответ, что то типа {ok:true}(это формат json, знаете что это такое?)

    Создать переменную или массив на php, знаете как? про глобальные переменные в php слышали? Может Котерова PHP 7 в подлиннике читали, ну или хотя бы посмотрели часовой видос хауди хо "php за час"? Гуглом пользоваться умеете?

    В результате получится что то вроде этого https://github.com/rintoug/Simple-PHP-Shopping-Cart

    Достаточный толчок???
    Ответ написан
    Комментировать
  • Как сложить два массива, на примере?

    Delgus
    @Delgus
    Ну например так
    <?php
    $data1 = [
                'id' => 1, 
                'quantity' => 10, 
            ];
    $data2 = [
                'id' => 1, 
                'quantity' => 20, 
            ];
    
    function my_sum($all_data){
        return array_reduce($all_data,function($a, $b) 
        {
            $b['quantity'] = $a ? $b['quantity'] + $a['quantity']:$b['quantity'];
            return $b;
        });
    }
    
    $summ = my_sum([$data1,$data2]);
    
    var_dump($summ);


    В песочнице
    sandbox.onlinephpfunctions.com/code/e148c8793466fe...
    Ответ написан
    2 комментария
  • Как передать id Методом POST?

    Delgus
    @Delgus
    Лучший способ:
    GET sita-poka-chto.netu/advert_id/999999999
    и использовать фреймворк

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

    /advert_id/999999999 вы найдете в $_SERVER['REQUEST_URI']

    Как строку разбить догадаетесь?
    При формировании каких-то сложных правил роутинга вам 100% понадобятся регулярные выражения.
    Ответ написан
    Комментировать
  • Как после каждого n-го абзаца вставить блок div на PHP?

    Delgus
    @Delgus
    Ну вот такой например вариант
    $str ="<p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <h2></h2>
    <p></p>
    <p></p>";
    
    $i = 0;
    $str = preg_replace_callback("/<\/p>/u", function($match) use(&$i){
        $i ++;
        if($i % 2 == 0){
            return "</p><div></div>";
        }
        return "</p>";
    }, $str);
    
    echo $str;
    Ответ написан
    2 комментария
  • Как запустить функцию, имя метода которой передается в строке?

    Delgus
    @Delgus
    Test - класс, так и вызывайте как метод класса
    $test = new Test();
    $func = 'testFunc';
    $test->{$func}();
    Ответ написан
    Комментировать
  • Как из массива сделать список?

    Delgus
    @Delgus
    $tags = [];
    foreach(  get_the_tags() as $tag){
        $tags[] = $tag->name;
    }
    $tags = implode(',',$tags)
    Ответ написан
    Комментировать
  • Как "заменить" некоторые значения массива, используя как ключи их же значения?

    Delgus
    @Delgus
    Так?
    foreach ( $products as &$product ) {
        if ( isset($array[$product['name']])){
            $product['name'] = $array[$product['name']];
         }
    }
    Ответ написан
    Комментировать
  • Как заменить значение в массиве?

    Delgus
    @Delgus
    А потом мы имеем сто тысяч if-ов в коде, замечательно все подсказали.
    //слова
    $array = ['green', 'purple', 'white', 'black', 'grey'];
    //массив с переводами чтобы сто раз if не писать как дундук
    $translate = [
        'green' => 'зеленый',
        'white' => 'белый'
        ];
        
    //1 вариант (для php > 7.0 короткий синтаксис)
    foreach ($array as $k => $v) {
       $array[$k] = $translate[$v] ?? $v;
    }
    //2 вариант (для php > 5.4 короткий синтаксис)
    foreach ($array as $k => $v) {
       $array[$k] = isset($translate[$v]) ?$translate[$v] : $v;
    }
    //3 вариант(длинная запись через if php > 5.4)
    foreach ($array as $k => $v) {
       if(isset($translate[$v])){
          $array[$k] = $translate[$v];
       }
    }
    Ответ написан
    1 комментарий
  • Почему возникает ошибка в строке?

    Delgus
    @Delgus
    Потому что php думает что ты тут обращаешься к $s1_i как к массиву
    $s1_i[^,]
    что наглядно видно в любой хорошей IDE - PHPStorm например
    5c7ac4443d8f1772571055.png
    Ответ написан
    Комментировать
  • Как принять POST запросы и создать готовый json (клавиатура ботов вк)?

    Delgus
    @Delgus
    Ну так и сделайте многомерный массив
    $action = array();
         $allButtons = [];//все кнопки
          foreach($_POST['keyboard'] as $keyboard) {
          $actionRow = [];//один ряд
            foreach($keyboard as $button) {
    
              $action = [
                'action' => array(
                "type" => "text",
                "payload" => "{\"button\":\"1\"}",
                'label' => $button['text'],
                ),
                'color' => $button['color'],
              ];
    
            $actionRow[] = $action;//добавляем кнопку в ряд
    
          }
          $allButtons[] = $actionRow;//добавляем ряд в массив со всеми кнопками
      
      }
       $keyboard = [
            "one_time" => false,
            'buttons' =>$allButtons,
            ];
    
      $json_keyboard = json_encode($keyboard, JSON_UNESCAPED_UNICODE);


    Так наверное?
    Ответ написан
  • Роутинг на PHP?

    Delgus
    @Delgus
    Зависит от задачи, насколько сложный роутинг требуется

    Вот есть видео об устройстве роутинга в современных фреймворках. Посмотрите не поленитесь, лучше чем велосипеды городить.

    https://elisdn.ru/blog/113/psr7-framework-http
    https://elisdn.ru/blog/114/psr7-framework-router

    Уже был похожий вопрос на тостере.
    Как сделать простой php маршрутизатор (роутер)?

    Если надо быстро и по тупому - то просто берем строку из $_SERVER['REQUEST_URI'], парсим ее и получаем из нее имя контроллера и экшена, сложно что ли?
    <?php
    class admin{
        function edit(){
            echo "Hello World";
        }
    }
    //парсим REQUEST_URI
    $explode = explode('/',$_SERVER['REQUEST_URI']);
    //выбираем имя контроллера и метода
    $controllerClass = $explode[1];
    $action = $explode[2];
    //вызываем
    call_user_func_array([$controllerClass,$action],[]);


    Ну и под конец https://google.gik-team.com/?q=%D0%A0%D0%BE%D1%83%...
    Ответ написан
    1 комментарий
  • Обязательно ли знать php при изучении Yii?

    Delgus
    @Delgus
    Yii2 предполагает знание php, ООП и шаблона проектирования MVC. Для работы с базой данных хорошо бы понимать что такое ORM и как работать с ActiveRecord.
    Большой плюс - знание инфраструктуры современного PHP. Это
    1. Знание пакетного менеджера Composer, понимание разницы между файлами composer.json и composer.lock, между require и require-dev.
    2. Знание системы контроля версий GIT, умение использовать git.

    Начать изучать Yii2 можно и не обладая таким списком, но когда знаешь перечисленные основы - изучение ускоряется в разы. Он задумывался именно как startup фреймворк с низким порогом входа, на нем очень быстро можно склепать какие-то однотипные CRUD приложения. Много русской документации и примеров, доброе сообщество.
    поддержка REST из коробки, создание REST API за очень быстрое время.

    P. S.

    Yii Framework умирает, почитайте что пишут разработчики его ядра

    Ну есть такое, никто не спорит,.. С другой стороны Yii2 поддерживается и он уже готовый продукт сам по себе, я лично работаю с Yii2, разработал несколько сервисов на нем и при том приходиться поддерживать проекты 2014-2016 года которые писались на yii первом еще и до сих пор нормально функционируют.
    Ответ написан
  • Как сделать API на PHP?

    Delgus
    @Delgus
    Наверное имеется ввиду REST API. И скорее всего разработчику приложения желательно чтобы API возвращал ответ в формате JSON.
    Есть реализация из коробки в YII2, но не использовал ее. Я для таких целей юзал slim3 framework.
    Почти для каждого фреймворка есть реализация REST API. Берешь удобную - юзаешь.
    Надо много гуглить, читать и реализовывать)
    Ответ написан
    Комментировать