Ой, все!
Контакты

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (24)

Лучшие ответы пользователя

Все ответы (34)
  • 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 комментария
  • Как лучше организовать файловую БД?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    В вашем случае, нужен очень грамотный специалист который знает все недостатки такой организации информации.
    В частности блокировка файлов, ожидание разблокировки файла, в общем организация одновременного доступа. Если вы просто будете делать инслюд а потом что-то типа "file_put_contents()" вас могут ожидать неприятные последствия. по сути вам нужно будет написать sqlite только языком PHP.
    Ответ написан
    Комментировать
  • Таблица отношений пользователей. Как правильно?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Правильная таблица отношений:
    Отмечу на всякий случай никаких id(самих записей) не должно быть! все выборки по ключам приведенным ниже
    user_id|friend_id|relation_id|date(timestamp)
    222|444|1|ts
    444|222|2(не просто дружит а например встречается, женат, и т.п. для каждого случая свой уникальный id)|ts

    первичный ключ составной (user_id,relation_id)
    дополнительный ключ (friend_id, relation_id)

    если кидают заявку создается 1 запись user_id>friend_id>0

    проверка на поступившие заявки friend_id(current_user_id) | relation_id = 0

    подтверждение: (должна быть транзакция!) то есть если отвалится один из запросов нужно вернуть все как было.
    на MyISAM ручками(средствами PHP проверяем). На innodb делаем транзакцию средствами БД.
    вписываем строчку с подтверждением курент_юзер > фриенд_ид > relid - 1 и обновляем основную заявку до единицы. Повторюсь если одна из команд не пройдет надо все откатить.

    если отказ то удаляем основную заявку из базы.

    по поводу дополнительных отношений:
    кинуть заявку можно только пользователю у которого взаимно стоит 1 и проверка собственно на заявки
    friend_id(current_user_id) | relation_id >(больше) 1.
    Остальной алгоритм тот же. одновременно у 1 пользователя может быть только одна запись с отношением больше 1 (желательно, это как индикатор именно личного отношения, для группировки друзей лучше все же завести отдельное поле)
    Описание с реальной базы данных на 30 миллионов пользователей.
    Ответ написан
    Комментировать
  • Сложный запрос mysql в php. В чём ошибка?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    $qr_result = mysql_query($sql); //исправил
    or die(mysql_error());

    1. Между функцией mysql_query($sql) и or die(mysql_error()); не должно быть точки с запятой.
    2. При подключении к базе нужно передать команду с присвоением кодировки:
    mysql_query("SET NAMES UTF8") or die('Не получилось выставить кодировку');

    Попробуйте может в этом и весь подвох собственно. Если у вас нет синтаксических ошибок. либо еще каких подводных камней о которых мы не знаем.
    Ответ написан
    Комментировать
  • Система бана на MySql, будет ли это работать?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    таблица users поле ban (boolean) при авторизации получаем это поле если TRUE то высылаем. на страницах к которым есть доступ у пользоателей делаем проверку что пользователь авторизировался. Забаненый пользователь не получает авторизации а следовательно находится на сайте как гость.
    Ответ написан
    2 комментария

Лучшие вопросы пользователя

Все вопросы (5)