Задать вопрос
Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
  • Как перенести крупное PHP приложение на Python?

    kotomyava
    @kotomyava
    Системный администратор
    Если у вас возникает такой вопрос, вероятно, необходимо забросить эту идею, и приводить в порядок проект, не переписывая его на python...

    Что выбрать вы не знаете => даже если что-то выберите по советам, наступите на массу граблей при освоении выбранного... Будет может и более "модно", но весьма вероятно вероятно не лучше чем есть, а возможно и хуже.

    Структура базы не меняется => кардинально не поменяются и запросы, а значит, и время их обработки не изменится. А это, обычно, куда более узкое место.
    Ответ написан
    5 комментариев
  • Как бороться с дублированием идентификаторов в многопользовательском приложении без использования на уровне таблицы?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Зачем запрашивать максимальный id? Сделайте поле AUTOINCREMENT, и оно будет без конфликтов инкрементиться само.
    Ответ написан
    Комментировать
  • Как сделать простенькую MVC модель в php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Итак, займемся переводом для начала

    на главной создаю объект:

    В точке входа/во фронт контроллере. Объект этот завется маршрутизатор или раутер. Имеет отношение к MVC - нет.

    вот что в файле hello.class.php:

    Такое именование файлов и классов было модным во времена php4. Отройте для себя PSR0 (и еще отдельно про PSR-4 можете почитать).

    Т.е. при обращении по url: site.localhost/hello я вижу hello!!!! на экране.

    Поздравляю вас с первым контроллером... хоть и убогим слегка. Читаем про контроллеры в контексте GRASP

    ну в htaccess я прописал нужную конструкцию

    Верни мне мой 2007-ой, когда все было круто и все хвастались своими ЧПУ на модреврайтах. Подумайте в сторону единой точки входа и перенаправления всех запросов, для которых не нашлось файлов на эту точку входа. Но это так... просто... совет. Это упростит жизнь при миграции скажем на nginx или черокки какой.

    Вот я и поплыл в этих терминах.

    Заходим на википедию и выплываем.

    Model-view-controller - схема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента таким образом, чтобы модификация одного из компонентов оказывала минимальное воздействие на остальные.


    Советую почитать полную статью и пройтись по ссылкам. Особенно по части модели данных. Это должно прояснить для вас такой момент что модель это модель данных. То есть у вас есть данные, например блог-пост, есть его модель (просто класс Post который имеет поля id, title, body и т.д.). Проще говоря модель это представления данных в приложении. А view - это слой который занимается тем что переводит данные из формата модели в формат запрашиваемый пользователем. Причем вам не запрещается работать из контроллера с базой. Ну то есть как, есть такие вещи как сервисный слой и тонкие контроллеры, но мы же пока только учимся да?). В любом случае модель не должна знать ничего о том где и как она хранится.

    Теперь по поводу view. Давайте вспомним что такое запрос в контексте WEB-приложений. Это старый добрый HTTP запрос. У запроса есть заголовок - Accept который говорит что хочет получить пользователь (пользователи могут быть не живыми и хотеть что-то другое, например JSON). Через него браузер говорит что хочет получить. Например он говорит "хочу text/html" и мы должны выполнить следующие стэпы:
    - вызвать контроллер
    - контроллер достает из закрамов модельки которые хочет пользователь и отдает их во view.
    - view переводит данные из формата приложения в формат который хочет увидеть пользователь.

    В очень грубой форме view может быть таким:
    PostView {
        
        private $post;    
    
        public function __construct(Post $post) {
            $this->post = $post;
        }
    
        public function renderTitle() {
             return sprintf("<h1>%s</h1>", $this->post->getTitle());
        }
        // и еще пара методов    
        public function render() {
             $this->renderTitle();
             $this->renderBody();
        }
    }


    И по одному таком классу на каждую модель и в каждом классе придется реализовывать сложную логику по формированию вьюшек для наших моделей. Согласитесь, это не удобно. Потому придумали фигачить все в шаблонах и разруливать это движками для шаблонизации (да, одна единственная функция render которая просто инклудит php файл это тоже движек шаблонов).

    Практическое задание:
    Если все что делает контроллер это отдает отрендренный шаблон без какой либо переменной в нем.... Это MVC? Где тут модель?
    Ответ написан
    3 комментария
  • RBAC в Yii, есть у кого визуальный редактор прав?

    Если я не ошибаюсь, то вот есть расширение -> www.yiiframework.com/extension/rights
    Оно под версию 1.1.
    Ответ написан
    1 комментарий
  • Практичное использование orm. Где? Модель? Контроллер?

    AmdY
    @AmdY
    PHP и прочие вебштучки
    В по настоящему сложных проектах лучше не использовать построитель запросов в контроллере, все нужно делать в моделях. При этом даже модель принято разделять на чистую модель и репозиторий который таскает данные.
    То таких проектов мало, обычно достаточно вашего второго способа, только нужно отвязываться от имени класса заменив его на static. Есть ещё scope, туда всякие условия засовывать.
    Ну и для многих проектов хватит лапши с квери билдером прямо в контроллере, такие веши потом можно зарефакторить по мере необходимости, благо современные IDE это делают на раз-два.

    ИМХО, заморачиваться не стоит, делайте как удобнее сейчас, а затем через рефакторинг придёте к нужной для проекта форме.
    Ответ написан
    4 комментария
  • SELECT * vs SELECT COUNT(*) vs ... - что быстрее?

    zeromodule
    @zeromodule
    PHP
    А для чего проверить-то?
    Если вы не хотите вставлять дубликаты записей, то повесьте уник и вставляйте с помощью INSERT IGNORE - это будет явно быстрее всяких там дополнительных селектов :)
    Ответ написан
    Комментировать
  • Какая архитектура mysql необходима для создания простой социальной сети?

    viktorvsk
    @viktorvsk
    Взять и создать. Главное, правильно. И побезопаснее. Ну, с лайками можно не очень безопасно. А вот с друзьям - очень безопасно! И, главное, со всеми правильно это сделать!
    Ответ написан
    Комментировать
  • Где научиться работать с composer?

    @andreyqin
    То есть вы предлагаете поискать за вас? Полно статей как на русском, так и на английском, в чем проблема?
    Ответ написан
    3 комментария
  • Не работает подключение файлов в PHP. Как настроить?

    @maxyc_webber
    Web-программист
    у меня машина не заводится. я думаю потому что руль кривой.

    подробнее опишите что значит не заводится?
    Ответ написан
    7 комментариев
  • Что нужно знать, чтобы стать хакером?

    BelBES
    @BelBES
    Самая главная книга для будущего Хакера - это Уголовный Кодекс, имхо.
    Ответ написан
    7 комментариев
  • Как правильно писать php вставки в tpl файлах?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Код выше вполне нормальный. Последние две строчки можно объединить, на работе скрипта это не скажется. Но тут есть один момент. Шаблон - это обычно html-текст, и php-инструкции в нём чужеродные (с точки зрения html), и даже расширения таких файлов обычно делают не .php, а .phtml - чтобы подчеркнуть, что это не php-скрипт с кодом. Поэтому в таких случаях используют специальный формат записи php-инструкций, причём обычно пытаются одну команду расположить в одну строчку, и не смешивать php и html в одной строчке. С этой точки зрения лучше не объединять эти две строчки в одну инструкцию php.
    Я обычно не пишу скобки, как в коде выше, я использую второй вариант открытия и закрытия блоков, без фигурных скобок:
    <div id="container">
    <?php if ($count>0): ?>
        <?php foreach($items as $item): ?>
            <div class="item"><?=$item?></div>
        <?php endforeach ?>
    <?php endif ?>
    </div>

    Но лучше поиграйтесь с этим вариантом и переходите на внешний шаблонизатор, например Twig. (вот есть урок по его встраиванию в сайт без фреймворка)
    Ответ написан
    1 комментарий
  • Обнаружил sql- уязвимый код. Какие возможности? Как воспользоваться?

    mlnkv
    @mlnkv
    JavaScript Developer
    Как воспользоваться? Сообщить разработчикам.
    1322909705_karma1.jpg
    Ответ написан
    Комментировать
  • Какую выбрать CMS на PHP?

    @kaasius
    Вы описали CMS по имени "любая"
    Ответ написан
    1 комментарий
  • Как на сайте запретить сканирование в 2ip.ru?

    @Anbit
    web разработка
    отключить интернет :)
    Ответ написан
    Комментировать
  • Безопасно ли открывать схему проверки входных данных сайта?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Какая связь между регуляркой и XSS?
    На стороне пользователя - валидация логики. На стороне сервера - повторная валидация логики и соответствующее экранирование/преобразование для сохранности и безвредности этих данных. Если в БД сохранение - prepared statements, вывод в HTML - htmlspecialchars, вывод в JSON - json_encode, вывод ещё куда - соответствующие преобразования для этого конкретного формата.
    Ответ написан
    1 комментарий
  • Какие есть фреймворки для PHP для работы с XML?

    kompi
    @kompi
    nullstack devoops
    Вы бы лучше написали, чем вас не устраивает целый букет стандартных инструментов для работы с xml.
    Ответ написан
    Комментировать
  • Как парсить курс валют и записывать в БД?

    winbackgo
    @winbackgo
    Как парсить курс валют и записывать в БД?

    пойти учить php, sql...
    Ответ написан
    1 комментарий
  • Как составить логику для фильтра?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вариант 1 - в php собираете запрос из кусков
    $where = array();
    if (isset($_GET['manufacturer']))
        $where[] = "`manufacturer` = '".$mysqli->escape_string($_GET['manufacturer'])."'";
    if (isset($_GET['madeIn']))
        $where[] = "`madeIn` = '".$mysqli->escape_string($_GET['madeIn'])."'";
    $query = "SELECT * FROM `table` WHERE ".implode(" AND ", $where);
    $result = $mysqli->query($query);

    Вариант 2 - запрос с двойным условием
    $manufacturer = '';
    $byManufacturer = 0;
    $madeIn = '';
    $byMadeIn = 0;
    if (isset($_GET['manufacturer'])) {
        $manufacturer = $_GET['manufacturer'];
        $byManufacturer = 1;
    }
    if (isset($_GET['madeIn'])) {
        $madeIn = $_GET['madeIn']";
        $byMadeIn = 1;
    }
    $query = $mysqli->prepare(
        "SELECT * FROM `table` ".
            "WHERE (? = 0 OR `manufacturer` = ?) ".
                "AND (? = 0 OR `madeIn` = ?)");
    $query->bind_param('isis', $byManufacturer, $manufacturer, $byMadeIn, $madeIn);
    $query->execute();
    Ответ написан
    2 комментария
  • Почему популярные хостинги ставят по умолчанию режим PHP CGI/FastCGI?

    GHua
    @GHua
    PHP в режиме fastcgi дает некоторые плюсы:
    - suexec -- запуск потока от имени владельца файлов, разграничение доступа;
    - возможность контролировать количество процессов обработчиков, их время жизни, время простоя;
    - возможность создать свой php.ini для каждого клиента;
    - возможность обслуживать несколько версий php одним веб-сервером;
    - утечка памяти в php процессе никак не сказывается на веб-сервере;
    - возможность собрать apache в режиме MPM worker/event, а значит экономить память на каждое соединение.
    Ответ написан
    Комментировать