Задать вопрос
  • Post и Get запросы, какая между ними разница и что лучше и для каких целей?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Общего между ними то что они работают одинаково. Разницы между ними технически никакой. А вот идеологические различия есть.

    Я расскажу о них в контексте PHP. Прошу заметить что протокол HTTP к PHP имеет косвенное отношение потому что он создавался для обмена html страницами а PHP просто расширяет возможности и того и другого.

    GET запрос используется чтобы получить данные а POST чтобы отправить. (Напоминаю что технически они работают одинаково).

    Поэтому в контексте PHP опираясь на эту идеологию сделали следующим образом:
    1. При каждом запуске PHP по умолчанию создаются суперглобальные массивы ($_GET, $_POST).
    2. Если в строке запроса есть вопросительный знак(?). То все что после него считается параметрами GET запроса они представлены в формате 'ключ'='значение' и в качестве разделителя используется знак амперсанда (&)
    Пример:
    GET /index.php?name=Андрей&surname=Галкин
    это строка запроса, тут 2 параметра. эти параметры попадут в массив $_GET.
    3. $_POST заполняется другим способом. содержимое этого массива заполняется из "заголовков запроса". То есть из места, скрытого от глаз в явном виде. Всю рутину по созданию таких заголовков берет на себя браузер. Хотя иногда и что-то редактируется в заголовках в ручную.

    Чаще всего пост запрос используется в формах (для отправки данных).

    Например у нас есть форма для входа 2 поля логин и пароль.

    Представим что мы используем GET метод. Тогда при отправке формы мы перейдем на следующий адрес /login.php?login=Андрей&password=123 согласитесь что так передавать такую информацию совсем не безопасно. Любой может открыть ваш браузер и начиная вводить адрес сайта он из истории может увидеть ваши пароли и логины.

    А вот если бы мы указали методом POST то мы бы получили следующий запрос:
    POST /login.php (login=Андрей&password=123) то что в скобочках было бы скрыто и никак не сохранено в браузере.

    Теперь другая ситуация например форма поиска. Мы вводим текст и получаем страницу с результатами. Вот тут уместнее GET форма. потому что нам было бы удобно сразу иметь ссылку на результат поиска, то есть добавить в строку запроса можно выразится "Публичные параметры", которыми можно поделиться. И как результат в строке браузера будет конкретная ссылка на текущую страницу. Мы можем ее скопировать, и разместить где-нибудь, или например скинуть другу. И получить при переходе одну и ту же страницу. А не просить других людей зайти на сайт и в поиск вбить определенную фразу чтобы получить необходимую страницу.

    В общем подводя итог:
    GET - это чтобы получить определенную страницу в определенном виде ( сортировка, текущая страница в блоге, строка поиска и т.п. ).
    POST - для оправки данных которые не влияют на отображение страницы, в том плане что эти данные влияют только на результат выполнения скрипта ( логины, пароли, номера кредиток, сообщения и т.п. ).

    И еще одна хорошая новость их можно комбинировать, например
    POST /index.php?page=login (login=Андрей&password=123) Думаю я уже достаточно объяснил что из этого получится и какие параметры в какой массив попадут.
    Ответ написан
    2 комментария
  • Что такое slug в разработке?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    это что то типа нашего ЧПУ (человекопонятный URL)
    Ответ написан
    1 комментарий
  • Что такое slug в разработке?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Чаще всего, как уже написали, встречается в URL, но все же его значение чуть более шире - slug это уникальная строка идентификатор, понятная человеку (в отличие от ID) и содержащая только "безопасные" символы:
    - 0-9
    - a-z (общепринято - в нижнем регистре)
    - символ -
    - иногда еще символ _
    Могут использоваться не только в URL для понятности, но и, например, в запросах к БД (в первую очередь - на уровне АПИ) - ведь
    SELECT * FROM pages WHERE category="some-slug"
    более понятно, чем
    SELECT * FROM pages WHERE category=126.
    На уровне API это выглядит как
    get_pages_in_category( 'some-slug' )
    или
    $object->get_pages_in_category( 'some-slug' ).
    В общем, это человеко-понятный уникальный идентификатор.
    Ответ написан
    1 комментарий
  • Как собрать многострочный INSERT циклом?

    fwlone
    @fwlone
    ^^
    Примерно так, сначала собрать VALUES потом подставить в запрос
    $url_statistic = file_get_contents("https://example.ru");
    $json_statistic = json_decode( $url_statistic );
    $statistic = $json_statistic->statistic;
    $values = '';
    
    foreach ($statistic as $stat) {
        $id = $stat->id;
        $name = $stat->name;
        $descripition = $stat->description;
        $balance = $stat->balance;
        
        $values .= "('$id', '$name', '$description', '$balance'),";
    }
    
    $values = trim($values, ',');
    mysqli_query($sql, "INSERT INTO table (id, name, description, balance) VALUES $values ON DUPLICATE KEY UPDATE balance = VALUES(balance)");
    Ответ написан
    5 комментариев
  • IOS и JS-событие «click»?

    @egorinsk
    Вроде бы iOS устройства позволяют кликать не на все элементы страницы а только на ссылки, элементы с tabIndex и (возможно) элементы с onclick. Советую вместо гадания на кофейной гуще выгуглить на официальном сайте Эппла официальный документ про особенности Safari в мобильных устройствах?
    Ответ написан
    2 комментария
  • Как запретить масштабирование на веб-сайте?

    iiil
    @iiil
    Инженер и вэб-дизайнер, рисую.
    В связи с уточнением: никак. Масштаб страницы - фундаментальная вещь, масштаб нужен, например, для слабовидящих людей. В том же firefox есть возможность изменять не только весь масштаб, а только текст.
    Желание запретить масштабирование, даже если бы это было возможно, противоречит концепции доступности информации.
    Поэтому верстать надо так, чтобы сайт смотрелся читаемо (пусть и не так красиво) при любом масштабе, а также при масштабировании только текста.
    И это единственно правильный ответ.
    Ответ написан
    2 комментария