• Проблемы с кодировкой. Почему php возвращает русские буквы в виде u041f?

    slo_nik
    @slo_nik Куратор тега PHP
    Берём Вашу строку и обрабатываем
    print_r(json_decode('[{"reportId":"1","title":"\u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0447\u0435\u0442"}]', true))

    На выходе получаем
    Array
    (
        [0] => Array
            (
                [reportId] => 1
                [title] => Первый отчет
            )
    
    )

    Или
    print_r(json_decode('{"reportId":"1","title":"\u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0447\u0435\u0442"}', true))

    И на выходе обычный массв
    Array
    (
        [reportId] => 1
        [title] => Первый отчет
    )

    Что Вы хотите исправлять в данном случае?
    Ответ написан
    Комментировать
  • Как вывести ошибки валидации для нескольких записей выбранных чекбоксом?

    slo_nik
    @slo_nik Куратор тега Yii
    Вам надо получить сразу все модели, которые Вы хотите изменить.
    Здесь у Вас массив id-шников.
    $usersId = Yii::$app->request->post('items', []);
    Получить сразу все можно так
    $usersId = Yii::$app->request->post('items', []);
    $users = Users::findAll($usersId);

    Теперь в $users у Вас будут все модели, которые Вы изменяете.
    Валидация будет приблизительно такой
    // для каждой отдельной модели передаёте её массив ошибок
    if ($user->hasErrors()) {
       $result = [];
       $result[Html::getInputId($model, $attribute)] = $model->getErrors();
    }

    И уже в виде разбираете многомерный массив и выводите ошибки.
    Ответ написан
  • Как очистить $_POST?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    Можно попробовать простейший вариант
    if(isset($_POST['button']) && isset($_POST['checkbox'])){
        header('Location:  index.php?a=4');
      }
    if(isset($_GET['a'])){
       echo $_GET['a'];
    }


    p.s.
    Да, кстати, Ваше условие не сработает, так как Вы не передаёте в $_POST input с именем checkbox.
    Ответ написан
  • Как правильно сделать задание для cron в ubuntu 18.04?

    slo_nik
    @slo_nik
    В консоли(терминал) Ubuntu выполняете команду
    crontab -e
    Это позволит редактировать задания для cron. После выполнения команды увидите в терминале что-то подобное
    # Edit this file to introduce tasks to be run by cron.
    # 
    # Each task to run has to be defined through a single line
    # indicating with different fields when the task will be run
    # and what command to run for the task
    # 
    # To define the time you can provide concrete values for
    # minute (m), hour (h), day of month (dom), month (mon),
    # and day of week (dow) or use '*' in these fields (for 'any').# 
    # Notice that tasks will be started based on the cron's system
    # daemon's notion of time and timezones.
    # 
    # Output of the crontab jobs (including errors) is sent through
    # email to the user the crontab file belongs to (unless redirected).
    # 
    # For example, you can run a backup of all your user accounts
    # at 5 a.m every week with:
    # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
    # 
    # For more information see the manual pages of crontab(5) and cron(8)
    # 
    # m h  dom mon dow   command
    
    ###
    ВОТ ТУТ ПИШИТЕ СВОЁ РАСПИСАНИЕ ДЛЯ CRON
    ###
    * * * * * /home/$user/bash.sh

    После того, как напишите задание для corn, при помощи CTRL+O, ENTER и CTRL+X(последовательно) запишите и закроете редактор.
    Просмотреть список заданий можно командой crontab -l

    p.s.
    Командой crontab -u UserName -e Вы укажите, от имени какого пользователя будет запускаться cron.

    p.s.s.
    Добавленные таким образом задания для cron будут храниться в /var/spool/cron/crontabs. В этой директории будет создан файл с названием по имени пользователя системы. Вот он как раз и редактируется через crontab -e.
    Так же можно создать файлы с заданиями в /etc/cron.d. В этом случае надо указывать имя пользователя, от которого будет запускаться задание.
    Так же есть директории /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly, /etc/cron.weekly. В этих директориях можно разместить файлы с заданиями, которые будут запускаться ежедневно, ежечасно, ежемесячно и еженедельно соответственно.
    Ответ написан
    32 комментария
  • Как отправить два PDF файла на почту?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    Указываете несколько attach()
    $sendemail = Yii::$app->mailer->compose()
                    ->attach(Yii::getAlias('@root_folder') . '/frontend/uploads/' . $filename . 'Act1.pdf')
                    ->attach(Yii::getAlias('@root_folder') . '/frontend/uploads/' . $filename . 'Act2.pdf')
                    ->attach(Yii::getAlias('@root_folder') . '/frontend/uploads/' . $filename . 'Act3.pdf')
                   /* остальной код */


    p.s.
    Зачем создавать лишний псевдоним '@root_folder'? Вам недостаточно стандартных псевдонимов типа @frontend или @webroot?
    Ответ написан
  • Появление и исчезновение определенного блока при нажатии на ссылку. Как реализовать?

    slo_nik
    @slo_nik
    Доброе утро.
    $(document).ready(function(){
      $('.trigger ').click(function(){
        //$('.black').toggle();
        $(this).parents('.block').find('div.black').fadeToggle()
      });
    });
    Ответ написан
    Комментировать
  • Как скрыть форму после успешной авторизации?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый вечер.
    Самый простой вариант это сделать редирект на другую страницу, на которой будет выводится сообщение. Передать $_GET параметром имя пользователя.
    Или делать перезагрузку страницы, также передавая $_GET параметром имя пользователя. На странице делать проверку, если есть $_GET параметр, то выводить сообщение, если нет - форму.
    Ответ написан
    Комментировать
  • Почему не проходит валидация загрузки картинки, yii2?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    Попробуйте сделать так:
    if ($model->load(Yii::$app->request->post()) && $model->save()) {
           $model->passport = UploadedFile::getInstance($model, 'passport');
            if($model->passport){
                $model->upload();
            }
    // остальной код действия.
    }

    И, если Вы сохраняете модель в строке
    if ($model->load(Yii::$app->request->post()) && $model->save()) {

    то зачем в этом условии Вы пытаетесь ещё раз сохранить модель?
    if ($model->save()) {
                    Yii::$app->session->setFlash('success', 'Спасибо, мы получили вашу анкету. В скором времени мы с вами свяжемся.');


    p.s.
    Этот path должен указывать на директорию web
    $path = 'img/store/' . $this->passport->baseName . '.' . $this->passport->extension;

    Думаю, что тут лучше использовать псевдонимы, что-то типа этого
    $path = Yii::getAlias('@web') . 'img/store/' . $this->passport->baseName . '.' . $this->passport->extension;
    Ответ написан
    8 комментариев
  • Как ajax получить отрицательный ответ от php при отправке формы?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый вечер.
    В success проверяйте, что пришло, сообщение об успехе или наоборот.
    $answer = [];
        if ($filesizeall < 10000000) { 
            mail($to, $subject, $message, $headers);                
                   // echo 'Ваше сообщение отправлено, спасибо!';    
                   $answer = ['type' => 'success', 'message' => 'Ваше сообщение отправлено, спасибо!']
                   return json_encode($answer);
                }
                  else {
                   // echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.';   
                  $answer = ['type' => 'error', 'message' => 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.'
                  return json_encode($answer);
                }

    success: function (data) {    
                var response = jQuery.parseJSON(data)
               if(response.type == 'success'){
                   alert(response.message);
               }
               if(response.type == 'error'){
                   alert(response.message)
               }
            },

    Вот как-то так. Только на ошибки не проверял
    Ответ написан
  • Как загрузить изображение на сервер через AJAX?

    slo_nik
    @slo_nik
    Добрый день.
    $(function() {
            $('#form-data').on('submit', function(e){
                e.preventDefault()
                var form = $(this); // Предположу, что этот код выполняется в обработчике события 'submit' формы
                var data = new FormData();  // Для отправки файлов понадобится объект FormData. Подробнее про него можно прочитать в документации - https://developer.mozilla.org/en-US/docs/Web/API/FormData
    
    
    
                // Сбор данных из обычных полей
                form.find(':input[name]').not('[type="file"]').each(function() { 
                    var field = $(this);
                    data.append(field.attr('name'), field.val());
                });
    
    
    
                // Сбор данных о файле (будет немного отличаться для нескольких файлов)
                var filesField = form.find('input[type="file"]');
                var fileName = filesField.attr('name');
                var file = filesField.prop('files')[0];
                data.append(fileName, file) ;
    
    
    
                // Отправка данных
                var url = 'upload.php';
    
                $.ajax({
                    url: url,
                    type: 'POST',
                    data: data,
                    contentType: false,
                    cache: false, 
                    processData:false, 
                    success: function(response) {
                        console.log(response)
                    }           
                });  
            })          
        });

    <form id="form-data" action='#'>
        <input type="file" name="test" multiple>
        <input type="submit" name='submit' value="Send">
    </form>
    Ответ написан
    2 комментария
  • Как переподключать страницу ошибок в зависимости от статуса ошибок?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    В конфигурации укажите путь к своему представлению для вывода ошибок. В самом представлении проверяйте какой статус ошибки и в зависимости от этого выводите содержимое.
    // в конфигурационном файле
            'errorHandler' => [
                'errorAction' => 'path/to/error/view',
            ],

    // в Вашем файле вывода ошибок
    if($exception->statusCode == 404){
      $this->title => 'Текст заголовка';
      // остальные переменные
    }
    if($exception->statusCode == 500){
      $this->title => 'Текст заголовка';
      // остальные переменные
    }
    // остальной код файла
    Ответ написан
    Комментировать
  • Как изменить заголовок ошибки в yii?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    В файле error.php можно использовать переменную $exception и с её помощью изменить заголовок страницы ошибки.
    Выглядит это так:
    if($exception->statusCode == 404){$this->title = 'Где-то ошибка';}
    /* остальной код файла */

    В результате получите следующее
    5cc2eb713498e509599458.png
    Вместо
    5cc2eb824d16c264476002.png
    Ответ написан
    Комментировать
  • Как с помощью curl отправить POSTзапрос?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    Возможно так будет работать?
    // Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, 'https://integration.cdek.ru/new_orders.php');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "xml_request=<?xml version=\"1.0\" encoding=\"UTF-8\" ?><DeliveryRequest Number=\"0000033876WO\" Date=\"2019-04-25T09:09:57\" Account=\"2JewP7QZL***********z8NCbIIbKAw2\" Secure=\"db25*********360f3c64b70\" OrderCount=\"1\"><Order Number=\"123485\" SendCityPostCode=\"350000\" RecCityPostCode=\"350000\" RecipientName=\"Герусов Александр Валерьевич\" RecipientEmail=\"gerusov14@mail.ru\" Phone=\"89615096005\" TariffTypeCode=\"136\" DeliveryRecipientCost=\"137\" DeliveryRecipientVATRate=\"VATX\" DeliveryRecipientVATSum=\"0\" SellerName=\"ИП Волженин Е.Г.\" SellerAddress=\"Ленинградская обл, Всеволожский р-н, Пос. Лесное, дом № 18, кв.6\"><Address PvzCode=\"KSD5\"/><Package Number=\"1\" BarCode=\"krd61927-1\" Weight=\"1000\"><Item WareKey=\"158308\" Cost=\"790\" Payment=\"790\" PaymentVATRate=\"VATX\" PaymentVATSum=\"0\" Weight=\"1000\" Amount=\"1\" Comment=\"Кронштейн для телевизора Ultramounts UM 814F черный\"/></Package></Order></DeliveryRequest>");
    curl_setopt($ch, CURLOPT_POST, 1);
    
    $headers = array();
    $headers[] = 'Content-Type: application/x-www-form-urlencoded';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close ($ch);

    Полезный сервис.
    Ответ написан
    3 комментария
  • Как создать массив со случайными значениями на php без циклов?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    Можно вот так:
    $e = range(0,100);
    shuffle($e);
    var_dump($e);
    Ответ написан
    Комментировать
  • Yii2-comments как изменить order by?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый вечер.
    Попробуйте так
    <?php echo \yii2mod\comments\widgets\Comment::widget([
          'model' => $model,
          'dataProviderConfig' => [
              'pagination' => [
                  'pageSize' => 10
              ],
              'sort' => [
                  'defaultOrder' => ['id' => 'SORT_DESC']
              ]
          ]
    ]); ?>

    Отсортирует по id в обратном порядке, от новых к старым.
    Ответ написан
  • Почему не работает код PHP, работающий со словарём (код в описании)?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый вечер.
    А Вас не смущает такая картина при запуске кода?
    5cbf57d1d92db335585221.png
    Это первое.
    Второе, при работе с многобайтными кодировками используйте соответствующие функции.
    Например, Вы используете strlen(), а надо использовать mb_strlen()
    Ответ написан
  • Почему перестали отправляться письма после переезда хостинга?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    В коде, который Вы привели в вопросе, на 22 строке нет переменной $message.
    Зато она встречается первый раз на строке 15 и сразу идёт конкатенация строки, но переменная не определена.
    В первых строках своего кода попробуйте её инициализировать таким образом.
    $message = '';
    Ответ написан
  • Обновится ли запись в бд в yii?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый вечер.
    Проверяйте oldAttributes(). Если они совпадают с новыми атрибутами, то прерывайте работу скрипта. Если не совпадают - обновляйте.
    В действии update можно сделать такую проверку
    if(empty($model->getDirtyAttributes())){
                    // если данные не обновляются, то делайте что Вы желаете)))
                }
    Ответ написан
  • Как обрезать длину атрибута для слага?

    slo_nik
    @slo_nik Куратор тега Yii
    В модели задайте свойство "value"
    public function behaviors()
    {
        return [
            [
                'class' => SluggableBehavior::class,
                //'attribute' => 'title',
                'value' => function($event){
                   return mb_substr($this->title, 0, 5);
                }
            ]
        ];
    }

    Возвращает из "Test slugbehaviors" slug длиной в пять символов.
    Ответ написан
  • Как вывести имя пользователя вместо id?

    slo_nik
    @slo_nik Куратор тега Yii
    Можно построить цепочку, через которую получить имя пользователя.
    Вот как-то так:
    // $model это Documents
    $model->docsign->user->name;

    В Вашем случае можно попробовать так:
    <?php foreach($model->docsign as $key => $value): ?>
        <?= $value->user->name ?>
    <?php endforeach; ?>

    Или создайте ещё одну связь, или метод для получения имени пользователя.
    Ответ написан
    Комментировать