Задать вопрос
  • Как получить список из массива без дублей?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Не могу разобраться, как получить список категорий из массива без дублей.

    Получать нужно из базы нормальный список, без дублей. В вашем случае это будет запрос с дистинкт, как написал roswell, однако:
    1) Запросы с дистинкт будут перебирать всю таблицу, что плохо и медленно
    2) Если у вас категории пишутся в таблицу ньюс, значит у вас лажа со структурой бд. Категории должны лежать отдельной справочной таблицей, выборка из которой будет во первых в разы быстрее, а во вторых будет удовлетворять третьей нормальной форме (3NF).
    3) Текущая структура не позволяет задать более 1 категории на новость.

    Есть еще куча проблем с таким хранением, но это уже другой вопрос.
    Ответ написан
    5 комментариев
  • Код не хочет обновлять данные, что делать?

    Armrisch
    @Armrisch
    Full Stack Developer
    Поставь debug поочерёдно по строчкам кода пойми где всё ломается и сам найдёшь решение.
    Ответ написан
    7 комментариев
  • Почему INSERT вставляет 2 строки вместо одной?

    @galaxy
    Скорее всего, потому что два раза дергается скрипт index.php.
    Он ведь у вас любой url обрабатывает?
    Смотите в браузере Network в Developer tools - наверняка там какой-нибудь запрос на favicon
    Ответ написан
    Комментировать
  • Как работают PHP-потоки (stream)? почему они не загружаются полностью в память?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Эту инфу нужно искать в отрыве от языка, это уровень операционной системы.
    Один из ответов на SO:
    What is Under the Hood in a Stream in Programming?
    Upd. Еще есть пересекающаяся тема как http streaming,
    я когда-то для себя шпаргалку писала (ссылка)
    Ответ написан
    1 комментарий
  • Что такое MVC и как его использовать?

    MVC - это про разделение логики на три основных куска:
    1. View - отвечает только за формирование html - как пользователь будет видеть страничку
    2. Model - отвечает за непосредственно логику по работе с данными, работает с базой данных и другими внешними сервисами. Именно тут следует реализовывать всякую валидацию, CRUD и прочее.
    3. Controller - обрабатывает http запрос, подготавливает данные из него, чтобы их могла обработать Model, а потом передаёт их во View (опционально), либо самостоятельно формирует HTTP ответ из результата.

    PS: это не книжное определение, а чисто моё, как я в большинстве случаев вижу реализацию MVC
    Почему надо использовать именно MVC, а не напрямую с предзапросом и экранированием надо делать?

    Не понял, про какое такое экранирование и предзапросы идёт речь, но MVC нужно просто для удобства расширения и изменения.
    Ответ написан
  • Как изменить GET запрос на фильтрах?

    romandkoz
    @romandkoz
    Формируй фильтры в массиве, а в ссылку добавляй через http_build_query(), тогда не нужно думать о порядке & и ?
    Ответ написан
    Комментировать
  • Как чаще всего бывает на практике?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    На данный момент учу php, а именно: ООП, интерфейсы и трейты.
    ООП, интерфейсы и трейты напрямую к пхп отношения не имеют, это общие принципы построения кода.

    Недавно узнал, что в php есть фишка рендеринга страниц (создаем метод, допустим, render() и вызывает каждый раз его, когда хотим отобразить какую либо php/html страницу).
    Круто, про то как происходит "рендеринг" конечно знать не надо, ну есть и есть...

    В свободное время листаю вакансии php программиста
    Надеюсь что пока это чисто академический интерес, судя по вопросу вы не сильно тяните на, допустим, стажера...

    если допустим, мне дадут по началу задачу "добавить в профиле пользователя строку с номером телефона и передавать ее в бд", на чем и через что я буду выполнять эту задачу, то ли через какой то уже готовый шаблон, то ли есть уже какая то готовая библиотека/фреймворк?
    На компьютере через клавиатуру будете. Возможно будет готовый шаблон (сомневаюсь что мы с вами говорим об одном и том же "шаблоне"), скорее всего это будет какой-то готовый фреймворк, и даже уже какой-то функционал на нем будет написан (но это не точно).

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

    KickeRocK
    @KickeRocK
    FrontFinish
    Вы пытаетесь реализовать пагинацию заново?
    Гуглится так: "#название_языка Pagination"
    Ответ написан
    3 комментария
  • Как отправить JSON данные POST-запросом на PHP?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Попробуйте так:
    <?php
    
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    
    $data = [
        "host" => "www.example.com",
        "key" => "EdD8dkmdNLlxREi2LkhJjYOH2kyQbJqM3cBKT5fX",
        "keyLocation" => "https://www.example.com/myIndexNowKey63638.html",
        "urlList" => [
            "https://www.example.com/url1",
            "https://www.example.com/folder/url2",
            "https://www.example.com/url3"
        ]
    ];
    
    $data_string = json_encode($data);
    
    $result = file_get_contents('https://yandex.com/indexnow', null, stream_context_create(array(
                'http' => array(
                    'method' => 'POST',
                        'header' => array(
                            "Content-Type: application/json; charset=utf-8\r\n" .
                            "Content-Length: " . strlen($data_string) . "\r\n" .
                            "Host: yandex.com"
                        ),
                    'content' => $data_string
                )
            )
        )
    );
    
    header('Content-Type: application/json; charset=UTF-8');
    echo $result;
    Ответ написан
    9 комментариев
  • Как производить переиндексацию в таблице SQLite?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега SQL
    Седой и строгий
    Во-первых, индексация - это не то, что вы описали. Во-вторых, смысл идентификаторов как раз в том, чтобы они никогда не менялись.
    Ответ написан
    Комментировать
  • Как перехватить любое исключение в php?

    thewind
    @thewind
    php программист, front / backend developer
    Ловите \Throwable $e
    Это интерфейс всех исключений
    Ответ написан
    4 комментария
  • Насколько целесообразно разбиение на функции и классы?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Посмотрите на имена функций, если по ним сразу понятно что делает каждая, то все нормально.
    Ответ написан
    Комментировать
  • Собеседование php программиста, какие технологии, кроме php/sql/фреймворка нужны?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Какие ещё фреймворки? Джун должен знать алгоритмы, структуры данных
    Ответ написан
    1 комментарий
  • Как посчитать ФИО в колонках с неправильным порядком?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Пример реализации для MySQL 8+:
    WITH 
    cte1 AS ( SELECT id, col1 val FROM test UNION ALL 
              SELECT id, col2 FROM test UNION ALL
              SELECT id, col3 FROM test ),
    cte2 AS ( SELECT id, GROUP_CONCAT(val ORDER BY val) FIO
              FROM cte1 
              GROUP BY id )
    
    SELECT test.id, test.col1, test.col2, test.col3, GROUP_CONCAT(cte2_2.id) ids
    FROM test
    JOIN cte2 cte2_1 USING (id)
    JOIN cte2 cte2_2 USING (FIO)
    GROUP BY test.id, test.col1, test.col2, test.col3

    Вывод:

    id	col1		col2		col3		ids
    1	Иванов		Иван		Иванович	1,2
    2	Иван		Иванович	Иванов		1,2
    3	Петров		Сергей		Алексеевич	3,4,5
    4	Петров		Сергей		Алексеевич	3,4,5
    5	Сергей		Алексеевич	Петров		3,4,5
    DEMO

    Если нужна ещё и нормализация (т.е. строго в col1 сунуть фамилию, в col2 имя...) - наилучшим вариантом считаю загрузку справочников имён, отчеств и фамилий (вполне доступные справочники) и их использование для категорирования. 99% записей будут полностью обработаны по ним, а оставшийся десяток записей (где два или все три значения отсутствуют в справочниках) можно и вручную обработать, вернее, пополнить справочник, чтобы при втором запуске все 100% были распознаны и категорированы корректно.

    выполняться будет на MS SQL Server, версию не могу сказать.

    Для MS SQL вместо GROUP_CONCAT будет STRING_AGG(column) [WITHIN GROUP ( ORDER BY column)]. https://docs.microsoft.com/ru-ru/sql/t-sql/functio...
    Ответ написан
    3 комментария
  • Как получить количество записей перед определенной записью в mysql с сортировкой по полю varchar?

    @Akina
    Сетевой и системный админ, SQL-программист.
    мне надо сделать подсчет количества записей перед определенной записью.
    Но обязательно с сортировкой по полю varchar asc.

    SELECT COUNT(*)
    FROM table
    WHERE varchar_column <= @value_in_definite_row

    Или строгое неравенство, если саму "определённую запись" не учитывать.
    Ответ написан
    7 комментариев
  • Обращение к записи БД требует некоторой обработки. Что лучше: обработать в скрипте, который обратился, или в хранимой процедуре в БД?

    @Akina
    Сетевой и системный админ, SQL-программист.
    что эффективнее: хранить в записи список id объектов, которые должны быть обработаны при обращении к этой записи, в виде строки (скрипт будет парсить строку и отрабатывать каждый id), либо сделать триггер и хранимую процедуру (MySQL), которая возьмёт эту работу на себя?

    Ни то ни другое.

    Если тебе нужна канава, и есть экскаватор, то взять из его ремнабора лопату и ей копать канаву - голимая дурь. Это что касается обработки в скрипте - сервере БД сделает то же на порядок быстрее и эффективнее.

    Но есть ещё косяк - в том, как хранятся данные. Упаковка набора данных в одну запись в виде CSV-списка - это тоже дурь в подавляющем большинстве случаев. Умные люди не зря придумали нормальные формы, которые позволяют обрабатывать данные максимально эффективным образом.

    Вот и займитесь - почитайте про нормализацию, нормализуйте схему БД. А потом обрабатывайте данные на сервере как надо. В большинстве случаев оказывается, что супер-пупер-сложная обработка сводится на самом деле к одному не сильно сложному запросу.

    Насчёт триггера - сильно сомнительно, что он нужен. Триггер - это реакция на изменение данных, тогда как, судя по описанию, сигналом на обработку будет явное действие оператора без изменения данных, типа нажатия кнопки в форме. По-моему, будет достаточно если не запроса, то хранимой процедуры.
    Ответ написан
    2 комментария
  • Как запретить редактирование html на сайте?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Никак. Всё, что ушло клиенту может быть изменено им.
    Например у ВК vk.com при попытке изменить стили/удалить элементы и прочие манипуляции ничего не дают
    С чего вы это взяли? Легко меняется как текст, так и стили.
    Ответ написан
    3 комментария
  • Как отличить отправку формы методом POST от обновления страницы в браузере, при котом повторно отправляются те же самые данные?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Просто в нормальном коде такой хрени не происходит. Даже если так случилось что отправка у вас методом пост, ну допустим надо так, то при обработке запроса на сервере делается редирект методом гет, по этому при перезагрузке ничего не отправляется повторно.
    Ответ написан
    Комментировать
  • Как протестировать производительность функций начинающему php-разработчику?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Как абсолютно верно заметил Роман Юрьевич Ипатьев, проблема не в вызове аргументов, а в абсолютно нелогичном подходе к архитектуре, которая тут просто швах...

    Просто на будущее - архитектура в разы важнее скорости исполнения, так как ресурсов всегда можно накинуть, а с кривой архитектурой ни поддержка, ни нормальная работа невозможна. Вы экономите 2 байта на каких-то мелких манипуляциях через Ж, при этом в коде совершенно невозможно разобраться, а любая модификация функционала может уронить весь проект или заставить менять код в 40 местах.

    Файл RouteController.php обрабатывает URL
    уже плохо, контроллер не должен знать что-то про урл и прочие переменные извне. Для этого есть роутер и реквест.

    и делает вывод о типе контроллера (гость, авторизованный пользователь или администратор).
    Как тип контроллера соотносится с ролью пользователя?

    Создаёт объект этого контроллера и отправляет в него аргументами (str)имя контроллера и (str) полученный URL.
    У вас же уже вызван контроллер, RouteController.php, либо он не контроллер, либо зачем тогда снова контроллер создавать? И зачем ему урл?

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

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

    Про то как оно примерно должно работать рассказывать наверное не стоит, чтобы не смутить ваш творческий поиск готовыми решениями. Если будет интересно - Дмитрий скинул вам замечательный курс от Елисеева, прям рекомендую.
    Ответ написан