За последние 24 часа нас посетили 17576 программистов и 1722 робота. Сейчас ищут 938 программистов ...

Какой вариант использования данных правильный?

Тема в разделе "PHP для новичков", создана пользователем Атм_Евгений, 31 авг 2017.

  1. Атм_Евгений

    Атм_Евгений Активный пользователь

    С нами с:
    21 июл 2017
    Сообщения:
    206
    Симпатии:
    5
    Здравствуйте!

    У меня на страницу приходит массив GET. Я его проверяю на наличие ключа: if (!empty($_GET['data'])) {... и в дальнейшем использую. Скажите имеет ли смысл после проверки присвоить переменной эти данные: $date = $_GET['data']; и далее в коде использовать $date или можно далее в коде использовать $_GET['data'] ?
    Ключей же может быть не мало и при каждом использовании данных нужно будет выбирать необходимый ключ из массива, наверное, это как то повлияет на производительность? И вообще влияет ли на производительность выбор данных из массива по ключу?
    Подскажите, как правильно?
     
  2. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    В данном случае нужно переживать не за производительность, а за удобство чтения кода и безопасность. У вас входные данные должны пройти определенные фильтры перед тем, как попадут в БД. Лучше использовать переменные или массивы переменных и там хранить "почищенные" входные данные.
     
  3. Атм_Евгений

    Атм_Евгений Активный пользователь

    С нами с:
    21 июл 2017
    Сообщения:
    206
    Симпатии:
    5
    Это я в курсе, ничего у меня в БД не идет. Какой вариант правильный не принимая во внимание вопрос безопасности!? И почему? Мне кажется загоняем в переменную, т.к. если оставим массив, то при каждом обращении к массиву будет весь массив со всеми данными загружаться в память, затем находиться нужный ключ ... и все это из-за одного ключа. Верно или нет?
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    isset
     
  5. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Ну не идет sql в БД, так пойдет XSS на фронтенд. Ну ок, ваше дело. В любом случае данные как-то обрабатываются, проверяются на размер, тип, убираются пробелы и т.д. Каждый раз все это проделывать, используя $_GET['data'] не рационально. Один раз обработали и используйте везде из того же массива.
     
  6. General_App

    General_App Новичок

    С нами с:
    25 янв 2016
    Сообщения:
    51
    Симпатии:
    1
    Я всегда после проверок GET и POST все присваиваю переменной, и использую чистую переменную.
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
  8. Атм_Евгений

    Атм_Евгений Активный пользователь

    С нами с:
    21 июл 2017
    Сообщения:
    206
    Симпатии:
    5
    Не стоит тут вопрос чистые данные или нет, не надо ничего проверять. Все с данными ОК.
    И все таки какой вариант использования будет быстрее для исполнения на сервере? Ну может логичнее и рациональнее, а самое главное почему!?
     
  9. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Сколько миллионов запросов у тебя будет идти в секунду? Если один запрос в час/минуту, то в чем вообще проблема??
     
  10. Атм_Евгений

    Атм_Евгений Активный пользователь

    С нами с:
    21 июл 2017
    Сообщения:
    206
    Симпатии:
    5
    Вопрос в правильности написания кода.
     
  11. General_App

    General_App Новичок

    С нами с:
    25 янв 2016
    Сообщения:
    51
    Симпатии:
    1
    PHP:
    1. if (!empty($_GET['data'])) { $data=$_GET['data'];}
    2.  
    3. $data
     
  12. Атм_Евгений

    Атм_Евгений Активный пользователь

    С нами с:
    21 июл 2017
    Сообщения:
    206
    Симпатии:
    5
    Ну а зачем присваивать то, когда можно в коде использовать $_GET['data'] !?
     
  13. General_App

    General_App Новичок

    С нами с:
    25 янв 2016
    Сообщения:
    51
    Симпатии:
    1
    --- Добавлено ---
    К примеру чего это говнокод
    PHP:
    1. $name = $db->real_escape_string(strip_tags($_GET['name']));
    --- Добавлено ---
    Если раз двадцать вызвать переменную надо, код быстрее писать и меньше
     
  14. Атм_Евгений

    Атм_Евгений Активный пользователь

    С нами с:
    21 июл 2017
    Сообщения:
    206
    Симпатии:
    5
    Серверу как быстрее и легче обработать?
     
  15. General_App

    General_App Новичок

    С нами с:
    25 янв 2016
    Сообщения:
    51
    Симпатии:
    1
    Быстрее наверно просто из переменной чем из массива GET
     
  16. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    бред
     
  17. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    вопсчем слушайте дядьку

    есть надо 5 раз обратиться к $_GET['data'], то так и делай, разница от того что ты присвоишь это значение другой переменной и будешь юзать, даже на тысячи обращений ты не заметишь (если конечно в data не мегабайты инфы)

    Если же инфа к этом элементе массива юзается +100500 раз, да, обращение к переменной будет быстрее нежели к элементу массива

    Но опять же, перфекционизм в коде я сам люблю (да да, юзаю sizeof вместо count) но все в меру должно быть, и пока нет нагрузки, переживать не о чем, а если будет, то это далеко не самое проблематичное место )
     
  18. Атм_Евгений

    Атм_Евгений Активный пользователь

    С нами с:
    21 июл 2017
    Сообщения:
    206
    Симпатии:
    5
    Спасибо! Я нашел инфу по оптимизации кода на хбрбрх...
     
  19. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    А до этого он где будет находиться? Если ты имеешь доступ к переменной, она уже в памяти.
     
  20. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    PHP:
    1. $name = $db->real_escape_string(strip_tags($_GET['name']));
    Тут прекрасно все.
     
  21. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Будет загружать в память откуда? Из параллельной вселенной? Все уже в памяти загружено. И нужный ключ не "находится". Массивы в пхп это, конечно, не чистые сишные массивы с прямой адресацией, но и не списки, чтоб что-то там искать. Это хэш-мапы, причем довольно быстрые. Не парься.
    Опасное дело. Погляди год этой инфы. А то есть статьи в стиле "название переменной должно быть не больше 6 символов, иначе интерпретатор вешается и все тормозит".

    Ну а вообще:
    PHP:
    1. $data = $_GET['data'] ?? null; //[], '', false, 0, что по смыслу подходит больше
    Заменяет кучу кода, проверок и тд.
    А еще лучше - пользоваться array_input-фильтрами, чтобы из гет- и пост-массивов вытащить только то, что нужно.
    Использовать $_GET['data'] в коде я б не рекомендовал тупо вот с точки зрения поддерживаемости кода. Сменится завтра название параметра и понеслась - править его везде, где он встречается. В случае же с фильтрами или переприсвоением переменной, у нас есть только одна точка правки. А чем меньше точек правки, тем меньше вероятность ошибки. Тем больше гибкость и поддерживаемость решения. Тем меньше седых волос, слез и вероятности словить факап. А это вот гораздо важнее пары сэкономленных килобайт оперативы и чего-нибудь астрального из мира "мифы древних оптимизаторов".