• Что неправильного в моем коде?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Вы получили простое задание, но это не значит, что код нужно написать абы как, лишь бы результат был =). Элементарные вещи стоило бы использовать,как то: автозагрузка классов, шаблонизация.

    0. Код на облачном диске. Почему не гитхаб? Это же удобнее (и плюс в карму=).
    1. Инклуд файлов, вместо автозагрузки классов. Написать автозагрузчик - дело пяти минут. Даже одна минута, если использовать composer.
    2. Разделение мух и котлет. Код отдельно, html-разметка отдельно. Простейший php-шаблонизатор - это тоже пять-десять минут.
    Вот так вообще нельзя писать: echo '<tr><th scope="col">Первый круг</th></tr>';
    3. Разделение обязанностей. У вас один класс и файлы загружает, и читает загруженные, и турнирную таблицу рассчитывает и рендерит ее.
    4. range(0, 19); Почему 20 элементов? Почему не 30? Откуда это число взялось? Его не должно быть в коде.
    5.
    $probablePairsArr[] = range(0, 19);
    $probablePairsArr = $probablePairsArr[0];

    Интересный финт. В чём его сакральный смысл - не ясно. Да и использование локальной переменной здесь не требуется. Можно сразу создавать массив в свойстве класса.

    Наверное всё. Больше там ничего нет.
    Ответ написан
    7 комментариев
  • Что неправильного в моем коде?

    Как минимум, Вы не вникли в задачу. Я вот в футболе практически не разбираюсь - получив такое задание, я пошёл бы в гугл узнавать, как проводятся матчи в турнирах, когда команда играет на своём поле, а когда - нет. Даже по своим скудным знаниям могу кое-что предположить:
    1) Первый круг: команды надо разбить на пары случайным образом. Это shuffle() + array_chunk() . У Вас этого нет.
    1.1) Учесть ситуацию, когда команд - нечётное количество. Этого тоже нет.
    2) в парах какую-то команду назначить хозяином. Соответственно, в выводе в колонке "Хозяева" должно быть не повторение "Хозяева", "Хозяева", "Хозяева", а имена команд
    3) дальше надо смотреть, на каких условиях проводится второй круг, кто в него попадает, на своём поле играют или на чужом..

    Получается, из этого:
    загружать через форму файл json со списком команд, а потом сводить эти команды в турнируную таблицу с условиями (гость, хозяин), круг 1, круг 2 и еще 5-6 условий, которые влияют на список
    Вы выполнили только "загружать через форму файл json", причём зачем-то этот файл сохраняете на диск, а потом немедленно читаете обратно.

    Сергей Вам справедливо указал на "разделение обязанностей", то бишь первую букву в SOLID - Single Responsibility Principle. Даже если оставить на месте выверт с сохранением на диск, получается:
    1. Repository - хранилище данных
    2. метод контроллера, отвечающий за приём данных именно в виде сабмита формы и сохранение их Repository
    3. Генератор текущего круга
    4. View, который отвечает за генерацию html-разметки круга,
    5. метод контроллера, который может извлечь данные из Repository, скормить их генератору, получить результат и скормить его во View.


    И не факт, что методы из 2 и 5 пункта принадлежат одному классу.
    Ответ написан
    Комментировать
  • Как эффективно перейти на c++ при опыте работе с php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Посоветуйте, как можно было бы максимально безболезненно восполнить утраченные знания, а также наверстать упущенные новшества в языке?

    так это...
    Сейчас хочу попробовать реализовать научный проект.
    Собсно практика - лучший учитель, садитесь и пишите. Если базу уже знаете реализация не станет проблемой. По ходу решения текущих задач проекта познакомитесь со всеми нужными изменениями и практиками, сегодня на любой чих есть дока, туториал, видео и чатжпт. Двух зайцев двумя плюсами, так сказать...
    Ответ написан
    Комментировать
  • Как запустить скачанный PhpStorm в Ubuntu командой phpstorm?

    @Giperoglif
    alias phpstorm='{path to phpstorm}/bin/phpstorm.sh'


    чтобы он был постоянным - добавить в .bashrc домашней директории юзера
    Ответ написан
    Комментировать
  • Не запускается Ubuntu 10.10 на intel 14 поколении?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Ставите современную ОС на ваш ПК, далее ставите VirtualBox, а в нём спокойно ставите то, что вам нужно.
    Ответ написан
    Комментировать
  • Не запускается Ubuntu 10.10 на intel 14 поколении?

    @Everything_is_bad
    чуваку уже давно всё объясняли Как установить самый новый совместимый firefox для ubuntu 8.10? можно удалять вопрос
    Ответ написан
    Комментировать
  • Отказоустойчивость web-сервиса - DNS Failover, SQL, PHP. Правильно ли мыслю?

    Sanes
    @Sanes
    2. Два VPS сервера в разных локациях (например Москва и Казань)

    Один, нормально работающий сервер. Не забивайте голову.
    Ответ написан
    7 комментариев
  • Как вставить строку с использованием значения из предыдущей строки?

    @Fedoresko1
    Согласен с коллегами которые недоумевают насчет хранения разницы. Хранить её крайне вредно - это дупликация данных, которая вызывает дополнительные сложности с поддержанием консистентности. Разница легко вычисляется при чтении, именно так и нужно поступить.
    Ответ написан
    7 комментариев
  • Как организовать хранение покупок при продаже услуг с разными характеристиками?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    Самый простой способ просто вынести общие параметры, такие как [конец действия] в отдельную таблицу [услуг]. А далее все таблицы, что нужно соединить с ней в формате one-to-many

    customizations
     - id:uuid unique
     - image_name:varchar
     - image_extention:varchar
     - site_url:varchar
     - service_fk:uuid unique
    
    coupons
     - id:uuid unique
     - discount:float
     - ticket_count:integer
     - restaurant_fk
     - service_fk:uuid unique
    
    accesses
     - id:uuid unique
     - file_url:varchar
     - service_fk:uuid unique
    
    services:
     - id:uuid unique
     - date_start:timestamp
     - date_end:timestamp


    При выборке делаете просто JOIN и получаете нужные таблицы в связке
    Ответ написан
    3 комментария
  • Возможны ли инклюды в /etc/hosts?

    martin74ua
    @martin74ua Куратор тега Linux
    Linux administrator
    Много лет назад уже изобрели DNS, именно для такой задачи. Кто вам мешает использовать это решение сейчас?
    Ответ написан
    5 комментариев
  • Как сделать редирект в nginx?

    IvanU7n
    @IvanU7n
    nothing interesting here
    try_files
    а именно что-то типа
    try_files $uri /index.php;

    ПЛЮС: и это не совсем редирект, по которым обычно подразумевается посылка ответа с кодами 3XX
    Ответ написан
    Комментировать
  • Как с помощью функции strpos отфильтровать js-код?

    @Everything_is_bad
    Тебе уже отвечали, не нужно изобретать свой велосипед. нужно подключить санитайзер. Как на сервере проверить строку на отсутствие в ней js-кода?
    Ответ написан
  • Почему появляется ошибка при получении SSL-сертификата certbot?

    @Everything_is_bad
    Detail: DNS problem: NXDOMAIN looking up A for oo.dev - check that a DNS record exists for this domain; DNS problem: NXDOMAIN looking up AAAA for oo.dev - check that a DNS record exists for this domain
    А начни с того чтобы прочитать текст ошибки, там тебе явно описали проблему
    Ответ написан
    7 комментариев
  • PHP: Почему 'mb_convert_encoding' не конвертирует простую строку?

    @alexalexes
    $str = 'Привет 2019 Мир!'; // написано в той кодировке, в которой сохранен файл (хрустальный шар говорит, что utf-8)
    $str = mb_convert_encoding( $str, 'windows-1251', mb_detect_encoding( $str ) ); // конвертируем в cp1251
    header('Content-Type: text/html; charset=windows-1251'); // Откуда трабла с кодировкой? - не соответствие сообщаемой кодировки в http-заголовке от сервера, с выводимым контентом от сервера. Исправляется явным указанием заголовка
    var_dump( $str ); // выводим в той кодировке, что выводит заголовок charset сервера в браузер (хрустальный шар говорит, что до указания header() было charset=utf-8)
    Ответ написан
    2 комментария
  • PHP: Почему 'mb_convert_encoding' не конвертирует простую строку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    - var_dump( $str );
    + echo bin2hex($str);
    Получаем cf f0 e8 e2 e5 f2 20 32 30 31 39 20 cc e8 f0 21
    Открываем таблицу cp1251 и смотрим
    cf - П, f0 - р, e8 - и, e2 - в, e5 - е, f2 - т, 20 - пробел, 32 - 2, 30 - 0, 31 - 1, 39 - 9, 20 - пробел, cc - М, e8 - и, f0 - р, 21 - !
    Привет 2019 Мир!
    Всё вполне сконвертировалось.
    Ответ написан
    Комментировать
  • Почему форма обратной связи php отправляет часть кода?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) Тело хтмл письма, как и любой подвид иксмл, должно начинаться с оперделяющих тегов, у вас же тупо табличка отправляется.
    2) Заниматься мастурбациейфигней с отправкой через mail() в 21 веке как минимум стыдно, как максимум чревато проблемами при отладке и смене функциональности, не говоря уже о том что отправка хтмл контента и приложений становится задачей со звездочкой.
    3) Все легко решается переходом на нормальную библиотеку отправки почты, пхпмэйлер/свифтмэйлер и их многочисленные аналоги.
    Ответ написан
    3 комментария
  • Как ОТВЕТИТЬ на письмо через PHPMailer?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Для этого в письмо-ответ надо добавить заголовок In-Reply-To с указанием значения заголовка Message-Id оригинального письма. В заголовок References ответа надо скопировать все ID из заголовка References оригинала и дописать после пробела значение заголовка Message-Id оригинального письма.

    В вашем коде я не вижу как вы получаете $message_id, который должен быть вытащен из оригинального письма, соответственно скорее всего отсутствие указание на изначальное письмо не позволяет определить к какой цепочке относится ответ.
    Ответ написан
  • Стоит ли хранить изображения base64 в БД?

    Sanasol
    @Sanasol
    нельзя просто так взять и загуглить ошибку
    Стоит ли хранить изображения base64 в БД?

    нет

    composer require symfony/dom-crawler

    use Symfony\Component\DomCrawler\Crawler;
    use Illuminate\Support\Facades\Storage;
    use Illuminate\Http\File;
    
    $desc = $request->input('some_html'); // POST with html
    $dom_desc = new Crawler($desc);
    $images = $dom_desc->filterXPath('//img')->extract(array('src')); // extract images
     
    foreach ($images as $key => $value) {
        if (strpos($value, 'base64') !== false) { // leave alone not base64 images
            $data = explode(',', $value); // split image mime and body
            $tmp_file = tempnam('/tmp', 'items'); // create tmp file path
            file_put_contents($tmp_file, base64_decode($data[1])); // fill temp file with image
            $path = Storage::putFile('public/items', new File($tmp_file)); // put file to final destination
            $desc = str_replace($value, $path, $desc); // replace src of converted file to fs path
            unlink($tmp_file); // delete temp file
        }
    }
    Ответ написан
    1 комментарий
  • В чем нарушение синтаксиса в данном запросе? Как его исправить?

    @Akina
    Сетевой и системный админ, SQL-программист.
    дана вот такая задача
    "Добавить отзыв с рейтингом 5 на жилье, находящиеся по адресу "11218, Friel Place, New York", от имени "George Clooney""

    Это должно быть вот так:
    INSERT INTO Reviews (user_id, reservation_id, rating)
    SELECT Users.id, Rooms.id, 5
    FROM Users
    CROSS JOIN Rooms
    WHERE users.name = 'George Clooney'
      AND Rooms.address = '11218, Friel Place, New York';

    А за каким рожном тут таблица Reservations, я вообще не понял. Задание про необходимость резервирования этого жилья за этим юзером не говорит ничего - то есть такого резервирования может и не быть.
    Ответ написан
    2 комментария
  • MySQL Command Line закрывается после ввода пароля?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Запустите ярлык на CLI из окна CMD и смотрите сообщения. Больше всего похоже на сбой аутентификации.
    Ответ написан
    2 комментария