За последние 24 часа нас посетили 26380 программистов и 1814 роботов. Сейчас ищут 985 программистов ...

Стоит ли принимать $_GET параметр в функцию?

Тема в разделе "PHP для новичков", создана пользователем amf1k, 16 май 2015.

  1. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    Стоит ли принимать $_GET параметр в функцию? например принимаем $_GET['id']
    Код (PHP):
    1. function getResult($id){
    2. //что то делаем с  $id
    3. }
    4. print_r (getResult($_GET['id']));
    5.  
    6. function getResult(){
    7. $id = $_GET['id'];
    8. //что то делаем с  $id[
    9. }
    10. print_r (getResult());
    11.  
    какая здесь разница???
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    разница очевидна же.
    в первом случае создается функция которая работает с некоторым (любым) идентификатором. то есть будет не важно откуда она появилась перед вызовом функции.
    во втором случае создается функция которая жестко работает с определенным ключом определенного суперглобального массива. то есть невозможно подпихнуть другое значение не переопределив оригинальное.
    вот и вся разница в алгоритмах. а вот где какое юзать - уже будет зависеть от архитектуры приложения.
     
  3. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    а если мне "просто" нужно вывести инфу с БД по id ???
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вот и решай как именно ты будешь выводить инфу из бд по ид.
    сценарий 1. ты пишешь функцию "чтения из бд по ид". и передаешь в неё нужный айдишник. очень гибкий вариант. можешь пачками айдишники выбирать если надо. рекомендую.
    сценарий 2. ты пишешь функцию "чтения из бд по ид указанному в ключе таком-то массива такого-то". ну тут грубо говоря ты вызвал функцию и она нашла или не нашла айдишник в запросе и потом нашла или не нашла в бд инфу с таким айдишником...
    в общем, в контексте "вывести инфу из бд по ид" я бы первый вариант юзал.
     
  5. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    с этим все ясно, спасибо)
    2-й вопрос:
    пришел массив айдишников с формы
    Код (Text):
    1. $arr = array(1,4,9,20);
    вариант первый:
    есть функция выборки инфы по id
    Код (Text):
    1.  
    2. function getResult($id){
    3.     //Функция возвращает инфу (чего то) по id
    4. }
    нужно в цикле вывести информацию по айдишниках с формы
    Код (Text):
    1.  
    2. foreach($arr as $value){
    3.     $result = getResult($value);
    4.     echo $result['поле чего то'];
    5. }
    вариант второй:
    есть функция выборки инфы
    Код (Text):
    1.  
    2. function getResult($array){
    3.         //преобразование массива айдишников в строку
    4.         $list_id = implode(',', $array);
    5.     //запросс
    6.     $query = 'SELECT `все поля` FROM `таблица` WHERE `id` IN("$list_id")';
    7.     //Возвращаем массив по выбранным id
    8. }
    и простой вывод
    Код (Text):
    1.  
    2. $arr = getResult($arr);
    3. foreach($arr as $value){
    4.     echo $value['поле чего то'];
    5. }
    какой вариант будет правильней и быстрее???
     
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.599
    Симпатии:
    1.764
    Второй. Чем меньше запросов, тем лучше
     
  7. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    А если допустим с формы мне придут айдишники и количество раз выводимой инфы по каждому айдишнику, пример :
    Код (Text):
    1.  
    2. $arr = array(1=>3,4=>3,9=>2,20=>2);
    то есть, айди 1 нужно вывести 3 раза, айди 4 нужно вывести 3 раза, айди 9 нужно вывести 2 раза, айди 20 нужно вывести 2 раза
    то уже второй вариант мне не подойдет, в отличии от первого, как с этим быть???
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    что значит "вывести три раза"? айдишник у тебя в базе ОДИН. если он тебе нужен - ты его ОДИН раз прочитаешь. а выводить выводи сколько хочешь. в чем сложность?
     
  9. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    есть форма, с формы пришли массив айдишников, у каждого айдишника с формы есть количество "чего то", теперь нужно вывести информацию с БД по этим айдишникам и добавить при выводе поле "чего то"!
     
  10. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    объяснил так объяснил :D ну если ты понимаешь что сказал то делай.
     
  11. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    с формы придет массив айдишников, и каждому айдишнику будет привязано "что-то", например
    Код (PHP):
    1. $arr = array (
    2. array('id'=>1,'дополнительное поле'=>'что-то'),
    3. array('id'=>4,'дополнительное поле'=>'что-то'),
    4. array('id'=>9,'дополнительное поле'=>'что-то'),
    5. array('id'=>20,'дополнительное поле'=>'что-то')
    6. ); 
    и нужно вывести всю инфу по этим айдишникам и добавить каждому айдишнику поле => 'что-то' при выводе!
     
  12. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    и? какие мысли как ты это сделаешь? :D
     
  13. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    вот я и спрашиваю, как??? есть конечно идея, выбираем всю инфу с БД по всем айдишникам в массив, потом сравнивать этот массив с тем что с формы, и выводим инфу по тем айдишникам, которые пришли с формы и дополнительное к ним поле!

    Добавлено спустя 2 минуты 34 секунды:
    ну я думаю, что можно как то иначе это реализовать! потому что если у меня 1000 000 записей в таблице, то выборка и сравнение массивов много времени будет занимать(
     
  14. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну так сделай. в чем сложность?
     
  15. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    вот 2-ю намутил)
    берем массив с формы - вырезаем только поля с id - выбираем с БД инфу по этим айди - потом циклом сравниваем массив с БД и массив с формы - и выводим всю информацию по этим айдишникам присвоив каждому айди "дополнительное поле"
    что будет правильней и быстрее???
     
  16. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    правильный алгоритм тот который работает как нужно. то есть как ты понимаешь если у задачи несколько решений то все они правильные. далее уже вопрос в том какое решение вписывается в архитектуру приложения.
    быстрее? ну ты напиши бенчмарк да сравни пару-тройку примеров реализаций. и узнаешь какой алгоритм быстрее работает а какой быстрее пишется. ты тратишь время на бессмысленную разведку. тебе сейчас сидеть кодить надо а не спрашивать как лучше. когда ты станешь программистом ты сам поймешь как лучше.
     
  17. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    лучше всегда использовать 1-й вариант. а в нагрузку к нему использовать еще одну функцию для работы с $_GET параметрами.
     
  18. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    а по 2-му вопросу как быть???
     
  19. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а ты всегда оверквотишь?
     
  20. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    нет, это 1-й раз)
     
  21. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    ну ведь вроде уже писали, чем меньше запросов тем лучше, по этому получай за раз все что нужно, а не по одному запросу.

    и кстати если мне не изменяет память в книге по которой я учился было написано что очень не рекомендовано выполнять запросы к БД в через цикл.
     
  22. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    в моей ситуации 2-й вариант не сработает!(
    с формы придет массив айдишников, и каждому айдишнику будет привязано "что-то", например
    Код (PHP):
    1. $arr = array (
    2. array('id'=>1,'дополнительное поле'=>'что-то'),
    3. array('id'=>4,'дополнительное поле'=>'что-то'),
    4. array('id'=>9,'дополнительное поле'=>'что-то'),
    5. array('id'=>20,'дополнительное поле'=>'что-то')
    6. );
    7.  
    и нужно вывести всю инфу по этим айдишникам и добавить каждому айдишнику поле => 'что-то' при выводе!
     
  23. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    чувак, ты вообще собираешься уроки там какие-нибудь почитать, мануальчики? выбери пакетом все айдишники из базы да склей по этим айдишникам с той дополнительной "что-той" от которой ты так горишь. в чем сложность-то?
     
  24. amf1k

    amf1k Активный пользователь

    С нами с:
    20 авг 2014
    Сообщения:
    86
    Симпатии:
    0
    поставим другую задачу!
    есть 3 таблицы:
    1-я фильмы ( поля id,title и т.д )
    2-я актеры ( поля id,name и т.д )
    3-я роли в фильмах (поля id_movie, id_actor) - это для связки фильмов и актеров
    Мы зашли на страницу актера, например айди 1, вывели его фильмы - это просто)
    Теперь мне надо вывести на этой же страницы всех актеров, которые играли роли вместе с этим актером (айди 1) в одном фильме, и подсчитать количество общих фильмов по каждому актеру!
    Пример: станица актера - айди 1
    он играл роль с актером - айди 2 (количество общих фильмов - 1)
    он играл роль с актером - айди 6 (количество общих фильмов - 2)
    он играл роль с актером - айди 8 (количество общих фильмов - 2)
    он играл роль с актером - айди 9 (количество общих фильмов - 3)
    он играл роль с актером - айди 84 (количество общих фильмов - 1)
    выборку делаю в таблицы роли (получаю количество айди актеров и количество общих фильмов по каждому актеру), а выводить информацию об актерах мне уже надо с таблицы актеры, как с этим быть???
     
  25. ruRikki

    ruRikki Новичок

    С нами с:
    17 май 2015
    Сообщения:
    38
    Симпатии:
    0
    Все GET надо чистить, неизвестно что введет пользователь в адресной строке ручками, отдельный файл со стандартными GET делаешь и включаешь в нужных файлах. По любому выйдешь на $id (if (!empty($id)))